From 40cc4e7a7c4df3047e0887608948e020a40a8175 Mon Sep 17 00:00:00 2001 From: Stefan Profanter Date: Wed, 26 Oct 2016 20:38:55 +0200 Subject: [PATCH] v3.0.7 --- CHANGELOG.md | 2 + README.md | 1 + .../Properties/AssemblyInfo.cs | 4 +- .../bin/Release/Configuration.DkimSigner.exe | Bin 823808 -> 823808 bytes .../bin/Release/Configuration.DkimSigner.pdb | Bin 341504 -> 341504 bytes .../Properties/AssemblyInfo.cs | 4 +- .../Exchange 2007 SP3/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2007 SP3/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2010 SP1/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2010 SP1/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2010 SP2/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2010 SP2/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2010 SP3/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2010 SP3/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../bin/Exchange 2010/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../bin/Exchange 2010/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2013 CU1/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2013 CU1/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2013 CU2/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2013 CU2/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2013 CU3/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2013 CU3/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2013 SP1 CU14/BouncyCastle.dll | Bin 0 -> 2049024 bytes .../Exchange 2013 SP1 CU14/BouncyCastle.xml | 24206 ++++++++++ .../ExchangeDkimSigner.dll | Bin 0 -> 22016 bytes .../ExchangeDkimSigner.dll.config | 6 + .../ExchangeDkimSigner.pdb | Bin 0 -> 48640 bytes .../bin/Exchange 2013 SP1 CU14/MimeKit.dll | Bin 0 -> 800768 bytes .../bin/Exchange 2013 SP1 CU14/MimeKit.xml | 38398 ++++++++++++++++ .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../bin/Exchange 2013/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../bin/Exchange 2013/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2016 CU1/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2016 CU1/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2016 CU2/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2016 CU2/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2016 CU3/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2016 CU3/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes .../Exchange 2016 RTM/ExchangeDkimSigner.dll | Bin 22016 -> 22016 bytes .../Exchange 2016 RTM/ExchangeDkimSigner.pdb | Bin 42496 -> 48640 bytes 61 files changed, 62617 insertions(+), 4 deletions(-) create mode 100644 Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/BouncyCastle.dll create mode 100644 Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/BouncyCastle.xml create mode 100644 Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.dll create mode 100644 Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.dll.config create mode 100644 Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.pdb create mode 100644 Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/MimeKit.dll create mode 100644 Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/MimeKit.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 55402fb3..bbe4a9f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ ## Releases +* 26.10.2016 [3.0.7]: + New: Support for Exchange 2013 CU14 * 25.09.2016 [3.0.6]: New: Support for Exchange 2016 CU3 * 09.09.2016 [3.0.5]: diff --git a/README.md b/README.md index 480eb038..161c2da3 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ The DKIM Signer Agent [ExchangeDkimSigner.dll] is compiled for .NET 3.5 (Exchang * Exchange 2013 CU11 (15.0.1156.6) * Exchange 2013 CU12 (15.0.1178.4) * Exchange 2013 CU13 (15.0.1210.3) +* Exchange 2013 CU14 (15.0.1236.3) * Exchange 2016 Preview (15.1.225.17) * Exchange 2016 RTM (15.1.225.42) * Exchange 2016 CU1 (15.1.396.30) diff --git a/Src/Configuration.DkimSigner/Properties/AssemblyInfo.cs b/Src/Configuration.DkimSigner/Properties/AssemblyInfo.cs index 407cc04e..5d7f8fd6 100644 --- a/Src/Configuration.DkimSigner/Properties/AssemblyInfo.cs +++ b/Src/Configuration.DkimSigner/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.0.6")] -[assembly: AssemblyFileVersion("3.0.6")] +[assembly: AssemblyVersion("3.0.7")] +[assembly: AssemblyFileVersion("3.0.7")] diff --git a/Src/Configuration.DkimSigner/bin/Release/Configuration.DkimSigner.exe b/Src/Configuration.DkimSigner/bin/Release/Configuration.DkimSigner.exe index 2700249852095643f28bd2b24547c349c510d786..01426ec02a3cb217073f85cfa1d3ba4073a2bf65 100644 GIT binary patch delta 11960 zcmZXa2V7J~_xI1a;O+veaYcG}6;?W^fCW)ev7lmy*cB8jcrA%RU9bQe3pgs+qGAbl zbX82$sIljX(F9B^fml$~XrhTRn)v+lp1F6x&GYj4?A`g^-+#THX61)(b&;2h@Ly1jC3%?es;)sk)yfNfxRnTxG; zgX^Gin>x$vHg%TCbt1P+5wI$%&M-5o&TzQ3;fOkTUT--%y3TTRoyc8|se?Pwbv~0~ z>MT?1L~fZ@2iIaIP&Z=Q#^T3pcH4=#jooRx5BIPY?E>%sJKC;4o@BcACnPU_cA@=O zQiwlW)uDyd-k*KeAq|HypV(+FCC8?amqW4RIk`=#r_$m7)t`nObH&iK&!wMGJDGzJe=bf(bx=T6_;BQr(uSqTe>_C@Yo&y6QQ_5OL z?Ok>m05e=^HvOF)g1j{H2sSgmEl#!UkDrD318d%GG<9New=UenY(kvECPQ6hAcpILtE=ZW}?z1QCfpIKVa6<@IS1I9{m zE!pM)ha0@0idq&oz=dTDT=0%84F?@Wvay^V?0`7T^7W7%=$F@$mhIov9)Bq#gWBe3 z>+IMdsJX$`(4f#k<4i-jD!D!GW8WnE;2HKyvL{^~QbO=5Yn$Q`RzbDp1KyBnnoe~c zH1gegciM)|jPugwb1x#zl4tw7eW%rIA_% zvWjuraUA|jl%ou8|MA@h*#-l_MEiu`g%Mp%5KrZ_*5IMZH?c zeww`!?^`lHNVmnm*^R6nSjOhhU4iFV!+C-D6^ohY-L$ebS>B>chDM^i!)!rzC)ZI? zeclZe{oG;Sw!YPf!mjixRr6tjq*oPeD=QPC&g)^Z&Jx6mz*% zv}J0}0?F@PD0dzzK;BAK<#M{1GU*PH+O>mB&*eiYr#Wg3T4#AAF-@6^jxMfp zzDjNeTRx5a8OqN66jw1*UW8#IX}XN{)C#33@?UIHUOTThkVY~(Nx<9 zIZ1N6_Uufa7iG1d@t z@1dK@Z1VOhV;15m$uY5zNyx`UexJ(qUIPtUc_!U3nP`apB@=Cv_SMZD?R1h{Ot)!? zT+H9%@tj-mhbqKFEBkh=15YijrUgs-;sW;V5?5Tyo-A>9Jx6kh#!brlwQfb0Xx!zd zam;h+L#?s`J>!_&$M^UoJp0(#M44dTuncdSC!JQF#+of_srfLDq8G6K%X}N&;YD31 z$h6}lJbzh%DT*MY6}4C+cjU#^O7VSOY{QG{YN7y9%e&z;Hg|bn-}*45Dl4g(B$rYJ z`2<}w@+J0U`4x2)L1*^GibD336t(RZ zI&sYyN+lYk4Xnp%FGD$LTB{ZL2b;Zmgu&R22KHZfYgPy12FrVE3MEQ-TZ_J|OL!BD zM^N^^SR81aOm#{O4z8MITj|N5lAD~N-g2i0!@+~kQ`2>c`YgIBWqrld#u_$dojV;_ z^49&{=qBAZO{Avz2g+AJMA{&W0ty`hugM$r{vg+_1@D>^6SM`?dc@N_F|QLA~20<_O8O^ zY~9|@G!D1-M&f1GXdmAvJMJ4y!?2pl|FCoWCQ9%1W?}n3lp=bwUHfA(fz|GhZNd|E z38f^So=dcDazHeTI$)$Wy?GfnQ9&-`hU9(@*0`O)q3WPHHn z&%-6Ber)^at?gp_QJ-}#ass>ixry3kf4nbEL(1_;%wfxpx59FE`uHdc?|UK~e`ozq zL`oh>Z1IUODLRQAJrRKe*&|ZsF}IU(xQnHn9E)e!iId?JiMni>~TaD{7bF^c=j;K0eK-?D%QgO$M<0r_-gD16ZFk zp;G(+Ht$SF9KlYU38!{FJ2RG!@kw9u3CaF44}WF4v)$<+(eG>*y~n`%!4GEBA2_nI zvj!<{AUk{ZCM~#4=ho9&i8W0t5};$ zYxx=L%B5~Jd5)JuB<*0<KLbT@J$;O!_JuSF%=LWzvU+?O(NYJUN)2 za%Bm*h_hUU<<3{@(EML6yax~@wjN$IZKrggl?_9LB)H|jSg&)A9Ie%@SIzi-6s((J zq=SQf&{%$3*~paJ_AX6l(CLqao?K8Os)BP<_WEnRi{e>CCq@o9H__Y;noA3?a(7-B_ z{>36IBS=iG^pj|F&#RoG8JA4X7PB{%(=_T1&!%2?qemt0`n+CMq?tPMjWCWbY5-%3 z^-+r$%^E^F#JT^lsF7TMP)wBQD7^QF zFK`Q+e8UreWBE6#rQl&K{bsv_F2kt(&g#*kn99m$EqTds-hy!T3{njyUmEV}mX0ox ze1sH(%l~K39^ag5uHS}&2hDF!y^&jtAU7EusOacwa1Cx`aFxsGR>qe!?ID9?#r`an zm6H4&Ni)t7I=UI$dEbrHM~@+AYU1q1`agAK8F$ktC0(blNivx3UMqUsJKXDm zKeNU6!d#7G$@nUDNy_R$iz?#?6T7g8DF|Hq3i7H&Z?zW(}k^xMUopNs^SZOsQd8Z74PQyV@}Nm?u3-p#8MhqjcIG zEsw&a_flESqfn_$Dr@>Ug7)F=j~`R64S&)ZA6w)nZIP#zeLqJ^UTN&^&$Q2_G2_!_ zl+wFD&A}{o>1ium$KF2eNgpG-KRZTQUZnY*sgoqRmWt}(PdlM*1w%S({##(T=IM1(UtZ#0B*@FC z#E-%|2>h!-c-={Nl@T!oQz(<)yLjJQ*l&-KW@g^YNPNr6UWVgHcK78ZIshmB5rze9 z?jHqeKOD;@QjmXTziX_^tH`GAlgRlkn&%xd9i0MuNwWK-h54`Y@?RmnBzoD<%a&dZ z=%p#of2Do9-Yt9*fN}6ZC`d$TOy8s#69)I}O7C0BHx=p(0p`y9>o&-BrO!Pu6cX#H zN;?!jRVW8SobGFr;Y2+h5( zrNUJ~$xhXf3bkf|qnsMhmsYO@O>%M|GW1fN&Z3Irp@pEiRB=4S3R+0o1n4hlDQOd6 zqM$<3(qXQkV$#xq3EE8BMA+HOtcKW0;zT$p#C=Xpbd%tUAd8bTQH`L_oIG@s;iaIn zPJTpss;^9XiohPBazD zAj+^(A$1UC*rd<}n62}H8E{^;B&Wl5GvKzU7wQ}bGvU6V_RjG{PX+ZLZ5BWuB?8qO ztD6O`L=-<420BmFeE|Jb5r#WYB^oLy&AAED#Cn=eWEPa^JX`l6tQM5z>;oS{^S(+5 zSgO!yL2H~pBFklhHalnQ=D^$jWNC&)%F@dM+W~cLtI}pch(caGtr7eI` zD{TRMYo#rO8Y^ufG^EeV6wj>8=pyh{Pz|^Uda9zLEr#J%+G1F2rR74gm6i)#c`FR@!>_ z&Pv+=zglVL4Pf&=ccWI^2o4IV3vna(SZSNUWTkC_d@Jn}&<}gpm`@;BA=T$*=xU{H zhEywUiy7uxiCf^XmADl&^g~Hq54VE9LaNge=&H~|EOptSD}e%qa^RZFHr+OODX7Y& zRJR=#(Jw4K%htN=)9nCH+FCjNLRu-92PvrbcNd&cNDZ+YVn=aPRoe~y6;ic5kYc6n zfvHy7UYKR2?S(Z~+CJE4rR{?=W-D<&T(%PT!(%J$0O&^Z#;E;00D}}#n^p#83aL#y z2=9&Ima29Tj0&mRAqcY44#A)?W^SsA7AR9ic;D3rEbyF;c6Dwn5HaqZIyr|f@f_;Pq=C6+@&`a!F%X~!T~AvNGJ*lVSI2A$|v zn!1L52BiwAK0gPa@$a5^g zx|2W$hx&S_AX6c=-YL*bdZ(QRqe7~78lpLwMZh!AvtBg888E8^uiU=Uoq+_kk~=wMx{Om%1-uOFg~SorP2NWMg*@zNse%y9-dIkh1?7;SxNn7fo;( z{!%Chirt$_m%($28gRF}v)zASkf38kU&9hXm)+yw3KR;u?jBFHUeI0AzJU@!&q(_Q z4ya_-y>U;Ju0pvGwI0=Q6;2Cs^6;{|2A2c{co>Pk71Y)v(C%BP7SzMzrS4n!Q_xTk zANUR$PgR?p=3yjSBxr_5qErFP1evobUxM1Mmz>wNKyyr%5<@va24Yz~`Pc{IrMZfx zd*)@b55^AjRQlU1jA*YQd+#VB&-tq6;vGx0Opw2KSE9FqqP=?)O;NICt}elQ0MUuvEiCX8VRN*~a7mR%b-S#dcEmW2`6) zJ6lmW_FABZC(~Mo2%M>iIk3^M0$L#~%8Wf_f9hV$(b&ck^Usf{y5!rDr|rh;lo>yBQ6UNwt@1Z*Mbzs=%_LIv3x zeV_+M32JOK62);cQwUEIdt!nR!%6IkNrI*}_JLlQENFIPBheT^U8!DgoG7Rd)$5J2 zpdrRYDG@&sG}>4ViMUYEB+~le#|oKqb#qAUgR6y@Pfq*dMnP-IX_GHbC1qU< z#1}$y_4k2+_(o7OeJ3H@LG7sCU~DeP+=Ij+7%Xro zi9@iBAilhYVyqy(yoO?TLF1`jGWHep0o6;!p@Q;BOTkfs){&Ni>4J8X_C96`DmRn( zKF$$%j>KV@BdCJ3VYpP#J<^8bDnWmeHXJty(g*m!2;3&fFThB&S5OpbBk{1Hc+y7V zNkK^g^x0(;o)QiNtgqFQ^5H>6js?O<){M#18~@42&nr z7L-8RB+M6-LfRxO6vUsV$+%7sf0`y^iJ-|8Z;Bar3!Fm%r=UepUZA^vDjpZKI?$Ks zoJz_dPQ$PNMQ;?!fo(zK_0uqFnKImPD#!;iFQebQJ`u|Nc#|%2`VM}2p1>Dz zmZR-Dm2N3Ce3MGQD^x5_GqX!)Zlm1<@rzdx;7$sZ`ZY5HZZ8&yI>|HQ^dOBgE%K zMfjVb24NMj4&Ms$A=-c&cd2e7h&Ex(Zk4(dZN{(ns5Cmv2wSoFK9#1BR)RkYT12!R zOUsn~F9$Xd?nK=Y)pS2mDcT-W=>pMi>?Ej~XfJLT^onRddVR(%)df|C9TZY`|AS~! zdS3_~MtV0sh|LeFK6i~a!6D>jn<9^Ex>n}&Cmaf4RGX`C3VZ#`iSP9<^rtXgp&WSB zrUK4jjUc}4&Z65>ZkYprlXf1X1@UEf5leqjH9qf`vD0&v_zJmRS-4(Tcre||KJosI(-FPLG4?vsXf1nCWX|VU&BPvm|1Ce{H|e*XiRmQ z4_w0vC0-$P8SmYgwC6>M-|F1W|Izay$<^JDZq%>>Zwh)E?bxsqYX!ZEHo|q(G*m4i z#t7eI3qiV=MCk{N6x1xH8h*e|f;z-BYIpdM=tHoT8H3gzm~wu^)N$OL`cE}rOwN=nme zaHm4*QNISA3&@GGkW5g6-YP+GGN*e=0#Of?HTaY%Phu{#OyQ#MYF_a!F7L|eM;H2;Aob>_{1lpG1{j zJj5PK0?UPsRPiAeD5O?=h>1!9QycRTKRfuYF|~M3C0I(&S1sxft08zNYVoxo9 zD9^eY?-3?)N}^AFPsW(w5oRl*8t@UmEPvP1M>tnm)~faxi|L9g;TxIvP1x6Pwwy_Tj=KmGWy-W1+q_xqU{`t=MX-t<~1nxBqjW=Yr|`=kv*v`@O$&&fOyk`Q@Sc<)Onjr=r6_!zFSyglPlS3?`lCyIr~~!fosXjQ1oXh=#AZ20UBGi z)LC(BNT8PljUi^Q8gdK>NbD(r>aeMml;?#-ruF*1*k0F~#7^|c)*x7^3?n#y{GQix zHofPYoPTL;3iF*{fwra%flC`>7z=LONq)9v8`@ebDfJ)#3*R^c7u%|n>Y-)3ddp?) z>MfJ&MQ)i=56!~sE%U?cEr->M+%i?b^7i$HIqmBW)65M=*29Yi%d`&lmSgHg9x}Zi z?smwaW+Zfs!tSiFV-}{e7aezFI{Pfb8?)Gji2nF7bL@0ny4i+(+vzLmNgGxc*+%-k z4XcbyM>`f2)t*b4Q7IJVOw?EozR{C$2>UGBzGk=~`H?pr{u5jPgu><(q^Vn_Mjc2A>5tnA)}N4V8JoWI$`ZIiBevtw~@(TRN#zn9lM zBcT@io8o%7plx~^$Y~CGH;SomPt~+G^k=y}zrg9tuh%G?&zAK1gh#PT48l}XMB?5? zPFwYmQ)Z)bY?PPCt3>@M5jq*RnxuZNh+COQe>>c2YDZ7p$$AYKCH<*qdj}kByptR) zS>FK;%s6oNdosBV+K*&ox|U>(XlMFi@Mdfk>qFD@FRG81l$}j=v$e3dZS2?D#=@p? zv9-#cy0R>}6K1g5WDm?^|4nwKr%OrzE@VAYT!MndomVdEbEl%f!XZC%+|P+uZ zlcjz*ucf`-#NV9t^Z1+LcYn4kC*IN_fLd`E*|Nzl%x+SMWe~B-5X*W`a+UrLX5%Ma zLM>}+$Z>EDp+KLLtCf_elfWW-E2Rzo?3f`OBTc^=rlT|{g#DcBgyl>ZsYoe0No1J4#Mu%kyI#ox&-M6NSm9hbo|j zWC)`iT4O)v_e!`K;mFI?o@Yp`kkzc!L=Zg?JUnprSgYW2P- zXI_-I;luV+(j)m)uo0{cl{j{9evAN!s z*Lk3q?b*}0o!q=TK#p4PNaj|J{GA%js-}Te`bld@VzKkOODEd11@rXUJTf#arH9I3 z&yLUYk|@~2c^y>w9Vx$@c@}mKdPPasq9L@W*;?9I+8Z1r*&@m^5|v8mfg{6~jUH$@~bnM9P(?r+-r^?=c^<)il&res+@KRRp^} z-;H*)U*@M7t2$8?f+A^NdNk9or6684dH?+LPpzA+O0rSOVGaHNB@ZLn#=?+Jneu4z z`pSJ4;3^q@rCdVZCx#YLW>I}@EDeE_q1RIvdr5jaCar2)+iKL3VE|>*6uG%zgUb$X z!53A4i>2Xq1Grk!Y+Ams4@RYB>~%qy1dPUEDuH0W9AVjop#XDYoX8@ae;lQlefh8`N;!%G$~ z)4w3d4x<{Y41e%sTRGVxhLY`gQkhLuKwMFG)U(A!eOfjYL#jNJJSD>@axhG#hsrRU zy)C+;%%Y<)?3*Ry^v`&-4szgEJgJls9Q*&uNL%V9U8f1PbOLP|zb~yp1FKrr*>N3N z>U)qsjaZ&T!%no0`4$IBM`PJ%#SY9+?2GnneQ^pFvNy%8@DimRS;%rb7Xx{#=~Ylu@=m zi>l`3Yk1S$RJ!I`W4aS$Z73lfH?~6uQ~QmGSim}##nJ|xR~AZ##h$WIiT1JkWrL)P zaje6p5b04I8^5U^op{GL1z~&kY*Qp1LO$gq>CFAKJQ~-rugXJlC3{yMDqV?ZA)EV2 z58~OJ&4KsV$Hwjpl1}$xCHqpP>%G|PeGzoBhwRU#vE8yi8hf!v z`-8M}amvY-&*QweY|=hk7IwgfJH;JHm5wE{%?G&C-2=JOpNVX+DGF`a3R4ix!E^MC zVy{fYu|FGluoE?8>A^`jh2fz%x~U}`nn8#E`9rbP5X&#(q{`l`?-w6QcY3ogzX+s; zKL28{^rkoKUJ-~#Ot}@#64ig{kysks>qoq3kp4IlO#7qH(PaFb%|03|UG2jT9&M|6 z(}&uub}%4&c~npJaz56Fh9T=%D0X7&j)mbQcJ0^*Dn9slFz#j}kB3S(`m&YBgQS;z z*@fdF*o6H-N_*yWqBD+WStmx}Om_K1FctFdL^^ql{xVy-*pF3z87kfD$J8g2q`&&H z5hqjWHhtn`5KX%0C&Q>-txiqH^=$1aK4f2?qSK^5`|VVw^q@aWJsl{$>(7c#N23F~ zd^(uw_3rd2y2huS;RCYl%zWI=9M8tlMPkI+F4`Ld8am&f6+E(Kr_S0)e-2<(XK&Gj z+kI{g&6R}nZEbu8lHF9=I;Ff|zQ)2>(fL@LsQ0-cJhwNyb3UHR^1cv?bSANP60`6&HKaXNtQQ!)f+9TnfMv*8S2de#ff0)SU)T zR~aCk9>fMz()t_3=2Z@(y4RKeTQKz%t%Dp`&S^Edi)`p*Y4|J2BEjH=Jmxl-!uvvxGE#G(QMC(?cnshVmM20KU%3Ma0d< z&ED{ilrkGP2Sbw-IpJuqQxZ;wcsBgo3#z_^bcyr5Ik%~Q!$mPsqO0)nn_uEkmiL`2 z?qa3i)k=?tvT3&>;{P5>^|x2976U${y713hhOWbS4T6Gm3{QL3fYMS-E zCpwmpDvtMKJgFS--w$VpfB1!#=eC;gW}8P)C-8fzG8P)s&o%!=n(oi<2)wCe@KM19L?BRnjT9A$p3+R*MnunpZQ(So% zEL|MM{&_f6dOC`I{3wua`&%B3#l~{p4L_?_(P}`c6NNqc*6Y zq*5EkJ_&M98BJ#L=fk{#R0oIb{WM6DoHo$bV0scrRlffuh(6{uuZySibZA{BosMVg zf~3mP>{VT$^vh`0`e_KA!-JnbrM))h$5`BCn*C!(L&q|U6D;wZ(J z*Jf(6S1pLBX_PDXh~A$MeyjK8Ei-NU^(oTG6ukz=+%f`7W8UN zFI7e9Ys_!k8$3 zPS6Z;918)0=8%>Fv4R$nmH{b( zib>0a34%&V%Y-?CJ|`^;R`oP0MQkB43w8@}w_S7fI5;85WM@xQE$E1yi+Vgf6m-_E z717^<{;>0a31HDni7DCZh}tPc{Tr|T2nIAzjb#qx_X1vi0ch<9s3$=%edR<$A$Oty zj4~;mXn-P_F2Gc^2TX=TiX{adrk)I63%@}7&X5aLf;!oECHg^70%=p=MT6fc^%PL| z23~$447ATue+-=oISsS_h$voAx_xt^lm?nalr1R7eyVyJ%oUVp?*Y@GMIR-~BANOL zT510YSPrW>N#ZjJ!HI{kcHh`1T-Wd=q6Q86tmNOv5Oq&T4 z%(R)X(oCBL+sw3CaNSHZ!b6#iN>C#-k-wT&3e1O=GAUX<^f1#3V3?U!0Q1bW*-&bx z&4$xv+8n4h)8@cCMKj7HIv1MJ$LIRi&xMXMDV3QAiDue7m|~_C!U8j`5cZpC^WmJC zHXojwX$t`8i)>z=k$33=@R3m|a3Mqrk!uSf-Ar2q)6BF*u+dEW6b_ncpF)k9wisTR zX^X*WFfX3UGtzu60)H8m?k<9)dXcmxkZGnZfnqalDU_ROOW}%{whZo?Y0E%MU&Pe+ zZ!xr!i8t5i0m~uYOk7SMeMQ}jhVIzUcA?g zma8C=emCH|05~jBm%s#>l%XhvuVqqtrW78TX{+ItnYJ2M(hm;xD`pLp$)xzLfiq^> zTDW7T8P~#ZX5u>d%S>Dc9}ImTbUirAqy$|L)6BHbfbM|wr)Zyn>xb|CK8Ln4Dca{S z$V}T{gb8Ni1}HZZH^OT(Z6nyzuO{^^EQ7W(J;rSgYt?0tFH-?rbJ(Qb1P=w(IBZjw zLoWTm!u$7$!*2Cv(9+S$>1Wcmfw7y6O5L`@E}4|h-vI$5xT&J;fLNInZ71|F({@6t znYIhk&9q%G&rI75>&>*?u-|AV?tvp_;vTqVrtO74WK!C@7rLdrui8G?Ad^zH{qT>O zwjXRqa!W-!04_2qO*#PGMjGFXCfJ~eFx1flOmLU3cJ-|{L95a4Ee}G3OiGx8(8o+W z1cS}ALonM+`vNwbXQ?SNeIYzA}elolHubjzBQ|N>i^L zfl`?i?I?UO_Pur#5@b@eW3Y~h%2!%(4D=b?R1uHE0+|%;IJjoM*G|ALnYdP=J^?Sx zw3CpQ^}fK9@LDD%<|(ip_g*^%-kgl0z|+vNLDa)($W{nmJAI`-4fzVmH-j^v9WRGb zH+A-aGtgQgs?00(8Ccdpf2+^J-Ue!~vCHj!Zwc|uL!6KJaAzXCnq4^FX8)&fRd&rfk0IrZ_4SXllD!65INz>Fq{uCw5 zZ!Q@`gQjv?1@BxYYVJVH#|l}yPSMi%$N6Wz6t6f8nyEk(;=RcHX38-g2^4zJ)3D` zaGy+yWfwfGkb0`82Xw(xf@XQ@h$;mYlGYWk3tCQESG+CgGt#=@eImYht9Oyu4Sy2i zQ4+i3Z-OdG>yCd5`i`_Xv{=ZiR;YeLS{ybJ^xCsC#G{>{cb;8|+yzr9x{+TmOcB(Z{CeRiL4$RPQX-BM zl%}hNM4T*W9BI8VPbOobdOC@{ajp;-P|!ZOSkNj8+6Pw(DkrTkt`~HWw7$4S&^ev6 zwjb^hbXC`qs6xo)lE43naRvkdaQHaP0uRCdAjeNTOQ`$@5|$-V>Ummj?{Q zr-D4abVR?_`+0VTLHJe>@BBg7Xpu5Z{^Xa0)`B9)F9}-+GA58X7+nPpA#pIa5yYq0 z5DXB+r`He+7c`dqk}+D)$K;oc@q!kRmV$i+ttKr6lLhS{Z78M*sxXo`6te`LBk@C= zB&dqC5AhR0_emRuvjx2&Z5VzkNbBtZsmKJi^41Zp6BJI`a4Z+pm9*iwTTnl5`s^|S z4+$Jj;t2dw&;)W!!wZ6Dla_{81(lLE5^oCHNZLreD`cE(ReFWN(n2Cc0wIMMRM+j=?+ZnPjLr}DDSE3w2@uZEzX@XKn z8;1pg_-Y!D3kC7jG#-}=8c*d-Fyb14)2YA-xJl4_UuW${xKq#y-|G|n2r9+73xeh7qZjm)1)?1od|07cqFuN`&}*VS*yIS;lnJ#D{becuKA-lZqulyph#cdJE#y?jn}{tZ01PD>3+mLVSi);sil%;fYcu))@r`hjVepTg9|P zcomVwUkb$&eT~BeskK#b1>eY|wEQYM{;gQ@mS4k2QJE>}cUxViTMa0%6pU&^AQHFR&JtlD;{G9LaH~cBge;> zFO%Z<7$fBkOmTdS+v(@B`W8OHg9^bST3=7_Zxh!Pzb9BHuWrTf35Fhe?^lPBocd9L zKaSKx9p=cQ;#h|d<&8jbtiuWNv{tmIxImuPiuM#=2;#l=BetxFtyZ&8R8`ziX-+Sz z_@P82#Wl;U`@ZLlk#Bn!PWFrYY;N;=6)$Qu&)Q&kNlhcGAbYcn%pwx;E7FKGsX{NK{9`auxPnYzsmK?0>|M8ph zOU5_0+O#SR`&BemS#6UvD#~j_FIB}!wbdiU@QTe=Ru}2L3W^sI{V(b;U-l aHe-$y6IK%PkLp56%s;A%l2hN|^#23?NMkVo diff --git a/Src/Configuration.DkimSigner/bin/Release/Configuration.DkimSigner.pdb b/Src/Configuration.DkimSigner/bin/Release/Configuration.DkimSigner.pdb index 9a5785182f9e0e628a58d864e8ca66fed252b26c..5c492fc00794f8038c351ac72fac6a98c7e04f0f 100644 GIT binary patch delta 21691 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 delta 21633 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 HCkWGD=X1DT delta 1141 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 diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2010 SP2/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2010 SP2/ExchangeDkimSigner.dll index 45b193d9bebded63da124c753f3dd63936b06d49..3d626b6b2c7a1016a2ac710babbe71959bc56c76 100755 GIT binary patch delta 103 zcmZoz!`QHfaY6@+><@v6jXe#DjO?3vl`bm@EcgC+EYO+BVVPoK^>djyIh#MY9AjlP zpS<165Uh6c8!rt;=FOtsmCT&%3=9m+K+L{*y5B)YM)S>)0nI>a^4&mVAV)ChJu?81 Cj3TN4 delta 103 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 diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2010 SP3/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2010 SP3/ExchangeDkimSigner.dll index 8335a23f0d925a4eb9f20491673c18edceb1aa1c..f559daaa56263702c5083e00c038da16a08de0e4 100755 GIT binary patch delta 103 zcmZoz!`QHfaY6@+><@v6jXe#DjO?3vl`bm@#L8{Yz1rd7vxxWgDQ3sRMVmjk9AjlP zpS<165Uh6c8!rt;=FOtsmCT&%3=9m+K+L{*y5B)YM)S>)0nI>a^4&mVAV)ChJu?8B Cbt2jT delta 103 zcmZoz!`QHfaY6^n?*-4pH}*6rGO}&vRl2Msa3k--3hTR9eRuv+`e(~k!n65<%Q03) zv&q}N48dwAzwy#wWZW$3UCGSJ#=yY948&}kr~4gbWHj3x8PE)*Cf^M-266<0-ZKLL Dz)L31 diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2010 SP3/ExchangeDkimSigner.pdb b/Src/Exchange.DkimSigner/bin/Exchange 2010 SP3/ExchangeDkimSigner.pdb index aa7bd6253cddb05ccecc740bdf5b2fd5c83c1253..90092b2559f6118f55df64fcc40227627f197e7c 100644 GIT binary patch delta 2016 zcmbVNZ%kEX7=NF`1ulAVfcGG9FNJVX1d*!(VJiYeWq|_z!HWVHxxm#lfv{<6Y3XXI zfSgCkkwU3!d`i4;n@(NX{NM*&vszygw@kO(w5>n7aIYk76 z78rxUFiG=nl3}$=d&E8Jt+H4~s^^omPO6IFx`El%L5LH%>){;+sHkut0$2g81Xckx zz-qt))B=%!9ngVzU>e{8()r;)7NzmrK|lZQO5u|OF^S7yF9#}tDxexz4y5)LS00bk z>~YXPK@V0GFMzIkV*5ZrwiT1{O+B&j>C!slBDY0a;!Cv?Wp*2v#l%RDYlu+ic!t$T z@koywvsBHndx-e+qAa;LcPAO~Ao7RENT`!_1t-Z!!u;7G3OGHQ^b~?f@o+`Ho9kK= zH&q`BEGtni3oARRiO*DiMsB&as>Q-1 zoNIu?*v6XMF_CqiC zD7(by3#DmQX<)fq>qGg*RHBHc=$sTsxJW zEoI#N`cb2)51#KeT}D2yPgV2!bpFm)gKW<?X6r@x@-{ew`fL9!I>%?$U&e?qWcgu3mnOHg*AO23N=IH`bDwgTN80A87j~s% z3E?)ib8eU{-F|@r+wO()aF#vrMx2)9Mg<|HG8aL~%!%A)`Pj$73Fc_dl;s69sDHLUx)tc899uvg1IG?hyCQ3M)2$$zLrW zG#@*+yF{NVT;>Bc!b7PSO?IgJ(*U-*SLbuKOu10uBc8AIrP<;{YG@Oxjd;44 z$e3isPc-VtZ{gu-=;|bg4=mxTfr5JFphTT+_{d@nuokET{?F;AUcgL1ef225IpBy& lfR+fP@iEt0D&z;QG@N(#TxIs=})$=;wk_D delta 1534 zcmaJ>Z){Ul6u;-Kt#7O|ZRy*_+PPN7tRDt*GDPEWrFCn@fFfie1X%^Ny6pon9LbP% zI*eqxY2O+CT`wq4~ma{qokp6EjXi+Ur?v$^A zDm!x?W$Cnu&~!SBd*xq29h14dC~VRELoncwk_90vhRSWiRc#?2syG99X@qiuPC)mv ztMRama*c<3&Rm26pKNzsE(fc`n60)g&zb)N0Jn#31GlDbg4$u?rmzDrukv@b!;01y zzUM!!Duv{hdXp9$Bb;K}ruod85@B=e_LG3){u*^hDV*bv?O1B!bv0jsy1N(aY98kO zyQfX@K%bu3vwu!Q8Nrn4jWN-sF{a?9SOc*<)hSZ?^;zHA2GaF5e6_2IQhw~ZLOiDrpC=uA zlSbgbz1<^ef%h`I)vbzL{_(pN5K$>Gt@ zdM9h4(@duevse5@*I@>d$7DHIT#!c?>n&y#77r?e>yyizG-v&PN4V{rJ2?r|JFUZoVU)#7^5dc)ud=@~20 zHMBx;vztbTEe5((?+{h;S-+gA>!*6r#8)hsm#M?cl_KUbXFx{f0=(tQw2cg}QI@dn zM$0~f^rA8L^l*jZVnK?EH8=9N#>gv2)+$a`V!TjEP_rIX+ z=zXL(d$QfZ*i{OLj2hZ9hWk%NN_)w8o@9U~Ehed^O}tEgoSv_de?z(3N|If6x)Punu2z=3^u%qbFF7 qhn*fgQnCjl6DFmaa-JjcldL5PkObrY&9IR}Dh=G0x{*=wu;+iEvwEEX diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2010/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2010/ExchangeDkimSigner.dll index 3d53a5686e8f324d9ae38036e68b189de2cc5b13..214689aca0c7d8ce576a00108f2f8f9c2abf863a 100755 GIT binary patch delta 103 zcmZoz!`QHfaY6@+><@v6jXe#DjO?3vl`bm@>@lCGKgY4yccZ_s>gDTVFE)R0ImXIp zK6$&BAz1C?H(nZy%$r5ME15aj85kItftY>sbiad)jOLpo1Db)<3#AubaJNTZw^IYQRoES3>T+C#Dz*zJ=!(_8?adt^j9qLanc zloigYDT|~fV`SJI(h+%wdaJG0(V85RwwcwDTtBd=W(wj)?gm6#05vNDhy>OG>wxt@ zEwBOb0d>F(zyTxxIxrjX0Q2~dfpkjc>@$9T;7R5S1F?x~;I9CxfNG!ycpgaUEv`Bj zr#a%FzmFblC|&?v^~8>Wf(#ps$D8`k!k5bGiHowV(yEtf=gS>-E{~0sKF=Vb&N;8m zNcKrz7OWJ_aQKM$D zr#xHKOhyUpH|?T*@_JJS z(F`8j6wmIh<-BF@DPwaVBH!A41^Jpj+@P5 z!I{n8MdKYnzeWDJwUxBBuW+mX1tj>|e~X5AsPziQ&h2Paj&JYQV2#od~{|?g;LS*Af??f+=c!CPiib8n(IXM7C@= zah`&&+iWpv!Ojul$dlsB8BcM-!PR<#Xb*)po@6>|B}khzEQ^h7bC{E$gNskWaV$#VSAa(%WaQ2Q6MCzPdQI!g|_4rl5vaW7P4 zU5M_Vrnl+3IHfilyg6-8FX?>P}G~Dtj!H_p@+k z*SeSJNumsHCE>;=!n1Ral<4uo6MC;^gecWHUE0lqM^ZXz6+GrKqn<)MW!g$3QEK{^ zDg#2IZCWw)QlXBWWg*Yw+(Gzz{)J0I58)!Di8ih{`Y>DrQ&fi|_zY^dC<(o~sVnYV za9@~~$#G|oiv*ukqa5l`i@ z&Y~FhWy}rPTR3fz%ha3FY`i}`?Qi|SVV&RX%i*T9d8Ti;&%wVeoXu4Wm%^?#eapN$ zU+YV?$B7j46jwXtQZbP+(}t5Ss{i+hh*WfSfg=W1a`iw#g9=chuArGiQ02>d2y)FqnhzdWj%5(Qh-^qC~$e4h;+w7hT*m7)@NP=eDnNp5&Z+&-wlC zIp^J;-hsQ)z*XtACvz`jYzD}X1bBh@3cwdUOS%o{maG}oNr3D>si0Xi+qqr21)5^d zC}i=tOlUlw#tW1c&}J2`JP@P^8Hhy-N(08KpIZv%8a z@?#{Rpi<}N?)hsl=25boH_E{xF=j2SQSCY30Pw7azkyp~YoPVXTn=Ods#QO0eHOGl z{T2UiQwc69a-Wn&|cQR*-HV#Y2N#MEQ1b6-IFGQ@dx-wJ`wAkLMNYi~W(8lRPhi{tj)(Ly`eVY^s zq*F-FPcQq8Mqvq}=M^PW49CNah1au6vl|`bJ5`k(Hs&HotH38#&N2*6xbXYhO#E=% zt2)?HT9VU5zonok%lAx-c?4~hyca1F7_h&hCp+?PR)nd9xUNy3Kl9Y|;oG4RW zY|SXrY`}+-aHpEXMwR5rQOY3d%&#Wu7i*In)Q6bcltdXN5a^ew?t+tB)jZZ_lpQwm zzLM%}ak5f%GCzfdq#Dmnoqqh{Hr39GjqeH)MQlCE(k`61Sh$XS5=X>qqrZV{a*(qb zE6|oMn7c@~-1AP6clw@}PlQI{Ve`koZ;la`6mjkTz{9!7Wpt5Nvxm5`_EzD}LVmglkyHbG`5un2% zI=sO+d`5uzxHi395~jl2Nyn(m^`y0Qb2rG3(E2?2cSQFL_jvMfW+oT6cvO6ErUr** zT5w-!K_V8^75r4M!l0gmrTRt;JtpFv*cA;>Y!Cjb+i@{kWU;YqdWVvtdqKQK^mwGt z{%JB5Pz^Vl7V0GzVB^A*Sz>IONOzKoJ2&HrEGO*1c6$y6{R+DM<#^KW#y5)(WAHQC gQA?bsNWG-nNPVRKh<7jS<`9bmx5n-yO(fv{7cd}_Z~y=R diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 CU1/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 CU1/ExchangeDkimSigner.dll index b15256e5b74f0715b1386125c9c9771f2374d481..3109d4491d2c1ec031c494449d7edcda5bf308cc 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+%nyNxjXe>HjO?4AD&AKTkaPL1+ZH0_wPF397ZHIMEH__q;b&ts zpZvtj0IYVhgtrDG^JYhHUuI5r1_lOZAZFh@-R~eHqxt5@fMy^y`EH;wkRurMo*4j& CB_b*S delta 103 zcmZoz!`QHfaY6^nuLaM;H}*s*GO}%cs(4>XK>U-8*e||L|E{<@OiSNQD%pI+g`bVl zZ1NK?1F+i365bk&jGG<3eVIAg7#J9sftYRcbiad)jAol71Db)<lFjU>^P1w@9SYl2d;A!;wV&eb$84u$KbmfCumbj{_-( z3(HT(%GOwn&!Go1in}o8p2*tgT5QH7ys1eGzf)W-$n7*~CZ$+DQ)0DH$&4AA&oLlS z=X9D`P4;O%CuS+KYV`?0@3|LgFXglgRRNJVAXHnmR_!_~)I`i59uR{`K3VhSgGlyK zS)P-sH`=s*cfC+k;7|kyhfUDUiushk{C#zP8kLo#X`aX47BlSMIfX@*q^9JitLHO6 z7qo4aQ*%2!l~`_G@EGDmoM7LUgd{=vC1FYX0l-KakQdj9EA*N;Y=D|_d183t=K4z z)6~i>&^vWKR_VvM)W=%WHRn0bd7y7sHKKv?^}oqf{Oqt=dyJEusBI8ODNyT&_SbC} zN42l(77HK_yBbiU;yXoR8c51Tq=ZAWW`z`8GO z%N^X>!|qz|Q(3%im$t1C_?fkRNrYCsYgi1neGy5bJB|Wr@q^FB%7;BMYMYr)sV?;V zu_ao~u`^=u1+#e?AKclJbnrpx%9J@2w{MjaC$$=$_4ws?dfbsYtXhJy-`u5o5pgQkb#qbJf;49`4 z!xGNzgT3oMTq5eMyvtGPA$zC2V&+u+`sGRq+39y7-XdMq|tM5XF9=UVI?f#+(m5a{2(=fy9JJ4 zaF+16Yi6lKiV1QP$QwA=n+=Zt-9o}$l}1ZagJB5g-U7!*h$Wm`iehgDDT6cC&q>EX zhVBM5ZLBr8`rF{_MqoG>HTC{+4}c48cX-?!jtlL7IJsbwK-VM%-IK(5!DWOk!p3u6 zeMeYQ8c}zl^UE-o7%|vbs-!3MC(Yj(CxP2QF5>qB9{{+}r2^oPOy0Bvs_(YZ^mIE7 z9a)Co2k1h2s$t91f6IH~X?b@xmG^k5Zs9!L*56~LpC5|H*h_(K4^2O!(7B$}h*&8_ zyWW!_M1&UI`+H<$DoUTF$i5Zi>2uZaM+ggl9N}R}>wyhGHNeN<|9%|tDi;8JBBJR= opFNtlDgj8Pla5O2I%PIKm~6AlVC5Ta74RP)O{Jnn6IlWA4_c?zmH+?% delta 2139 zcmaKte@v8R9KgTN%X`;*a3qJv3wji%A|VhEDnD8hc$Zv)a;B@sEG|MRam&DT!{A8l z$4rg8uQk?87i)-G%H6}JGB*3G{*W2{*i@peq?XGzvDs?Nb$y@reQ)5|@odlcd7kg* z`{ViXeeb&ONZn&nZ*KBN02pEoXfpUZ%HhV zUvB?8V4n{g!NVe>0XF2@)JrA>h z>+fLK2ZHx?eL*oA{UT4JKMjBMKTUDUx`oXVZNGaPm~?X&zSOggLVVjZ#VmMs-zfCqkn4bcTl<5;miN6|B2InrU=5>T{(Fxkgj}O6I3T0*h|HD4V2x1!hNi|M)631Ik6MQG4Bp z(%Y>?S&ojuA~h3k8%Z`9c!!R+s_F2vqI)(|1d(S*N7=y>h3W&~H0cy5fS}XS-T6*b zstaJVk@m0=*B9N{_=ytL0d7)@7TvfvidURmt=b{mIG2x1wCP^s=z}LKx0FE|sVk_9 z#$e`yV^9X`N%xpW?q&N)-y4T5q&#b97}lP0RJ>xW^-Z*rMW&&V;BNLdvHNBi9y{gm z&$g(5^JL*PED~U)F%yw1;3~1AI833NS{;Y2CAOY?MY}s@8}#|}>`!0~o2r&E(6q7J#NW>@#AbghY$=E2Cte>d0Wm`Nip{ z2pS&~RmpP0OeAcE8^j!jCYG6#;``lCEPCCsep$jVdjGNTp*bAO=SWyJhu;Qbg)xW7 z5NmNle@svuJKbSZ*d$EmsRMzpp-`MEdC^3U1rDO z@REf2kjf{*g^d0=EyI7AOp7S36HOyEQU=4dBahnXvw%A4>!^z#88dd;9IO_fv!|oa xt)SCgjQi|Pd?$N5`fN&C71=yay_))J>MrW;K=npe&)H~%@s!bNT?D+&{{W?YjD!FH diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 CU2/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 CU2/ExchangeDkimSigner.dll index a77dc1bbbe719afd45ceb3affaac21e3e841bf8b..414c7befd1cde1177f2102a0fdb4e5e7f58d1102 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+%nyNxjXe>HjO?4AD&AKT$eVVDtF!oyPY>_>2R&PruWY{J!q3KN zKKY540a)#132zNX=FN`YzRaBL3=9m+K+L{*y5B)YM)S>)0nI>a^4&mVAV)ChJu?8x C@FNQV delta 103 zcmZoz!`QHfaY6^n&jruJH}*s*GO}%cs(4>XAZYnU-v71go@@8lUYEaVXTSN13qKp9 z+2ki)24J<5CA>8l883#qi1Ad?em;l&;R6qyP02eTm|BTG09G>43;y+wY?v2>fS0TOvr~rIGCGb3ueY~Wi zFIlrEqkj%_utMB}zM2!;Bc3@{IO8YvNa43j1H@jpS(^1y?R1&l#$`!K((mdg==9}T z!&!dmcf-rp!gfCqU-r(H2MYI6SO-zmPhm$u20UjdoB{voeu_H%n)DZg$ntY}k(&ce z4%zDsQaBq4OOW7l5Z|uK<>IC9hja6|yev=po;yoPncum|rU`M)*?nVR-VNfGm2T;E z50bPkzk8ql=zGdKuW0qD7P~(owiR8~dW0M*a#6HUC%VXK3wLwJqULB(xkZ+Hw-RW+ zP*NH$9+E>#kmb#_XfDy@LA%C$pVq#}a zlX@JeX-Xb3+3=dNi!2(x`dl$}-y zrU9xI>weR?boYgD-3aw?tS&?m4%Kg`i2S;K4$%a@xju!R8_T$H-y6{lbxNYXK}pm% zr1G~7RVeXP;~e5%PlooPiCZ@}IsS@I4jU^zxnD5RUBF3`9ND;uwAC;1rqBye`7Csc zYItDN6}0;|Ls$N=xlNNhnyW}HbFif_y0uH?%ahv{s2B8c%QDEzlZ$p%_S9*LzGk&fR(o)|5bckN>k}U5)Wa+FRMCu>vLK+2=cO0d z69#R!d3vU}Yly5d=u6G<3Qf8$ZmaVHYeWTA+&!xA3b)PGogzyeb7d%? z*rYM(U|X^75CKE>gi-hG7=5j6fu12s5mq)fao-qS*uF$h5iVn0L8PdzZ*1xP?b+%C z!%~lzq;SU`bAtMXEaDk^QW90B`dK`4&pQmSP@=T9uca|*wkpJT*|;?Ih%G+x?S zz!hDUTt91OJl5M~=bxWUL%)(^oj#s=Lg#Z`Ii_ThEx+oTOJtIXCx1^!$bs}3PKYdH zU&K?Z?h9q=9-9be9k3n<0RQJ6Q>%OeQ12>{Z$>f`9q6S4Io$24=8hh#akn|9mm{jS R>`LHY?za_GD``QD{sBeOxh?GxoT;Hh)F-YS6*t%)L+Ph?vG*SN%6Bb1!aVjPROkC6iVla|Gtmn3`I*j!t=iGbG z=iKkPzw&x-OTAOlfV*fbV{8n_(HGzq%6Wi~xm~&js7toOwOK&^&s{0bk8V&ffMZ?(M}KS z-7O~?#59ubPyk|B*x640K*nF~Y@`0>F5!7sn-r6=d|#_*`u4R_?3WjJk$BVo-=(NG zm08BY-yn+VgKaQ?ZHGExfPa7JUWj^cCVQR{;-QET4@I1KIkKIm-rpm=_(UR`92G zJS}55UXDN172$hB^_r7iD#+$E(&dPhmu9C_46o5j*^K#+ZksCV?3A~M*K01eRy-H_ zUN%*xn=^%0VOe~oR?cpiMYfrECW~9O6858-o!LSPqR!2%c%?D2Lc5#kmMmo?AZR>S zIy|yLTfmylvay_Q4qq6l(aM;Q!s5#MQ}VELc{M}uIWfOEZw|xlXLc^_ zr{Tk7gH&@NSslHtD>RN$`y7q0lhLs~?p}ar+%7zw)UbPOJ$_idI5VC%whcqemSp;& zWhyo%=Ap5?44bOfWqEZiwSiguQT(>bf#b==1@l=k|1P-#=%+bn{11zzf(q$qIolw) z05_d|z)pwF8p*bhiPxuKx4jHD;|@m&hJ7mPJ`eUebUa$Q7sGbdSw}e!k=2uJB=eH_ UqV-#$i9;$4+?KkYbHjO?4AD&AKTIA-HJyRzq_@B9k(rAf0|uWY{J!q3KN zKKY540a)#132zNX=FN`YzRaBL3=9m+K+L{*y5B)YM)S>)0nI>a^4&mVAV)ChJu?8r CZX)sk delta 103 zcmZoz!`QHfaY6^n&jruJH}*s*GO}%cs(4>XpzBi6TInUpPK#I#=WNb2{8l883#js=}g+Yynw+5*5T08!hxF z+Ne;tM<}rhR87l6o3uM7Vl_={AB+)gZJU%TO|;syP4%Icq-{#N{bu(X3lSfBl5ghB z`R1H6ckY?Fw`EXi8CBXdCRH)U1~?kX1~Jn#$c?`n416FvrX7ccX)@#XdEtG#DzJ=VlT>V_L`-IPZl4}l(pYG?uB(Ea8xge6g zRP1t+ug)&|^88#&!Gr=#NV9XgT{eqymwu+r%An$+4B=V!5ucLygOgho#%5cBS5Ies z#i@R!Q{*`Zxv(xDc|gy(erd*lq~)tx;=Ihs>bk;v#dTLY4`#=4evaaEc2oP}9h&P} z*j^tciu1N{-b-immuk7gVz?lU2lGCGMV!swYE&*7^i}Lr6oXL=6&*EFW9gybssics zT**#_8)=~AQ|=Tmc{Unp*qh7mQes5_?duhR*t-TR_8nzqQcwo-*_^2~y7oP|o+t|- zAX&?|$gU~U-7c?_qhfEkI~D1YD#D{TBHf*eYPk^4x)Fs6cc0TX96_*mHqMqQDyZVC6;I9d%_1D#$_~1~n}7>X8Ma^2iAue9dg0BrAD3V{K2ctI;z^J+M+$*$#cCAH6)}-PWYRrjt3F**-EtHv|8Jk^jr zdJOkAIU}1A4`r!|Y(&qnMrWJC{sA?P-IfOsQVV|>`OR?dbggy1n#7XjH6aD=lI+*h z`df2VJM-x&59>jPboR^Eg{p%U!YbwdlKUGYOU`a9P^Ymp{ek?LAyvEn$o*|8&Ak{$ zZk@2gG9w*Yj=MwNMvHX|XUoQL@)mk#0`36p?GtbgEMfV5u6ayQ>Q~E}&wxzUNdt4~noL;Bz5|yv0cXaJ7fiq{2e%5oQpUz? z!0BNuJ3`^x(Acc2GGPN71S#(dDIg;XTFDK8`$D&j=iWzghzYoLD66Rt=L}n;5Hy8& zhpIFf=tjFkcBAc%=mx`&cnkL=1N~c+ZH&~LYuQccTl8?Iar?Ex!dUeL+=t*~RY)1{ z_f!mHA4I5e9Ame@>8FN8i_0Ar-dxT0KlY$X%y?1vg(H0%IQ+(8?z{^m&)nIS#m7D=Es0vfgHT?eZc1cE=;xrcuS$uj0Ey`+G%oTA`Ki~ zjQ(*tlbNd9T;aZ?E1s5iE~1jIQmUGh9=7#$+34<*@z6^t)ajwghvVo}SE?bFrHE@? z^Eo#NOZOj9QK?9MlA?N^Cr^*NQr?(Ssu}?3CRbC1!frtE>tl*V`FAVX20Xw+sy8r+H delta 1975 zcmaKteN0~t?`hh$B(zNlUH14rgpgs13l1;KG=4$pr_3VEQ?Ln%D~nZt>t7M0Q8rqcRlGrE z(HfUU!eKqqa2URB$!88DqwJFT_ecRRyob)wr2A^Gw=PF!gy&}XkV^g7}bHN*3P`uZwSJI zj?LDd)(4!&6}N^WN^8K`*d)yBV65>Iyo8tbKdTRJ=V|nyKiG}*E?!o} zwWd0*c@8OJc1-dQZF?2-vR__5Aq1Vr)oVK@b7ywytperqr%senp3nNWLl<;TP`MYc_T;ny zF0|x@-cJ&e9LnQ6hy$ND98NRkFJOPn(NMQ2#`BK3mypgiq`+tcsduN8OkPm@3Gt!i z+6(#UnK6_>Oe_GKRL^lgz+Nipv? z9It3OK36;nA-z9eT1^(U6Dl-%dxqCgFQt%cq8e9=@%)ftB`!xE*eGQXn?Z#H!#NyN z!ZN@&uvJ<`_G(9-)RMZtRX=Qcpg>9|F0}FyDY;mqg=e-&R+6oKkPkihw*Nadw*O3) z|9;d7k(8A$HUI1=UOKmL)-041{)_EG?V%X#7}~pHurw^8Ji`1@Nox_V(4Y{-8j-Dz z!H(V~t`pgY|BWNWe-5EdgW9_(8k)&PT=HWu5pR533|5Y87f*mAI_D`gMD7uv)USHs z%KfJhnl+2|-ipTAEV8d+us(EVF<2$Gl_dsiG+@#!phFT?43`JfxL6uY!x#7&=kJ`L z{2tpjj_<6Xf=Gm6ThP;&pwmeiOM55d+^jX zI7<**K|O%-dDL(5Y6v`LUj=9Fsn8uthL+(ia4v7Hq9+VjK-KyjWnZ;k1Wzyl{P_^iZ( zb0<#zJ2gU!C7teor>!aAbBSPcIiSO8gEzDHgU=#LCFt`o&QhG)a5{0i0;PNCZbm1< NlqF8wQkQ_&_BYojkLCaX diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU10/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU10/ExchangeDkimSigner.dll index 18e01e61de4f118ebec1ac2de8bcc6e745118d2e..d7d2b24ecaa8eff42baad46d99c46cecb2466711 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+^bdiEjXe>HjO?4AD&AKT=vlGYEOV-_)7+@zZ2b3Q!#7`X;b&ts zpZvtj0IYVhgtrDG^JYhHUuI5r1_lOZAZFh@-R~eHqxt5@fMy^y`EH;wkRurMo*4jd CfFY{@ delta 103 zcmZoz!`QHfaY6^n&jruJH}*s*GO}%cs(4>XU?Go;T?x05^Hy(xoPwDvbT(gc;b&ts zoBYJf0IYVhgtrDG<7P*1UuI4=1_lOZAZFV<-R~eHquJ)jfMy^y`EH;wkRurMo*4kK Cog%IP diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU10/ExchangeDkimSigner.pdb b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU10/ExchangeDkimSigner.pdb index a2bdb15a20204726f992310216ef198beb198d47..bafa64c5cb1a145ba1b7a30ee033b019cae68f8e 100644 GIT binary patch delta 1617 zcmbW1Urbw77{Kp$ds_-A4%xl5{Bw*J#0{b2Pt%#m3M-SiGFrDm*$Pzt6wqYChLJ6s zqFMH^0mA*D61EjKrs2``kPMZWs1Hk)YBsY6GHc=%9!Q)oO5%*f`kn5Y8Do6#OMdq| z=lgfQbMLulBqok*iW4R29fBY%13gIE*>*z=q+fKp7z6QlFgZ=8&C18V5wdK6YLL?k zghWCjVm#YeV0oR7%a2gtskXd=9Xk9dVBoUCoS znkmYeG+v?}jI_9u#=Iw#BhKfIH2G&!|GDsWcL303mzb3078e?16ExZsCo-oAi9Azn7OGsQ`7nmTOc$2KYW z?(8nsHoE}P_l(ALev`Nw*(CVTa{Nh+=?gC^X2Hq-YLe4hjrC+i73PkXE4jjk zw!$IJ`)H8o_bOS!nzoZ}%IB4h$-E+UtW3!h3ivg_h0?imIhmG^!Lb^}A_TN0r?jF@ zt*P5%6-tiaCM%b}T3*z0tH$e;t%6P4P>>?{aP_g5EskgCi)o&`lrEG0k*KDKbHrB! zeQ{wA@xF+@l57l4TX0KhE-p{)CjAtCQfk#~j-+l1o3Vbn5}U$4?ATG1w9SWQ{OLI} zjeVGy_TrYQEL;j(b(umTyB974(6Q8+U-fz`Eqx93k(baLaklXriwnO=)5vp#I7$SF z|8tY_T|P_j_n(UQBe|&-8f6n!yliX1i8-ToyIS%+WaT$(Bk?ac?0#rtP?3N?0d?@C AFaQ7m delta 1157 zcmYjQT})I*6rP!TcXPE%++FX5)s=dwKvpHPAxdZyE$eP^Yu9>J;)Bt$QADdgD73bb z0^3TBX(@H@@uyKjA|?ntRCZ?*5jRcWe2_F~d{Bc4AwCdeB3k^3lCEd&UQ;JIbLPzV zo$s7GGdD5E5@YOCpkNyzWSHWF!{8;(o0R^|J?seuow+}#$pbk5_ioc^I#sSJkEyAs z^FJcFoQ!BL2e;ZPdCt41hH4k0Jvrr;}^ zP8td*bvoBa?$W-1;_*)fsf!V^SKX+oMYk#Cp6DCOUD;V`w#!^Lyc7!8JTlu|;M)2R zzh7NW)Acbq70DoudppMY#JWwqGjR9`#KEc>?iQjGPk(1#r zi*}%z(mfD9*uwsmVC3Lmcmm%Y+AF6v2pJjV=3ay^HSc3DByhDHz;yT?-Af4`wls+- z_Dz$BGUzZ`a>R-{^X~DtyG1?Y=qyWyvsR18x>4`Ku|4dWWVSZp4EtM~(ea7a3YrYR zGTYB0;avL-p%(A33dTEBnC#dtq-qj^)nm2((+9EJVIEz+IiQ}jAq?YtqrHu0nA zhEM<8#Zuv}{Nep#3OfJe*DC7}#(t}#f}{Q(lv3d=HTz}Idt|Ph9&^B*wur#O#KZZJknW|V%Bh3azey`3hb=xKar6Q|{3Z(x1I6&5 zwg4{nhct~$NO?*OuURn0-(!?qUZX80)Aoy;vo&U3|F3c8@>TT4R6Z!kJBJxnl=QU!!RohZ7GY3~`#YA`HL4xT5jN4`7gX^?KWT##7 zv@LqdZhL&NO7oKl?uzlQ<%Er{9$K%dq}2YPI5Na?(rT!f4-B~-<=wdP8CoAAOVMgk zY6{~d`mZsb5g7!w1Qx-SfDd}ph0r#<7Oqt+v*HEA_0X`Q%vv|BP#~6C0Om?RY+n9x z9O;kV!9-77{PNpI$}rH=CDv>2Q=_Asrl}8<>y6#?ena;vi#ao6x>Q zb3&WPPrra&Y7xXE3h0p_bgDX>EIkBqkD}Eg=To#0+IqAwS|l0TMmKYs%~9^o&g7@0 Gp}z&j-e$`H diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU11/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU11/ExchangeDkimSigner.dll index 6b89be85c30b992ed11b6bd419f052ae71ef3971..c7db3c47b8f71cf74ec753a2191c38b77c724a83 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+^bdiEjXe>HjO?4AD&AKTXyQ1}tfOt~G{O5zj>dz??VGQ-@UtX!1s4dnt$Ikml+R>`#-HpKC$_V3qKp9 z+2ki)24J<5CA>8l883#g65Ij?P;m1S zOn}YNmra5)CZO(zCfGy55R#!J`h&?uO;DJL2u98Hhl)|dVtu}zQ-wnJ!?$_9^PTs3 zZ{M}2V_51Kle#k}*D=NhIT}c1FOWm}HawCw{=K)sA@bxNMl{)>C!gd`}Q!LHHUtXaM1;1N6WuU^TD? zr~oPfFHi+c08BtUU03;3**OKw_q*!3KMe*&FtA!U-L9BT1xr5i&(5T>l1$mX^dyf>{?^8g5@VaY-nx7``!h~$ zD{QjMHq2$?@;m?0OV2dV92B%zs>QZXIT;<7_>g?Vk--CYGv}j}kiV0<7q$8w*ZBqL z+jMf7YYXQ?bhdDbzhFcjDYEi_>jMtw_!}EBBkLS~* z$`)>??PwiztI~&lsn>_TjMg3s;}Bt>8LetW`tr5EOH{n`oWJ%kV!U44$a5%I>qG0S z+sbp~8+8jfpFlU)O{bLR5^CE0hJSr8EMHsy3F6f?ifna_@$^k&1)?o%TEMB_nI!$F zp^i-(Ea{z1fu`NHarB^t}hn~(Avv#p<8OLM#)*Ovo{Oma%*ztvqcuzb9GZO;O$4N;x9K?LCUa$gh^`SJtnjE<(m`P4?+(a14Os`UXz}EPnZ*!Q=DeV zE;Y(|#UziC_h*}v*&Q{>YL#{?^ait;-4;g=(u4>ixT_(Q-|FwoGN-UqaYG0}0Kr}f zr>^fTFk4u)n)aX?_hgv9(wS>cV#QDk2^ZcP9=^S+$UL1{)p6CsM08`r-UD4}?aE~* zE*(W0!yTB~LYL7ZRl}M6K2BUhk4NG5Lf;*QOF|9H!(97)LGxJ?NO2(vkwSNu(&sFn zwSY@eULW9I8ON^++`K4$?Poxys-z|&;aA|Yqi_byc~KN@Ik=VZ6>@(}8;%nDcgR|1 zZ&$3)is>E(DJ}~kAe9bU!F>ttvZ{&X-ogHmqi}1nwWd9k%VRA%!Wb*ffE}} zNTlCFWP4YkBDe;23tYQ;EV1dtAEhFkHLy{T$?AI~r=Nts)+pQ*aN+5W^qcvhpE7=t zaLzc6&IcVs>4l$b96t}ZtSE)Hhhk#tgrHKo=zk7{UxKU%6Sb$&7p9$bXy6go3MUDY{4&+^^`TGEq8<-H!No0}2R z_4k_S=SLIJ_fW9MO;Zn==~QpJCXS`a*L$-#*T^x4{?O^tk@^Jb`j(Nq&sih>C4`7? zEvyw=3#2$>c>i3srMj5o?`da}!7e)=`0t&Ji_aN@aCSAW>m%2?#}* zADIJb@6^R9iI_lHbfbMFGSX!GOHEiN>XO04M2E)3nQWRFH7?e3-+PUGtlZ>&o!|Mo z_nz1G-sXBQaD$eFJpeFHaKPr2GPTo$oR{?64MNRaQhc!jaQrtS)cUjr$sqhne1ah^ z3&LR@X*f*3>du!6v=Z@62$B%z)CMa2WH^}%8XY?7C`e*kUy?&|6iyPalc$4JBgNVi z2{o?2=5-2G*kP8;le1*lBIr$53y6*b_`5A3#gO_nA(Gzl50P}CTg2DHOT06gP;tvI zz8)RbJ$g~PV$C7J`dU67RlN48b?Z{ z%kB?&ukDzu)nX;YPi?Ioq=bIjdJeDPaN9F{po%%+Dc?SX^rQA>vW>=fw31SK7{@ZY z(9w+RnuE=_mT)YkrWe?{PadzoxDTV$9r}aw+Cp+(odf9RWamCoOv9bcI5u~6kYefE zuKS7C_Lr~c9mMbUe2#t^JuFJ2Cxw3Rc?`X5?PV(O%elVNK)4%+=z+c#RQaZFfgNk| z$Y*ToeR)4B|NLq{7qA^u?&_$IX-g;GEM#Y%?yn*^t$FK#n1C%rd?R?9$7eM3Qg?3f zy=2boj6)Hh7MuSYmcl#<4hcd6D~@{s1~Q;fYo;k9J4F$mSL?!sGvmfNjPCNM)9=a? z=!YW}VhYU1C_1(HkWA%^#VVPjTf{WDrq-GT6hY|554&);Eebn|^1&!94RffDFwYXF0B(eLsgQ%`)RmHVE3)(`?DbXb29RyK zqn#T(XAzoJ7z0*y#R9rv4q1K_Cg7b{Mq$;+cA+h6OMSM(34Gxq1pyBSJ?fGLY=;X7 zb^pU9Y!=y^$gI$+!T4D!)Ij8=Su$4WN5euq32V#QIeeoW1+8E| zA^SZFyNq8!++r3vKY=p-2ZSvu)B>oXSu$mOO)NlD6!r-+R&cB>x7&)*K332&)&vX4 zJnCnOMdw!4SimN@j?kn^mNRWUe!o%J-N+)>z1%KirJZtq7Vy4R42xG9%Hf$^`6_n1 zk>y26)Fb=Et78o_rPHUo^qb)#iXDm&VxfpWe&*?%0o*@~eHd#x1A93>%~jlcaefx} zH|1KVyDe+!8H$8DPW-9SWMWt|)l5}!MnbEn9@OJk0kzn7VrRcdTH38Q zksA7>A(gu90yWzU=n;dNzLDKVU3wv<9CaSTUV*(5yA8YDTd{}KNhA~|Qc~!qGI*Wl F{{S(%iU0rr diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU12/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU12/ExchangeDkimSigner.dll index b4ddf67144d6ff03a1051cbf74a5197230f01c64..8c0eb7ef407d9e5588693131b4d2b23c9a186996 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+^bdiEjXe>HjO?4AD&AKTFgPjqT{*hgaf+3&%B{bFYd2qU;b&ts zpZvtj0IYVhgtrDG^JYhHUuI5r1_lOZAZFh@-R~eHqxt5@fMy^y`EH;wkRurMo*4jd CDIvuG delta 103 zcmZoz!`QHfaY6^nj|I=eH}*s*GO}%cs(4>XKbjg`bVl zZ1NK?1F+i365bk&jGG<3eVIAg7#J9sftYRcbiad)jAol71Db)<n3CCaKc^+Y_pI!x~0e>gSG>gKQIZX2@z)i!IuP03}V!K{IQKRLv!-}Fz5Ee+6m}j0M0Ca%#wS)eX!gi-E7M& zR+330jL9Tl+FLDLW24Fo|u$N)B=fn1OWoS=+GqHaxzCVZfcIr%lqd|UB3KVcagdwqTpZeL z7o(nT(n}D~hybUZ_-5;Tu3zziKEIrso63d%sk4;j_}WEQ6$gEL$A$6gPl*RsyM)Iz zMZ)^@od@p5H(hflq+9+~%Uz!kTk9^U-zs9d&Pj=yTvAQM_S)SXUD~hLT~V(}Prpet zd$tq8c(TE(*H4S-MnrqwCF!4R*lJX>jpnnoGIUf;9S&f~uK z$R&39dyPCDtfw}1v`1imwLOyEZnWaJ$JH{cxC&Luf=75}{Tnj%OzUO}@k4FfsDpQ5 z?c^J65$LOe5$FPIN2*SztOLuf_8v6g+whCZ-sdOvu4A&u@ve;&CPPOyeuRqQ9=Tt*N8@Wft*H0Jrb^;bcL5dgOIsrLwp6>g zf2nqFqxIcj#326Y?IU&VbKDo%iu}(aHz=FO`##2sG}QTS%b+TD_O}vFe}14gu{|ck z#mF;@<Gn z4nL|~%9zXAfz_I(^us2l8_19NVr3484;ArOp4t5Rfde&SkB8Cq>spTnd`PD-9q-*r2YSggfP_^bz?xc5Em-b#{=&V(f4gEo&KoB_-1J1(xdcyFvN8&w@=F|Kj7UXo1=? zz!lM0Mz69B?UyhOY1GSCqYkWhqYl`=!2r1}?a(jd{F%`6gny_{oiA(2d3OTb0=3wD zKll*fVkyhP5tRew`P@Bh=Q$M)o;bP`&xiS)iqf>LF7@=q@_5DY686Oc99~eCvW>=U z{Nv+!&;y(t_Vb*hxqL2GYRFbf#FbbTkwMHF`PF19#nxxo6ko~yxVuvhLn(4dXTq}q zbbt`}KSNrc@-ZO)`dNHE?wDnVmJdq#gtLvKCoSp0Z7*tuRSxgf;9rLKD(V!pI7xp3 Dl#jM@ delta 1244 zcmYjQZ){Ul6u;-~wLV7|+VS32sJJ)SmJaJS7nn!_u4`pQ3ai`V2ZFZ2X?5cRZVJh8 ze{^UByGh?cLd;xnF=JbXuDwf!OB4O1A0RpvgCNEQG)y#MF&IrC)^lGUaW^@Cf9L+r zIj^_3{Df?S@_Ds`3XIikiQU zWwSD&*(`q3Q_XAa9E=%-EBO(7%0CXHg;Lrba$u;&DMG^;;-T7efD4mU6LbQ)%NLUo z1(oeO*U$X`qh7`3xmE)XiLu%5zgE@aZvnU~bO*R2a~q6anahzvz@kkzja~;jn!n;# z>M9`J8kSSR8Nw;IXP#f(RwjJz*!wZyoPT@z*$P=|mNDGs<&k}FNs!=|+CGqzfrMGr zUI$VMV6dYTj^S*_XY>IM?SEcQH3}9P<<1cSf7JN`4C0Ee4oKi3(nEN?D^C8-SK{Pz z(h2muEc^je|NiQ8)Tim-Us5uVF(>OD5MyW^zehr8e?|MBp{kPQ4|^qv&> zsopP$DcUFcMEf*c=zE%Y9_<%3!{)qi>;dW4L40wbol3qNxDL%Yd*n;feXr9H{KlJu zQYw(heXV1LsO6{LsTEtFA8Z6NtKNMiFBQmuF(#uvEOX_=1sh)M@ulDQNxag25z-@y zQXn41gNzN8uv)v0+So3wh#j!rLyWAz7ZzJEI=&WvsxQC~$NZYcuIA-R!t@i0iUZ3k zO3!T4*04qEwcWKi=5PGZ@!pxOnwxDFPm0cK7RQoVu@ODv)!GB>w$-84LY=>f`*E$9 z{i5XVwb6aih05|VmiyGC)6 z>`N3ciLMNv@~*~Dylxyx7h%uzR{Yer-i%jHw_qYC>TzyMB^b3HdQ{B!+mvR zBg^m|c)3!=ne_U+RjiO-Nml{=d+(q5+h!}JMmpN&8YMU2lXF{KV)-!1E|T3OcIHjO?4AD&AKTuU!GIO#sFfcF!G5hA}eg_#D%{NB|Gy|#0cLR-q9KoRX%mB%{ BA6EbX delta 103 zcmZoz!`QHfaY6^nrv=Z$H}*s*GO}%cs(4>X;GIgf;c=&Hu2WRcMcfGZZMpf13qKp9 z+2ki)24J<5CA>8l883#64LB03#xGip>2 z`wAgO5ii;Ju_YVFL|jOWTQYx$+uWA8Da&-aY>D&7HkaMVy63bXUOMo{-sCww-}}7R z^PO}0wGJt*BT9#DQZ-|2fMbAEiCMZKuKiV`84_Iin;RWQ<49(RYlY?k_v=g(5?LUi zg)$JJYrE5hT_?C-ZxSZmPy9%!Ry*v@JcJkZ)Wq+*yquhNt z!Y-WlAuf!|A3UPHr~aBTAZhukme{XyGUj}uTx4Q6Cx!QCMRVRrG1)t)V{wx|=Z5mF zB$^^bv2!zr6%FRO{JFzoI3LE&54hw9^BT2^L914>SK&*=^}-Wc+U7pgzcOE%kgMcn zo=4|PE^@orUbv}bUjilR=JG)p92Vs(cuI z)myn!+^k-}c_iIlH=W|w7gGK19&iXS$%DPmhw z8Atn9wq*Bj?vm!B`=t!IZdbM}^!iD1`zA2fK7(D0oJr;bE6irrq*~VCSDx&KR}EBsD1p9l zPNGu>^2{bSEZrc**g(=^|6>-j4rZHU*^g2U83E+9@G*!yz%~tk6&9GW!EjuOaGe@(#^3*}<;V&Z(1S8M(x22imS)#lfq`+O04Ld@m*RdfBqQ}%is)HJr9F;H`L`lPew<-Xu(iNCzzh7Jk2BfjTtF_5fo}I$4HnE|fn++7 eQcfKw_38(kC7~Evd7rKT#`tI};+2AD1o*$Z1>ji# delta 2252 zcmaKte@v8R9KfIF<-O|#j^OZKI6aL6flej32oYKu2bYkboXJ{4iW{OB_=iDh!{8__ zoe6R8SBy1di#2}r1MVI+m9bg>WSg$&$0jOmCAC<#Y0Z{fuIu}}_nyMV@odlcd7kg* z`{VsS&lj%auF!Ew=(fe}AcTxj6gXTgRezDv&zMoTNx>>4#1;er%6~&jy`ncUlk_`P zBvVWp2?Ru>fdG8dmc#6NMwM}iNiiC7 z|E9DX!0^mh>}q}{^;cDhKIb@c)KyQhnN8_@&kQx6QkZaT_P>xR3OhxpsJAg!-CF|f zVVCRQ7riAXRIA2(Dr8V_HZ@a#Gfn654i4_yE&57%6cNPcK8`RPHlS=c)It?@ z?a(9CTXIKfKgD@(`xh9g*2DAEdSv*~^DM^M(7|m^tKa)ZH5G0ifW3zs(d4_svven% zIdXv)*zx)vwEgwXPQh1lB6wZL6>iLW-_GS_U+gTUxGa0;(I{WZBvl6RLQhWV;QO{L z|9fV^AQ2)2aIA>V`2+i5hWh&?DUNr@LxgmtkX*eL#bq{Znmy;ST zr-xq>1`(}Xh#FR?fR+k$Kx4}fE#pM&(GA}@%DND7EY+hc_e zatWbf9-Pmnk$oM34dQ#V2&@`A#keRF#U>r*Pt#ziqxg{$QS3xTE>^-vI6IGTlo>?- zW4|E#GXlGeJsq=vY4zi62|poh)SzBl`NCOwG$C~n*eA$%XYmp4w*j+#97N%a%p#LQ z_aACHZp)wU211MG7|!&u=oo=Lh%9v7;eIKL_^J7M!iSe|ELg;m=jVP!OZaU^mdy=u zgnx`D7&BP^LRdhKA`IyyvO5?7CB=^ILiU)Z31^=p3q3(NyRc|XC>}NOpN!{5-I-k& z^(mbFSXTA+cxvjnHp U>)1gn8J!GJmN0oMD7-G~f28S%SO5S3 diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/BouncyCastle.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/BouncyCastle.dll new file mode 100644 index 0000000000000000000000000000000000000000..17e4744bba01fc38813632881cc84ecc9142f374 GIT binary patch literal 2049024 zcmeEv37jNFm3MY#R%TsY(>c|X)!j4G)eQ7dR8`-iGs88Y93qM3t*PjBVk+VCV=$I z-|LYM_{-i=M7uV=l&JjIdYY(WTTei_XEKa(&uA8668YFuw6bl{M;sh#k}g@2h@aM$ zd34tW&)`U$v1gf;5@_q^zfK;s_Ozl03@yxcp)*FxrGjOp zqdxxh^Jf4*dzhr@>A961fbyVSS_MeiD?dd;wp04)QI^+0JKXXO1_od^Sm4h7^hnE_ zb;|hpMH9(dIqq1;fihGRXa=XW0qE(4Otcz>&wkglyxq3#Ng+;j9@3UB31x`Pcvfne zmB}M|VJ8K%zid|f_L$y;JDV(_#C{~@+|nny5FRCozi#4MR(`z8S_2xXDlYdLe6)3m^0QtvMf|@*`GP9691wSc zxTe@iXZCZbW%h3TppKQ}wsjKffZhn)=({98%v44^|E6p*`Vyi8Q>&8Emk}r(U9mhT zIt{;7x6r*1EI4ZyEWa?F@x5zzOnojar%;~qy3gvLupII_Kki!RqI?X;AWVndmAsR> z$rS8*h3RyvFx{PUP{2LjH32eY!fcp#D@Qtk8{@6;lf#AStU#KS+#0xr>AV}b%zKBA zs=))-x(Lq%`@@mOl$KFu!VHUC;i1UO-|t#>)g{?+0i^!>{xwX!dS<~`?MK&2Vz5A^#Ih(Ap1Nd7I$k2Ei*$7m1Cb-E z9Z?9&0a)n@(|5fKJT)R5|OKZA$=FLbd1cwP>p&sb}5b2(iBE)W+AaQ zOfPJ=OHfK)Hd*zOh0&qPloMS>loRk1y#{UT_ETZ%+8xoB<)C4O6V;HAcm2Q(1J{84 z(qmDeUCJ=yzhZ!nxF|WL71$xPPZzY1WnFLO_E`zaB4d~r6POq6Jmmf;#C`C~v8U`p z*|{8Jz#c(PXBR_hZL+5Wo2)8N8ZJN;r_1L#mqUL^2HV-iU}*(NY3aOZ80~MMD7Sn? ztXEoNZ}zL`R!ybcz6P{ldPLtb!{zUwl;$ z*^Dv`j*KQKXRjQVk+MZn*q>f?|-WQ`ah_7{`!|@nS6X+GwqplZ@-Q|UoNk2LQ3Dvt1w|mRJ zm>!Tt+qx0u!9I%1TLtw+a!bAqMQ{RQBvWG(P*>~F>f!XrH!4RUiL`3cVTh4NjpcnW zLTl4&TN%D+2slcsE}iJ0*Zv&}YWQ+$-;qr11!(f@TIAX-`k1pZ=hP!XA9O-s(~#3F zrEAgU(LBfTLU*S2Z^-D+ehoToH#$V;P0Q-*v%0CP4qC>m<1+4h6lFle7&=}|I$jo+ zp>+K40CeQX6V?U@6!d$*=C1BSbJ4i;Zaey9fPv6c8wN<>C4palsSV|Ig1w7RjF0 zbctv?0WK@GJRfVCw|Q|a}83wZ+cYk;B`t|R=nnDcf6 zc0XXzW73ex=qUU~|B*s_Qc<}XP8T;`^Ca40nIIDesnSMBLXasA1!)axv2$-;0dfx; zL+0$?|At&h*(G5bU2|1y5^ z-IbgvV)iQ%H;tJ6C1O(Nt~D53`P|$?;9$_*Mn*3BG$rP8a1au5Ir(-KIAiZ(Fy9mO zL;*P5$)TR;Fu?JR%NuMboUMYvrBg_7D|)KXPaXPQl(U?C zgG^-XSa&%Q`XW8jQ(Fy?!c}+GF-N&01>0#bVD~C-LTO@U(3WIpbj6bCFnfhZqx-dM zG^Om#E=+e8*_&NB#hLXmsh~4C1!nwk%ms8DS~3N&UmPDz!^wR-8kAiau)W#0vhPlm zXhx>P*>8Bz14%GW=aBQQ%f6z1F6T+|5%Wn<`W>`Irjo=IH;Q^V#gS*26My2DPpX|o z);tb?J>)lS*nOx6NTU#k1}0j!ygP=8XY9@%&+$Bdz~qgc$*0(LmJ&@MgSw)WYu7p& z^!18-N%9nu!3qk)HLD;=92q%3=_N(HZk17?$y4|Fv~?sGb!qt$M|jg3AEm2N*lZn* zYLkq!I-_SZN;!EU=z#hDh~)%xyE~GC957JnvFm&~qrQPyOZMt2)2ryvr=sF4)-t%3 z68E6?-)Yv7QD^^!OZOj}qWy;jmk+TaXv4~J&$a@=WbUp!uaS(j{vwmRI#L1OAl6(56!_zS&xzxFfG6139?+e!SqZtKX$Sj%ZUS=Oo6)puCE3}ei) z^$?ZPIGPk~BA;$r)@4Uq5h_gp7Ebmu4)4aqAGE^WVxpkwovp6s0r3ogAN?HI5C{p4q}rbmHGle9ATnk8C8CF?uB85L1={;$)Y} zal~)Ol~Vte6J?xR=<0xUvAml&dg3B7ECQV0iHZAu9tm#A<+Iz>pLNp#UJ^yx}j=;BzNLl5*(zH58I#CDM$fs+7g zMX0}oW~tVTzKUSB(w~f`SQckVtS<=hstl9SV~{X%_d;*-a=5l#l;tWG8zN|@^qqb_ zv9K)f)!vNC0&n(vV8!kLi!vg2wl!)EpG6hMzk>Dj=UB@qcR#i398lE>eMURUmm^H% zVnjx~p@$xN=tbo=P`pw&Y1g`3>(VHq+##}}8BrO$0yV))!y4D(wwtEkh4M|)xuSjRYc_1*l|DuuhXW`0Kq@^Jy<*p4 zmAE5)utS6zy1NZb^sZfKFlE8_N|?{mciMGA%hatlR#?`Qx#UAV=~_MTYtY^5L#F30 z1760f9Yt=_4YZ?k(E$-^PW$Q?dbOEW;(1JjUD8T?c`FgF^`b;99>&E|^SlBQ)76>% zz7_^`(GnQ_iDnsF_N(BDtwgkBQSC2iC0@Wpw$C)mj?M=p>(%}##z}_7-qP8yKHAZW z@T@A2EA~PP0(XWhhUt95t9_%H3A#M7U#`F{_R1 zSDa)p!qls!Jk#8@05*qi-cP}iT7w+oCoM-{{TNDt6Tz@J2;!pWQ(g^gj>>hU224E$ zmDDbep=$$wuChEflTmp}=0fS0wd>viIRV0vod^YpxIws15w3-6tA;j~m{Yq>hJKlS z^+=3Wc@E0Bz7yq1M0srs<%vLf^%5wrYoV;A`^Yu?SQN30VVagI{WF^;OBV}A9vHE9 zU7Q6A_b^2ygW>mv*FN~rLpt_ltXS3qU0?dVeI#|+ws??nK5%BgL2v5$keTu}+c8}# zGsR1>SgQ%tQwi(kU=OBdDDviP&@KTtQdML5gznnwK$)6BZO9R)4y+CRHOkd>l=N_P zDI#77KPfsEU8(Vs19vOB3@N*A?y_u^=;+0Wqv({6qPI|K>m2S_+?<46jI|lgZI14` zP}7L|ky_J^JThMIgIzxUPbEFSbR1C1UUixJsFx3+6MG+Yuqs9Svl)Fxyw=+Q?_Aq$ zV5Ga{A1c&|u0xfW+cYryOf+Bcoap*EfdNgBoYYme1vAzHi9v4~>*;lt%-MubSsNFD zFFgp3LWyQ-5!?J#w%M+;5aRN=2sh&c_dQKq&!4>pb(g56vkN&GcHmMvrE64hFyb|; zi!ZivlndBaBmnz;Qn;+kK_Obu#ZA4Ao^R@PB72fWSc&Zt$>+(hayN|aEcyjQC}#yU zJ@Zv_o@p*M{Z>GwU3sqpP7NC&&;L7YIjFDimLh4H~#mgZwxt5-xv-{%Qx=K z-&-DZM2OmapT8l2EhiaEO6vQ3ALSiJK0z8DiH{81OMPSpV4F+Z!Umf}ADK|~k@ruB zk1RZak4*Ho_R&WsJF^R$I*WuieA<%U)Z`)``6ZHjRqP|bSfbtCwFe;Jso8IGG$f5~ z6CYXDSz{l04cfnik4%=uKJr8ogX(br>>=MFs2rDEmx1Hn^0i=?xftCq;XwKiAU9y; zppzIEl~U#AKr<$WaRWw(D_#x*P+xCgK4?z(W9ixxQLU%`*bmr-cpP?HPnuSL2NoG? zjb4U2`qUzm_#W1IHAGWr?V_z?^syv!m~%TF1g2-DXduR8JeN}+^sz89ze|OWxy~qj z$t*1pg?~L07U}yYilIy>c_{~psM$>IdE}+kX)u}`Y3lpepxj5Q?_UetSl>U$qE+8x z+zBOQ3~f+}{0$?gn8@FfMdA`+|5cJ-4hS8XW<-)_UjTDR*Y+LjLhupxYcP8Q7j6vd zmB?pDH-M0gSTfnlTH|m0Jw~@(XLtIuZ$x@G7O!tb&Q$bfVjJh-V&NCmFqveL+W3?UqC;?=Bpv1i>zR z3?yRYBMZI0dPDFR;0-0z8|p0wlzpYC&pP>BrHSJRI@rQa2*$!I(J(CI9FKCs37d>t ziL(+zNLPD6XcnPZN(f^a%;!}G_SRP#DCu~YJjq$x`Zl|Bn<_b_GIt~4+S~+h- z;u41b2U-~O`(ZD*SEN}?z`yVAUQYQ%rN5B2Ga2I z7v~c7+s^29|DahXnpsz(E?Jf@;TTLuHI+Hk@t7qLqeb*oo({wfj|8#mfmusC1L>AC zVA#BHG+crMptoFt7#W7HaSXKMHar84fgQaXawW?mr(@{=23b0vsT6~Z>KGV1c0TK2 z!-(8n+bkiYn&j&XD}s!wlJ1}zs-#<0iE%fq6Coh{dlUM51^&O^wq&ma)pQ|fEyMV$ z;&}|7n0n=p`Udv6brgEgh~bODPONHHbtj%H$1A<$O)XXDtFFUQ4_!uv1m7+8X1utx73AjR!)aI`4GtNZhL3Nni_R5!@G-~)`hSuBeHr>dB-JkcBY4|Bu)W#` zT8aOJ#3fYhPg@wAhTF5Zk&sQUKM}PjTPqasim1=lmjU)_YchriGiXw6>lAJhLq#+i zcbR3KLKKdM+tw+dcw6ffiKW$=J2%o)3|M9GO7EsddqJ#0)>h66TonvXW7VQpdumKt zpxcEd5e*rj6(|Jv0Q$pg>5t|>77cQM3vR$pbi1#($-5Grk zqvCh`3iXbl-bd=Q!AMY_jR81V(xy@{M`_#ih-Ap8~A5^eSuWOtqykCZhMD=JFc5paFVe z&7HgE*cfl8aXA*UNJGZ2`o3rz6pcZp`?w9Xhnrw^K4<%=$WL;r**O$}kwulUR?lf+ zQNWsza=G}1w$}v5IBpl{lG)sr=Fx&7uk;BXB=|IcXoi=WAY#@? z5A#agn$aT*vKgaUUcV@d=qG9G$Jy2Ro4W$l+B%DSwRZ!*JlBg=(>ml+)`|D^C1AfKY3nmVn(x*qb`>e!T>2ba@A!3?^w7S7GKP zD%7{4LU=1GG`FHcZYwH1(~3$5w4%cMR#e#DiVDYDQE7B5Ds7V})m-a5VS0|Lp+=ea zuvPa7Xk29#RbLA&qi7rkesNVB8r5M7Evsl88Oh>M8yZz)3$0txI9O7}@isK7%@!KY zUkY&?K-m4;*h0h!qPg=hl5IJe>CFBF7HmO&XK%yoQGTyovayfTV~JL?qm49V0~0wB z5t%H?w#8r?5ei}?`R^zy{p9lX- zUn5ZF)=NMGI0gG$_!V6Ow(ojAx?KuYX!J>xj~%}VX)y9+`^%S&#$w?UJ!R{B90Lvrde zy^!0Tslmpf*hEZfo7iO3xK`ouzBp z8<|&DnEC!&VVVoJt<)#PspTu%!6y>T-PE>sn>zBH1O$Cu15OKx;(9RY)-mc?&qRA6 zGwAPDWv3z&EZGzFeYp(A;NT`tkEzMIG@g%Hl}!1m_$XSc?Ic=!^kr%x34=O5681x~ zSdNi>mmL7pEIvl|y=HvzF|vD^hkh+-KQTt$%2J0Fg1^lwQ3q$smI46 zg4$4(OkQ{1Q2a5pLu+lgvi`Pe_$)Ucu3%5V;wWpD{KdNK-gq9>s7)f7*e z!B0)E6**G^ratG()=5F%c{v`*LK9w$OjHV3nCE89$$;)6rOh`IHPhtX*r{*rdthud z_dWW69q)UPFP?G-Y?FNtVO5clE9}{ExRQ-yfE3SAw?UCL&|z-*JbShovFpT%D!}HH z!*oYqnEMoU_IWYLL4v$%6@8xY7*(gQ&vt-54OJ9Yy#1al~_mmES_K`y4GZ|si$h?BZ z6_DtMD0Kk`6rPK6QnT^~mf3s#Saa{S<0LACMc2JXtktKhzO!-K=A^Bf(;OSHWo7=R-Q~>!2^OSXC)5m%#}iq|wCfB<-isP+Hf z1W~r01li&r^zIW$y|L*}MR;NP+S)V%Zr0b`O8u+x}BNU`e-M?Yh+?eZmO z_n%^LoYLXwh3Gd#S_JzwVR^jgK-+d1$Ktg+_!gDC)|JM*y~auIt@eA#!E>$y$z8*z z7FH(*&z-@`1>5e}a>vtT=Zm)nd>uc7=i(5Yk5>qxD9YZTKQnt1LlAQ^e?Ku7V4Ik? zBeh9%oV`QLk2j0BZlZLQ$TiOvV60h~jDmy{@92fKKai2Ne2BRQ42)mH&<(zf?YMpk zuUvWyIq3VK><7zMJSN}+5rZukEKSl)O zF+dapk}>dGK_N8y9fF5y{NYVVp7SW}<8uwf?C%&rYuwW78Nv|a$(zQRBu9f!Wl(P& zQQN1EcJc3EsJ2r-9r+skK^U^)Hu!@umKEFve-MVb<~I0)@KYG(55lZ-_C^vSwL5jv zqX33#p+~(fiqj)LPsxaMwKm<856)x@}>JIR>;9)+;X`I4#AC2HuMFydUP1 zm2%(**qeR>0XX_m?bTd3_#ulqi2{sXyf2EkGVxk$0OxJ;^YPn3xFKQ;r_QTy3ljR~ zK#Sf9RF@8MNCDMlOm(oIVU7pcp!=ri^{g%zTp&e$Vzn?#PIH{ zR+mO~a#Fa!lTd2oe9g-Jz)I0}9JFVTR`HeYr1*+_(N87g1t0+c*lPli008VM0Z0G< zcDev00L{++apd?IG`pk6e!qyxrSt^Wy1@qQ41{EC(D@UYyq=3#$jpW=nfbKN%*116 zKFtak*M`nT&u)Y)%aBVu)u%b;tl6jF{uSuN zn#R)@ewv2QW*8HMED$hVxF`WMj7X&?0|i`hBp~_NX69LxB*lOZ`tFzD2_I>{@tkWL z&#Z;xna}p|%v!4}w019QU=&3!01Ya-tb~btdeK~aVgbT4dnT#fV6SLA9SBWTCp5j6 zOu}DBBKUC*d2lw-o#A)jN1q?fO7 ziVu$U)Q*N8tv#2@6#5N@tRoF078@lUEdc=7G66^cRj_%b7qUK9!GN@wnb}&wl>nBV z_>>bj5|SNgQb|sf>TwYa2y>W3#w;qGAeK%(N$C;*fXotr1OOn%1Rw#_&!^VUP_uq= za}k#aVkKm*6d?fsgu~Q95`c`*j=KY6@X`+KKw}IICD4=9Dy`ogBc7#Jfg#5ILTL@KWoywWrtL0ET*VM{`d6 zAPd0sC73Cl73t*V(~4^rbh1HOU)m?nFg+p4mlL}yYfW2U$Fq=d7%4V9Plsu$IWc7x zaQOv{we$!M3oq5$Afv6Kh*dXxbEPI_n9GE+Zl&yrC{{&MIwYSPj?Q3BTn5fBi=NaB z_bkr^%XE2jJd1FThPB5jxKvqudU69>o0UP4CExkWd5ZRJsbtLPX$P2%%N<{8=Om0BT*8AZqngL?C`{(nGhRj2 zx&*59d+LX6AX@D~2s~|m%pd4vf(4;0tA!91Ld>MvXC_sg*2e2?UX^Q+qo8!HnLfY0 zAI?8Y5LR95bCJ7qR5R^WB# zV7ZN@XnF$%NRbv+RL}9`y#_Jg6{IJC{mM$5?w;c4;njG!a7;#c6(+m4Fk}vXkKBpV zzve{(81PWdNmb2(QNiTo2wqSi12Glo@$IG5>HSbna*&%kmAR_R0~3l~>|>X7LP(Z! zB!wYOp}y+PczV)X%7!^#?G7@k4q0+$!GrsfUAWXAN#g|u2uqdMb(JV{RVkPpuZF&m zpdHa(EjtJ^N$dD<9_|mjam2%!=RV9I-E!p9bT_qxQCnH47V|FoWmf66@e${tuAz-x zUS52P5}fxmyS;Qe1L6uli6M-)gyo|DPZph&sr?oM(%jD^yWfRtV8nL~hsCj5qBD?V z_}U$PV+O5)`0nAtO*N;0Vf|#ps$s1kVY_w$Awz)7PJ+< zt?}F%cw$M&?Sv|;@fkhenq04XmChHh8PFsDn`Cc^w$)Xr`&8B~cPh$tf96H<{;A_^ zneoI{z%jj1b)My}BM}X~l+)I`OgE#*)>deC;jwmWF6uyh)*?hKD1Q&lOX;dm62hfE zs%6#dt-Hmlpz}1L^8_e^*>gGyN%J0%qx+iofXLfaxK9y1!9UzlCTn%nj&BAJO45AB z{=OM&@`pD$l`h6it@Gam@y_C=`$jGyY5IkxemQ5r z8vmI!O7W9+>qs>w_PKIw{FMF$ID{P434twaTc=>`U`**b(X_pO9pZM&d=u*|v+kFu z)@V9u_HNyh@kV~;^RAcutNQn)tNI|pJa0}raHzff9^5#JvbAW|hO%*0z`=2E zbi5lMDK1HVq`32rH~&a+U+H+S?8K#5Vy*~^=geZsBAvFctyVodyh-2gDP$^rUJcjN znYS-|1DBhC!S2cLdc||~T1WGO4|#B8+#k}z>=fLsZ6urq3H%CJkeX28JVbU5}S zv$x)nM~=;BDm|?njyK)PbFbuiB=yYy5%sk4Jo0*8`A5{#$`jYK0er*EOn(E`NX)mx zZ0}XsCMS|Rwq{z9;?Vhs8&-Y|Y!MmkD97;fa2qUqWaWItZ}*ijz4H0=-3er>hq z+$=gs^I;WC^ML^{znxo}`3T6^?fGtL%SV1mePk8#?Q7;!-nHl3XYw6qWXvA%b=9=& z;JrXI7ST7??wD>#AB7KK&Y2=ywMpCNMo2GqSw;T93apNY$HPZnOQ%c<$xYN$zgE6S*MF^i+J7G3 zEw`{Pgf>H+hH11a;|mwFm2?s_Be)$E)guPT|#kTLs+d0^3ITQVJu7iyzJNh7?Zs|VsvK{S0 zm=@ZRissH<3IHxHP#=3To74)zaXVQSQ)B2}Oed3HG{s2Sg&ECem!ve(cOmHGpI!PX zs=ikl_g`@MZjG8Xv1OX2**vFrL@^?d?1R2LV05842_}xbPUP@ zZGoV`)6F9#Q(0!#F0o{J0RZum<$X&oS(^9Xy0K5FzV*N?dQIxVDvvxb;uB|Yci_pj z`c~v(#o+z~F{9`5dHUR?Sa`9WArQAQx@3P)v_A+r7H7PSAh?w^JY}(9ym~(l{`PAftMK3;pr-j5RqGqpUHd7Jx8v{!WQ-g^zBo@ zb7ouS`L@5evF9?>Nhm!0Nr14fSutEXR3)&;Q89Av`UyLe%7*!*JYWUQPC!{Kn zTRGFqtOr?9i^V5nHu&dq73*t6Y)GwVJC zoSZxKjup@ezC0>+&duiBRV*S;msf!Z(Rxw4iSAl|ClVe(vEd!jrCYun{nOlihF z4agV@zb#?edmw-A9DhRjn|;qDPJ9cXFfcGUP-p}64XiBo47Nl12UZn_ibL(7fq{Wy zPqC-3E#JyPK!DZ`TLswA9yC&Z+EZ2!7Kb#&0w3B_nh7{SYz^_#I_;^&6!J-mCigUx zV;%J(G8KRJEN+|k8ec}EP4FwN;8z(e_FMy7v8(YlMuv{FElZ5A#@AbMDxb!;7}pcM zL%Ttb=K7)(v0Ec|NaQIR`4S?u_gw4KpaVq&cAs7UH$XQv{+)>R56SOG@LQM(Z-FO= z)pWwV@D_FD>Y6rruPvQq*FT5Uo9e&r!vU?&GIIy`R|J1yKk#n|zI{LNe-r!}g2Toq z_3@wj_!J*@-*Bb@!d<`dUkd(&K0b_x=q%f6^0+SSt&&kO0V z^rKA<_N@h}J!xb}fnctt?elwVABCHuCvG5I;)oR_SQ zB>hpGPU}oAAW>n(A(Mlk$|&BoOpjypoan_h?Mb+kLV!oK0nvbDCN+|65noxJOid+M zNkb~0woXQxd;HN@{#Cvutjj_85c#GOpwe7_2V}8yI64Vn8R&J&a2vQTG8|n5l;ZMq z#k6|vACb@7D-6Qr4_H3+`p3SHGQN%6{iuD@%ITHU1JlzYR>ntl#ikb;99cb_Sy`&G zYG?`*N({^l2n-Ux8pW~s?RE7_qO>kCdADhbQv-nm$wlG=g`7 z7?+#*l{ym?mgzdhJDW69=@xt3nTa`Yfr=PvOknWTwy0)antH`PAX%C`cs>wd>1vrg z!+yS&sQ}bGGc9_bm&`0(yTLSQpqui%2~YmneJUjOkOc{!!^sPkNxL)w$t>7)PA1dE z^mI%>YHaY}dF<6P0ZHE`tdmeGyf}!a%FNv;&aQJ-=-V{ywDn58Bc(9yG#OLBvzcew z1yr-+4jq=_@GU7$t|+ffzg3+#~=-}j?UjKIFBz=Y@=ZxX{wZ3!4xEm%+vg>ytwJ?J{D)w7K<{@~)L5Sl+BxyY= zvD%r73a9rDZX2>50;!7=3e(2>*@AktL&)4@49<`=4+kKykVwr`xmdX6@9nlzF~c-v z4jaF2YMxu2RebO0Z4#Tw*m$4OC|4+R;UluDNC^+(EZ*GPH4ApkOcv-ow&;XWs2LSU ztqOiTuYtQE7AqO=n7c);@J&gwJ3wYi0ebBQw1A8Kt0(WT1TX-aVC;ziJhTTnC+}G* zhqQ3=9y{sxZ69|E`1au)4XEsu?Sm61JzNzB(^*tXm6B2$P81)msLn=y%q~qrw2Yma zz+KqxMWv$%aW6ChyZ!+*2wM$D0$lzbhBC)hIOeRVU|2ESG2Wcg{^^Ql5_^Rv)fnZvrz6Y@3h0jh!a-23e!gI!)7f_DVs#U`~pp+zNUVm zM-@)sOfCmO-xR*Ji3L9}h7OD^wwx_?o(Y$ZKq|6*8_E6CtEWY|eWw}0XJW_Ge!Akh zE2oDuX?I}S8(-$E7{xvftcb@VZ{=d&n_6S{Eh14SrMc_DpwbwzPPPXYVYFGH1x!>; z+p{nYeO4MK(W(bjCrdHvASJM|E#e3o9g5Kglf=q$@(i?LlGl>&lBB>otr0DB7(p1BAKBaNV|H1w93+SNv zA@VGI8qT^%_4g>%UC?Wc#ckG^lI)vKMW03Iq|rN!deb^SB+@^52EfWC<}edic{}l(N2fnq5R0`$b!1`U>@v*KwD>pRI_OMA+~fZfTDx8v1Z&6^BX5 zD{n?kSM3cIyKxBE=aJSo+Rd+K9|OMY>P7v(0PQ~kFK4uL8zl}>FDWynQQ&4wA1Tl% zGC{EGTy8lI$|7dN31B%WBB)~*9b}B0aj-G6a(qOS3!|&e z*qB9YySz4=g2Zcg>)Q;BeejiaETi1pUK9Zi&00~@gQpd;=xB? zVWue$jP}jMEoX`Rn!1d!RC4?;s*TVfB^LBBklL_G448(jm1@_-jn>iSuWu|Z(HE*j z*O{~W^v>~8m@yNBju>2i8QVx5BN{c4)A2}B{ZE@~LrM!TC|w81wC?WTW4tL5M;w$0 zti(zq4`h=q8iL}_oP*JHF~*=>=ejc{0CpzkY_blEKSo+Oxf*qj`5Oy+DnuAqT&eBpz?i`k$VdKR zjT5E?v*2#y>AgXE<7FbtF$84>sf~Eo5b`asy{3Y_8&7Kiu@IV#6EItExwrckU8FHZc2gC$;dki@A=4^-jQGY*(?>;Y5O955w`_a06tVgyJ> z1WA8praMSVWF~{NF%uQMq({|-FEQW+>9ONYNeAdCng>qcZ#D+Qa8Fl|n84B+thfy` zuxJ8wBRg!|!8^(tRF~5+`xfk@fxkO>|s2slRIDU9yaH^Pd@j6^TewU5o)AEzc5FJnFa0n!k^ZIa# z;=!_GH-3boY_IXJpa*3&-p40amiVOc)}Z)efbxL>N~yJTiPh7Mk1_;AJ_V7+EfDzt z;(ut2sr``V{&N~1QwR&{+a!D34N9RYTeqIXu+lOVAl6qQmsm9|b=;*H_!ux{n6*a* zHRw2^M8^8gY23|NzeYDT?qtkuz!pLiyaw$pJ8?(jJ$yQ)6PmpC?CyAD9mJrhHipt8f91Fj%Q&- zZ{tHOtG6M%>{TAex!`XW|G+g;$3h1gc`||o3F)SUBopDJn^5`a*rvnh!F3ZBJ9!L` z_BeGi1xHK^(I-JPbQGEEj&6_H+>!qf@BSsE2hI5Ktbs1|jT2aNa;qT4uuQ~U+3wWI zZ8uD`SdT3Yo(6BX#V4TVTRJF@5!LRgTW8W9fe%zLI2|qq7Rb(p z$S&nGB@bk7vu~mGAIA4cUZi`1UjNL*Ej-l1v#f7}z&sbS?GB8C6=TAl`VZKRhdK4{ z;E9Eay10hmLsP`2dffr^_gn)N58NdBhw4LDMhtwlfj@u+kH*`8XxAy$Sgmh}c$*&C zI1kCg%W~8(gEIr$rU$oSDy85Q;29xpb76Zn**{_TXZ_@=ZCm0Mn}lB++LG~$Mf^K= z1`9c6Oxb>^%yA<#DZZtqy^P~0I~1;Q@wsq>OJD~WhO$jk#id(Znlf!W3h(WcdRXPk zl|I)SZ(~MVquaREr^wa)IAaPy^Em;GgzkE**I?>wGWr-!r7OBS1`Y?CytV>YfSbDV zo<@jgWtHugjs~&amE{PnmrxR+4Gg9FM%`5ZRK^x1A^Im(byIy)foYrHY+I@@b*5XG zO4_9nYIe1whPqpiHZ^kkGF+Gy$y$=7^E#L?INQ6ChOc5!ibY|zYPNS&?3CE#jVF2$AI-Q*6UTfa;P^T(m|<}!2c5dza0N>!T)uK!Km~5w`Y>@;*!Ya zdngG}4^CY{x_RA$u*g(~@=5c=EqfShEAwgd%;0XDRFDobPU-2O6TQsN#kuMEAcg;U z>oN>7_;I2qBRQ_mUZoY>!h=(W2D@KjFK>qxQv!5q*Wd({>efH>*oTIp|I@uw9Gbk! zzc4=hx7pXVuF-SwnQ_y|e?8QVv`r`bRu;|LB?zP5UwOmDg$P z6HZ{zm~2)oTq0sqON7I1MyS>v=; zHx26+2LjwG)Ht6w`ahPlJ)PSKs0`p`dCu941le$3kj0#x4YJY!wq656w}+MCqGnK^Kb=( z`?Oe`jr+1)r_m6u21slJVUYsuy4VnPS_e*a7Bo4(F5~ssZt)LO%ivLwn{hWE3hf+s zz)I-=Z4h4cR0Js{ef-#p!q z^K|oQ#DP-#rswm^f@Q^?F z_WO!`#$f6(&%ivFn`b`g35%(HK@hIOfRncCxRbMiqS6XRr_8s+5{w?M6>Qvxa-@0z8M<_LZr$ zI(_W@f>U!Gv>w;gR^K>%(Q_K!EbJR>3JtUSCPMnay!lCKY;vur1iw_Qi`HBU@PZVk{d<;fg+gGrqGQs;jHUe-N;V2Vq+#RsMw$RC_Fg1ngqABf${7<@K9 zjem;!%GEzr7g*^{;w}M7bhkLFDP7c*mS8Q3YfHX)jT7f@k{*0GrE24w&~Bb(A!){f z=IW_N|1YA~@f&2WofJ>qEq}Neh_N+%`;V|RQ)=Mts6Ctji+KY+q6wx|gF{kb<8T(> z+|j7;>E6+(@|kFi@PT#rQF$gBWAgMGcoUF|xWjmGy*6d-fcJeF`Z?6McN4Do{&_s< zXJhY2oPVqZ(D~2fqJQ#_hLmHxe@DH4AKt%$0-xSL`huk8(?MFif4a~CWa{0pH(m}e z_yPFUZv}7|D*#VRT2@yIXSMKu-Cq2dO_CFEsK*MtV)}&7BH*NCC4fr+qy-1*Whubb zrGUUt9U5&oPpAODg>^_Ib>W&;I7$3VH6AC zFfXLD)_o6V2MkhD(>M}82$LG=6NE`qV=dtY?c6$%(v=tBEo>}_IF(cXG)CayRivvT z*g3+>46b-o0pF9$C(ODC4wrLb1Wwf;U)XlN$t&$TX-ds4!><}-8F*ooBfh#plLXi; z0DLhMna?J1g33f-rZq~)gGrClvF>Y_^zr)G=IUBISzNZcaTL?qaF1ZTPjTNOxEnX) z#gC*i&hN)zTpb=nDEYD6QT|o#`u|^%yMqW;8LfqfDndx_KUsV@!K!lUpeaUg z_-4r(KU}8DmClqQWdYy$b${E!vd~B=Tm!c#`Ut8 zDPzvTSi<299mLq`7TqT!dc%7-W$0YL?oIybCMPWd5 zzxYh-{?woua!EBfJp{go=I8yKFD7T+ML>+s1OhVNait7`X<$ue5uip1k~0;C2}Bqj zt9r|s&!@#!ap&w8&+B^f?;rg z<_J;0fD#v?9&MGW$uI2R4pi3B4(xtq!5nOZb)Rqz=LrO6@P&qCkedl7&g_%G#HpQ( zjbk~oIk)%bIIe7uV{vMb?VHJG*L?`3HF!32`8qGBl-xCj92; zn#DXh8eg)I3aZTvOICoDd91HxN4~L+hYVv}Hbq4=$eL<`tklCt4y*g?@K!B49LCU* zp7tMJpK24ubi3%R`zTE7T(Z_QhRhg-2MC5F`nLz!N$e9;AhrG50r6Q2u4!kdLkkDl z{%taB;L&*yb*ybB#I?)elON*S<&ws^qjuodZtUFw!xQ%od6MGa;rx-1z3pMi9`4>S zi&LEkl=~)+mKw&`F$a6#UNruKZ7r0+^rj>87bFBs4^pz=Jc&E=i|J!O`a24QDDuCA z5QODzODv&Kjmq63xNeqrodqzn67)|`L4pHoYCu0R-`1Hc`*-+QCVCBRBwsXI! zSmAtP3e!xuVqY#9hWkQvKscZG`I#CVXJR=)VtxcNkIbAvmQCCjBp~CEXnw3F?-!Tl z-6pC#Kay_NaDU)(WVjRXvoZN4!@%EHKoM}j@#UJs0xa&E@-d*hd9n&j*Lu1OK*2b2 zC%@4|bLU%VCZ}s!hn4P1Rcao$79`@`y(UBW zy84%Ji2&HATmw>dbq;HTEHg-$YPb(WMlK87eNAri8id5;ZHk(l@4@@h%oKtUcOME| z(H-~~PB`G6NNh&dk?H8$k=%bj|_EmP|;H}N)+_6yum$<$O>lU~09avLsA5*9YQ}g>O zc+p5o$$2LK%zUwDy0~$=g`H^O=iHfj2r_$vvYcUKwWT;-W(wlrmsVR~O3CN}(-)Aj zAo(!DU^N7Zt+ah`BnQ$SBsP!y*uV->=r)*G$x6ug@PwoJOdA}S$<3xK=BK^|({Cod z;j`TPQ*Xda9{*a*W4N##@6Ju}DC+~V2A<^|XVwt(g$ zy$Lr5Jwhlxk%r&W(}0%tu&b2IC2F6G7YQo;Uh#p^gd5I}ECYP?s^*?sTF-%HtzX4; z4Gm$6SyWvj)LSp+PCy-VaI9VQ0gTxtsvbcCsyRw&NYyTg>#Fp6#ov!E%cW{>i9y9b zpnAKl!i3|7b0@NnlURqJODtUn8izVgRiY+Ni0is9E*Rgx#oB*>x(;96YHEvur?)|I z0buzOo7;I#xN;xrKMqyjnh58P=hK|gOITbAem46;xIOZu_rrHE&`dDFzWA|tAx-?NS0E+f2_6Sh-YaEMKC;x^lI7ep5 z|8>nJfAXcc#ej#JV6v%LG~ib>!IYFH7#BC2?F7nBanNAj)&#T9o8T8T!IT0S3$FDH z(DfYfpEv*3?+1KDPe32wB)gy}V*L`q#tX=+8#@p*&`TNYjd&C?#Mk}mjAPMOo=$Ws zhg)xhK%QCmxJMy>=BT_$gP+gRao{+E7Zq$QnM-tVGJ&@fCh(SVX%h-s%X92*BVvt8 zSO;ZxrK`6fE8eqD0Jc<$oHNX6#U3{Pi|8Yo( z463uS+2qMN(9PWsp2&S6#`X{JAIJTy|HA*{;qzU9|3Ab38CWNu#{UgKz6byB!~b;* zn8Urem(xvS_l#aLmWTK-#~=&w`A5Tbl7%E1%vngI7|O}L!`a48K)B96IC_-QSnSp= zsl7TLkqTegcrH-aP2rfMX$-RtY#*F9QSx$PaUq{uvXGxb)oQMS>3@(xkKR(bCCMR2ueYyHZ>1 z+qQEE0`Sl!n;Y0#HFDVh$5b?2*8&d49NeeJ>K?+CiPLTM4g9(48)S7jVANUN%0pk> zCBn{THAV)=5ZN8p_$sLvHy}v&Hf5X_3Cb~8g@+>J^16Wtk|-oEIt9aCX7Itz>{6EI zS+^4YBfjLqE7eC;j#U<=2+dZ%7&M7?GjS@W>T*+NRw!KeCG06EWblt+)gL2r*uhXG z{D=o3ne!*eTrvIUs&HwcD`pOTeT$?{JDVLGzG{c*UW(w3{nYB=gB>Dg)asqTjk~?5 zf>7Y=Q;UQn^yT`VKJmIlS%k9@f1dZc5yB7X&4lmRh1>@WY>BCbne>UCQ$Z}%wqRwzh;XE zVcRIuX$?0}I54>NTvDvlIr(HO6Dr^S-Z{K*>L&M2c{Hsm7(-Nj{@$t!yUQI&&SYtb z!C%0k6E`_9d7GIQvD?zVW`xrgj5>O3K*>sq4oG75CeP%Z0vvU?7id@?FeU(2zQ}N&D7Kr2`}Mhp zO)d}Ao(ushzbpQzT4SCW-3Go?#X}yi;sb{~@X0g2J=u5-o+?9$=3SIS^qJ+Q$Kl)W zZW?yi0ke3l0snOqd_BN=^U9kMlEZXzS7dS7?D=TGp1n*Lq`yZfEDpvAytuM=?jHo0 zU#-ZztFnBht!`z{+*=Tpu)TWw^xm?>?Y&~#WkBNPkR#kF1SHtV@5H0dw!%l3FdGcp zP{M3AtZfOi#axic@C%MG%)W+WF?fICmgaXGmreW#g8OxVo%%QNJI{Lu!&@}M#hP`0 z4&`qh5WGGAr-bKUtB*rH)3gu=iu8m64-FNJOxE=?hC2q?; zDCuW|HP}s1IW6s=qQ#J={A|VZd5|A-qcPs#Eo5;&d(!76NjFRvwp}!wG1uEJo46Me zGii$e+<>(vytm2-$Tow6>$<#kmFumgov7s^6%%LT(^{Wn4Whmw)EDBevBG9tw^!KS zgZmV>rEwD>-qsJt@5M`HK<0bW9|11^imQz?etuI6Q}-_6j8o+{PXb=q#HP{(81_Qf z@a?Z`g8vcVA->gVQr0(9nu^$@T-Z!`D~pQh8E=B$MsU1l@K;Un+W{`){mWHhDI(Jm zbWITLVjCYXEyVi;v!4e-<6X#L4{hP=lBBlr9>(<}D~~6FCkY=5!Y$ZEHL?Gs@HHrTxAX0bynJd3vLiYJ%K5e32Aah zHAcp_#awv>y}GhCgPB<2_4@$U@6@dY!MhFg9zdmtvBUAEx75JOLV>m6%tXh^LJ(;d zXFfb`GlabjWBr+k^Bb)!CE5e*@;1Em%)%UAg(;ze6odIQVexIRA<>h<;z!fQ0e!VpNVVA?FSi-<@Q62)QOI71fw|6FL~?CVWg9Q&`76->4@q5 zvbiqp$An%A$YjUJD#NakRfZErP8k*<8hIw(^+#j`_frzsUI$*X1_Za;5iT7Wy%EP?7gZV8MoI7dn-;W|Q%+y#{Ha^C<(M$iyaNNHiXQWQ_xPQaOe>Gutof%Cx z6DjTj4Qn?;FCLou|5N0v@F?pCV?II3aJB4J8m!``KHP&Otzi4wIXj5U^Z?=~W*QP0 zn7tBmvs=C=)G4cMV=Sw}AS0^`$Fj<>%IYTEs({GI)0CU-jKWn|NKsy5nVc-er%2kw zwONXYD`TMwa-qR8ap@L*MmY?K(Va zuN3K)%0;?|z=&C+{-rHOx&`ANlxn2AEe`4a4b~VT-A&+3xd!Q_kabG0K=xAf1(p71 zGeRen65U&RlSnk@TASZjRhe!RJtyP6<*LOK(AqMrrd~L)Ez6 z2sey)3x}^=7(xNeXh&})YMr#lDxcvy%LmZ)LoDidxFQ2cGSQHXD&FQMKqnl0J5XaE zMbS{-l47PGhN-7r>n@b@B$;ms!|h%8HF}zW*rsSDUc1AnYu3p3$C)&sVrgn@O~jL4 z6(T5@ONk(}ss)1fG)0gk;Nx9VuuQHq89$uBD3G2N3h@ zTB!L*RdbxTfjG|p2!6J)O=;?6?*5!Sb`dA5h|_B0xKpc5LdI%ai`~f5hd>&JS#gQ#*B@hk@R^P-e!Bj6yIVA8cHnQuCt$ec?jox~)O!Hk)sv;?{L zg||Rc(s5ymP^NFnft%!Kn2OJjP|lgm4Cz3H{kA5HAG zQWZ~2)c4mg1+aKrh0BMc4%bNmKzsm!W2^bjoYHPysEhG=XBa?ob(mJnAa5%s6?&PN zuB-etM&^*{FKU6bmzb~D}xT zK)|YXH_s2Gd?{-z=NCs)(My3loK1~?z{4%x>=(y626gUcoy9Tv5Fsz4nT}ot#0);K zxCY;c)oR#&T)?kJ zc*w@_Q;#XnkG}sQZKGKVGlH812uF8chPtEZwB3L*!-HtO`#32ZWxaJ)|HUOF|>+j58Skyzz4K@?dWh2lufP}?RMlt zp-HT=`IGl9q}F=wl>OiUKJ4huK*q7u0x#JbT4SZ?^Wv6!uCTDWpSM-Va9o|p&j51K zzCmqimj_-Pe{b}+$SDV2yvd)z7L~6(>k`C}?I!VM{62lMO)7hYn;FccG5Rj;+*jHHE z2wG-8v_^>UO-h5q@&5%x`Ukzh!wbd1>^k4FtJ%hWbY0cLmmmDWPzYx0}O(Gg9iy>)DT3FA?Q95WKv0k8u3JkV>Abu*O3bB zx}-^%bwN6~sQTYPKwZDZ17cNYluwCYfoYk5(l8iWEFwm*#5PT{KWyuG@B+#saPWcP zLfN?-XYAzj^v*7Z(wg7XQjSB7RoFu;#M7b(!a=`Dd|3mzqavdlAk@FZw^Z@T4@%X` znxp~l@#hX_VYx0m}r;X7QNzm%}}HT0Ix6AnHV^;iS?&SWDL1h(epvKR>aD zHpp|e)6lPC!XRA{-!G5j8+ui|!uT>sj3Vny+wilW7!G+NVSN@jf)c4T;P@WlC6eW( zDW=@CWf5L}%R2ski~`Bwk>-~gAA~tza3bxmfkTL{zjNmG^ilyO!iDh9Z9tM$e z@&1y(KjIo+n60EQSx6a=TRfQQ{pTR~39Jev9jYEf-fPbr*tFo(!7X?lFopBYIElOg zH_e%1%O)^3_BZEN+d9BHe21`Bc^CNu2uJtfjqN%L0h5&`dI!Se#+wuvADfh`t#c~_0BN1y@~5?lZ$pBVHtf^$JhQBM{kO9iR~qIW09Zn}Cg7I$pKYsQ z9s6>9hnc*6GulDk?sx|y2{x{>wIgxxbpg0K-eO;Y>Ic4lF!p;6 zJ@g26_;TU?+cZ<#Lx)UbXhVIy6Xol+nv|tn-#d&L0gOrO8t^wr@VJR}n%W-5okaL? zxjJLCDApNHYq{`H@sgiwDGD34(tuR?JxW%nIgIFqT z8av$?%EJ6Hj!EU5q0G4J3=LxmKodOZvy8P0eTHQs?khoginA(^{2gpUZ{Fn{iGHo~ zk_zt6!Sczn}97Tna<^w!K)A;#6Y;EmCAQpC#w+fqQK%0R_LYH(Y6pyh=@=8TEMBbQh?wbjEa z*YiPASQshdAQl?B3%?8GcR+rLlw;9mF;_CSt(L?L2?cj@1=@qN2*g+8mwJ{xW4*A2 zS4SowpmqQ?0-gFSdOLcnD}Pk&K<{%Ey(H9j1WNu0#hPrs6d{`To+3o`-c#%y-R;}s$;&DQ86cfAfnrUWhDKTGh7_ym&=$y4x>sz;fgCr4LZ#wD)+Az>-G-~zPHQyp$FX@xL6sx{)|DQqvLFmj79 z}^T z_+=pQizADQUpfT8bijTceigqgUj4wY1_Qq@HTY%fXMi>uy-J`8v|4(!75O6 z5;#iMyb+|GohcA$TveZkM4|5CNDXFYM&*nu#A%OkPvUYo*FNcnO*<< zSgDdn-vp;#MD@I#*ZXz62Ea7 zkABK{nrCRE`JTB8LzX#)4mICxQOIE?&CH%c>hi1 z$=^ltBq52*kpi!gBTqw1RWCD%Hj>xC+*QqScfme}wh5DaOX6ZtxbkcSMUiG9z^wjO za$w8Y={98^n=%i~DUG{!T;@qy??U;nMfue{aujf;7pER~d0SC`JuL?y6Dxm-Bfqsv zxd!GUF0&$squH9I@pEk?0x0YxAnf3D?6XQ3pOAh_7AMPK$Ss50QigT&^f~HV{l>KP zchdTF1gnY>g<6H+Do2ljjDvqvPD7Lf-a@Fm0c0y><0tKqOH4cT&nCnCt(d0~>o3O? zpB~E&sH~Z^jxhbow{>d=l69mu&0xg?ez0rsEcWG%8rUBNOQ6VE>|s9U1eM=c*vBY~ za=1fF!%aC`MJs?poyq*1!_1(2i^sVVKq5sz;a- z>$&;AT@Q;ugBC)+1ue&%_82bqtn29R)3zL-ZE-?=cNzH|F*Np!?Hvw}uD!yA>cHlq z2Dp~2OXU}Ac=OO1H`+tvx=7XKD7Fi*7^g}S3v^Kq$ro^!v1iwZ?>6*@J;l&$ul46@ z1!xszl+u-LVdXAqx~-Wq5_zjoTy;fH@E<^6aN;ryUXMN0ZF!);tfWCf;@LdhvoEfx zor-zgrcOZX(!eckDK|CWiOgf;-b#GDX=3=;;g6&&tG~YqCY9aEs>ej{L!2K8m>r)Q zooub!6(toO##VKlt16nG&6ZrzJ>}DNH?4{%qklg=b#azBdpDro4(N&q?_w zqJjqQz058)h5k4!w2-MoA12zY{;_ma?(n`^?h?EC5Zi$7Z_PKKfS-6c8}+>r^#x}V zckgB!wCbEHm+EVA1&C@l=>?;$T;c|}R(!Gg=EfVf)MM_@Y5p=~#bi!>;@IF!AMrNc zd>x?JSrK<|4(q)R(L2VQZ)CWniRpBwnE)LpI^8NWVGoF3!4UR{ygyS}+>a2YF4?<0 z-1N(w*s!CDt&Vy#sx>J6d5F@v{WM?=u2y_v+ljT|2J=m9me2uE)J6yY2gMtGV#*p^ zs^z17EZ>JrAv;r2nZJR)6HL^h@L>J0hhbrI>P)dAu6db25wy;PFq*rJVe(tzdEXQF z+)B>@n$7WVqwjCE@!fv|g?nw|ds+IWrk4h!54kTey`a^d7ui#cKy%k4u|35oM@JVV z3W*a`X^j6q1HI%?tf6nn?~gHkWD@Ft9SR4SmXz{0B0oil9^1biPD2=v&PNz1Pj$h0 zt9D@2cdS?x*cfpBM}Qa(yu0{4*R(`%8aCwpgm+2x>f=xtJBQ7a{SVNwBX{o)6Q0O$ zDb~XV2v6cl02`634eA)>I*GNXr4foEGZ<&*(GhdrQ1};HqlYQ{=ypXM(J*#f=p*qp zu`U+aID4or4;;|p9YA})YgejO!A@DTB} z#xT7~HXs7=e2~S4o^ZHIjEvAQMut%6;kb|T+(A!Nuk=YXL%U z1c-P95VT)Bw=q}fd2iek!Xe27j+QinR}y*P$eyCZ|8fn>)&-m)qoBLz27M(8I?}1< z9sgJRV&CcwDdeKz2(C#_FmyY3O$qcrQnkG*3cdPxc=n9+%YmXjBLlYAk5C9H!Rs;8 zc^?Mu_Ke_C!@!(S4~M$A`A_+JpbG~DFpg#}Ed%1Lhlz6-u+LN~p?4|0XGPv+^lpv3 z`_Ox4={`&Ljd-SESh1>dqx(|u*y9nOJ-Qto{^!<3~SjVJE}X!;N()J z;-+@zXXr~CUPq%W*w^+_8YfWPLOKnLDc_}N)QVkyLXHNACuDL(9MM6PkT zX6S99cBn@>P39ksiqJe%>5Pg{KD4MaDnkFzaA#E16+VlWzRCHbe*funBzE8y_0CvvTTW`G2!g`Sr%dM~eLfu?b z;n)-HD`8D_8jc7q7|#VSBWN{H@D6)sl8o#wMBo^#iIH~MK6E^;Mw7qFgoG52N6kXm zeZ=Bt`19rc*fBG=l~CHfaMy7>@ay>Yqq+;1hnSenj|N|gd}x&F5Kgl8zskxlftPDC z?neXCk_<0fgp=)Lr#z=?;{fYz!h>uPBmhu#1f?%wSD0{4^tW=B!9*zC=&eBq;>dKv zogo7pv;BQBc{Q&G3lz547BxCg6!|1_jd052(H!BPI3DMCtQUgS3MPpB3H9UbhlHPR zd!Gd=Aqb&y(DC{|LOIi`m<4ZCH}4?&Fr~TT`#|KAH3wzCe`Md8BK(gr{&5z-!e*Ce zgDq&k>p{dchgxzHl8S{8&s^}swia|Xz5Bo`?wZw$6@J$idx~ZGvnVw-jbq&*!QW@_ zef(LB{*<|v%dA%1*AWM62O9DNc*xavzFk<$?-ypIXld`)P3 zlT3ALvc5^3{!&&*ktz#IZpt%G1kb?!jx;1JCqK$^tevJDvr77xc~(gZsJ9&T*xnla zUVGknK6oMW4=M~sUvZXoz&oNflwj}e=xWMx;vvoO^eV}w@@I!qJe_qcO89mBWlT_E zdip&NHE|ii_6cF7F@~pCBZ@xncA#{64Sk?mY|gMQZzI#HeANIhcM;D`=EG`hf24I2 z$>u_Mn>|F*O+b=8^&Ezq)o80I|1cJ{TeG43STgJ+d^ z!s@NSlX5DBWag7SR-(BOgqUc44Nz1J2qF^m;2jIrYMToYpH0@&$>uX?Ei9eEqy`ay z?M=4aZGI04nhn;AlQYu23GZ-v(Gc|}6|8W9P9)ee6-`S$qRkt7SESWD0P&9hGZc#< zpbnW{rVm5}q-itQk3${aF|3F|GU8i7T&weRm1SMeajygZDK=$xG#5MoeCW_lHHT2b zj=Th=WwfU?h!X zY1=!VsVe&Aw6rCPb9@fWRND-HM--b9fxz*F;Xtv*a`RqTuIq0_-kCcoi`)-^!}vcD z`tu`=Vj4Lvj&juP^r+(tds?gCl>c(VEM@N-+#RJfFlP+RYjT0LUsx|ky7Yvw30zJ} zR4U$!Pz*0BC6dPdP(+&tk#-Z)2lJDhK7=3G&soQB^%{yr&6~gjrY8{qqm)zp_DlFk z)oH#2-MYuWnG9(imWgW->1>_mNBBjOHf$`M(Zg$XEDCGAsR=|j{}lsoj}#2LVUhlA zD5JUx*QTR{3~o-4t$Z9EueE3u^}$#&R@S@|G@~h8&GIMGitwH0<($s95CMRN=Pe(^ z7su*KNlXx%fVW|aOv-Z|drA;7C3u)37W@N|6`S#d+YW9-dhcY0c$@GG&O!W@D z{>u>NpUa=6%TTLGKolnPvxP$NY2?l5P)wzpPs`9Oak?^6+u=44&Ig_(#E2-R&*Mr}+tx=k%e- zUVENB)hZ_91%(V4!G&mmwz{pvV_9MnHgNnCwZs}r{A5_-EYD#<1Viia`6$~jv;e%T z4E;Lm>o4f4252}~CmTWrAuudMQz8%B6?wRtf;b@E%ClA(M6W z5MlAe;5@GXBm@CGA-)!=^YV;ajR%`|``{kKM1$?9Q1M8KN`RFM1O&Hm31>Z zg%c~^WUt&6RpNLsmhOT>5Q+XJaQiPt`HD=;F~Awpk2OM|X3v(@BfF$tLH9`)C1YI_ zT#B@~YDE#fl+K>o(#fG_ixK_BoR)NZlQbpUV&CmZRnCP9KkNLXcWa*6|F7{~*Q@PA7=wDQgAkaqHql zi-4M=ApD$+y;So^4uW-@9PUA;Jo@mf_@@1vfXmrMg`k4GhS!!8!6x`h3B|DOHouOf z)5oFq@Xq6@)R(K{) zQZs@MjYw7a+Mwn}1RWXy%WJT#pKg8u6rZc$=pbRHjbVO8`p;JiMsR}imI9PW$tZ-~ zCJlhKER|A_kkX0?#G7~tNt9s9 zfXI5Ggv7+P-$Xn;#J9iQc!Z9ogp8(yil*3m_7o||uSp`EK&X%?Wt)EjEARIYKtz*s zP&qf-DCdKBkqYu=oE3s6=`9#|*ZT{3?{q11Kx zySut^B*rH1n?QQV(2zsT{PsKoh#e2K+P@#@m_7*sv;EoNIMk#3S}&Z4hC$lkl4;Fi2?gyBgIEg~O!w|Ak zj&LdO5tfHFws;8B-gR6bUXFMkh3mUubme0k+jHhHm|S27B0S z$okL2547yT4ysQ{7q00@yxUj5zX~MCT=+;D)@35 zPdn5m@T@0>W_Gv#G9-i{M9g+l`FBv8e~SZ4AKm3#a4%{r)n6#3 zeeUw$VC)N4g%HV_l&=XXTzNd6kyoG!1gZeBqQrX*-WyN}_V(@BVIZRZj0HhuTJWXRXj05`Ctqy_Z z88X#no@P~EW)(ONEbD%2*>9|Fx@~Js*Z7%TeLyWHwi~QxUaxM_#5qX$E}*;!J4D>7 zt7Bc7^xuS5B}74~{_EiH8!s1ir>uW-(r3sjq-DNw)>MIyKopkrEjF7oZby|vFGBIDmBzn{Zz^ZocKC%<%%_LGH^2ESk5Rb^kY z&pwP2-Yvs~<9I}e@p2iy9b;EGW$;Y^rpK6MZ2A)zCs|yTd=qlx0G+oBU(8uIqwQ7M zd)`ib6fz0#I>g}fkN6<{wfs1#g!e}EUxQDg(&s&ZjO7G+C>i{SI7l`>fsh?8FU)JP z-qlD-GBvXGtF8QX+Rh!ekP9{jkfOO6kTw4inMZ8@IS9Z-&V|#bkc~-qPj8|VN@7I8 z;?Ou#fb}r}?!WZmMEMJzgQlM4qIR%G2?qmZE>TX8ZF3rFDXFImN-_zPGI=h*mh)~m z0k5cml{=Tr01fr!&USur?M*6DaNJg*TEMw&?T9x)_ikT|wx5QwUzCgTbI1JPlG3^*UNWp;GL4gRgljKfh{JrDJOaIKMGzXOm@2IWXF8FO!p z+`3!2nRo+SluK^{AGn!q7w$Z;0viK%j2Qegz;?6!xqcj%UB^`#x7vkF%1N^3t%&aT zkK!!Y*A}fAYYA+x_JnH$tz*q6Q+3uN70MYDOvc;{z!PQe#7@9vW2Cm~Nx?2J1bNnk zr!92|XKTZyY>O{TWw?2!fF%3NX|Uz2j@^ebcC*TE+s1Aw-N2k-PS>%H>O|of*SuuWe0(-$%e{E30^9X~HfQTH)oQ3-%vF4w_KZu31+)|}8x`>C zlGL#Jb9ir!&-7tsy$HGw@&Qdnx9H32)2cxgJ?Y3LBglry=6H}!^HGi~p|RX{hWige z6wTMh%@!dQRYC88puKk>yxOb-`a-JOd_8(BL%SEQe?b-WgpFi*I*+8gNGZdcs<;1X1HN92w2)AQZ@%#`8dnw+LU*`|7VGJ5U=p!ZdTPd?3WI!?fFQL19dV znnEbs)Rvgpe^h53Bj$LAAQO$km`Ucbeu$V-pk8fP9RcP_>pe0)Z$y6z^=E5K%vrP4 zCEU)dciSo1*Yj^elGd@#$HGmN*s;zENJ)6HZRM@819YEcA@1i~2^zT-^%&y8^?$d1 zN=%;#Z3M|n2gBwZ_H-h}qsF9K)bH&99I9P}5n&h+Tk!xEk1&U5OuiBA zo0*0#tI|BK4(MZ5f*&MnjZ8;9=;3Ji#VVpvG=?j zALJ$bfKJ{g^)@h7VlA-@gQ9WxoV5gl=Uq$KUIw_pk)1h92$`U9?goq4Xdw}oz)Q9!38)0HM9BEJa*(Lxp42JgQA`oZ`A!qSV%5~C zzS;NO+zAoE z_0XF7DRB3V_a@EAOGFYla)ko;$B+gBT}%LfQ6-;L30ws4{G=dG1n){Al}`8{MHUL> zNfpYIe?usDzlWtBFHwg=c{;eBWg2l?g>sy}W$%lv+*Ig(zm@rDD2IQ|>UlKmt7O-Hg_;?I1F2TJM=nxA6 zc!`)g0V@5x&jV!cxGq@>y4)93LXq^vfQurle7O(zDuRSRBN47d;!ym%EOf(=CCc(~ zT?*zce2fanfWd98SgxP^w__NJ7}7de-%5OMD=`;XQdIE!FmP1GM>GkVJUN@4vMx

5*;c>=$eFKE3_gei6{p(#Bx>1_@K+#j9y@r9 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

3wZ~p)$sQ6W!5wU_}oHgL!t2N zzyakUPI^MWq_nG0xK(S1a3}}q2&0G6>+Qy=Fb6jgP*KOy&-f2qJ0z(%!=FnHB(*V+ zT9nj@OsX@0`fwvoR3Th0&1&@3Tee?q7)d5BYBF2veRGvry zT%V9H5U_v>6)Aw@+xY@T7Es9|1tziukTt3A=!6l8le>1qji~!&+@~yfQ(-5HD{!YG ztfJCN@h9>qgF#MJj3kdQ!6I{b1H@WPG6%5da|D~r0nlj<696?5h*gF^ve8jjaBJh{ z%oMvU8lzXA2e9MsW^#;ReI6(hNRb%DEHVVgOpcMP&zV-3Fo@u4ddh;P!gxK7?W(|fTM6YWpdYpF;q}X_F4a7#(FNE;+Sua$Bcb4X=+AI zY#N$+`keM^#?9n-;QBmJBu7(eWysiB)6i6ktQkEE#KYI;v>Sn7l!u=U7J3E?l$mbf zr5M{O&>Xs&1$iU}QEZ!ojB%7Zm{_I6!B?@0!f;&N9V|n8*5S!ECtcKSF_9ul0kH$S zi!5f;4Yrjo>^AJBz$a{3p}QMb$)KE$Q<}@H?!Y^4DI>hU0CJM3sw)qoq65RAKs#`11>{DM`b#awILynfS+;7Qy=1CEl$I|DhD7B zN3O=DEVb=#!i7!IMwYt<_oQq-uor7?T$*xqeGe`(!IZ$~05~x)eV_`I{i~}s zt}(~m4!CNmc>o{g;KGdg%pFtYQGr14<|O_iJ_k`cSo<;IQK^xwgh_^4jOE{rJA-&_ zy0(H}uq)I7HdC~x@V8`7<1g+J4U23H8UPxb$Tp^xahOdS3vhWdFCF5MX*P~n{;(t< z;)Z2Zoy=A(Az><;P)5RZCc&OL5tdQ=>gB3EqvbLstn(=)Y(ol6WSAXC90Xzt zF_yE`NK^Clc-qKrGu-#nGrW46)rq7%W)RtBZmSvCo@V!xRr$DLVD=*1V!6P;Xb0knZ+ zZ2>f7rN*P!7Qochcof?LnA*@84Rc0p3t+0*A0w5Qn{aJ7hPj>emD!u3G*`uVSztSv z4YJ9N7ca@>TAa-clIb>i(jig@ z`*I7sLpd3%h-WoU5V9=RRY)uDB`#kLwJBrk(;#Wi>RI@)CU%iwzvFwmye9F=fE z*&$nE(y9dBMBbn^iFkzApv5(Tb#XRppzcYS!%(-5ukY+{{atJfYov9ruxho_RvrHu z_%~5It-63ycpBPUW0L|dhT4Q;iqjGT+!Oy)7Yy#13fvR_OigV<7Nk8TK2s-?6;EUI zt{>L_U0@SSU~+~42AGKJb#N2&CC3ZCG`7K*FY~yG`7)22m@k={;>OP7#x1ADz*PB^)okj}Cx)m645Pkl&kfrn!fUdqTc6#1^&+XjZhR}6(iOGb2c``CIW zIeQW`I^CX~Qd8WPW=S8^_IBNX?d`_A?M+{WpHjQp2>UCw!~@VZD1N-<#yMW|i8t(lRdZgD%_z**MH* zB^sv#YX`14f+B*5Z=-v{a^*s!rMgK)6kngCM(W^Wb-7epu3V=vkV;#N>)=Blxw6zV zkvy46cBc4JkNlP&ue(BN0o(F?0lsa;E{E#|ik z-gUbp`0RUK#`mY1%YfbgcQwer6`uOm{cq> zj8;sKiKWk(o|rI5u6ZSw=$--SwVrJ^ohSH2-_rY)S?^BPR~mSQSz&|~ey0i87zz^; zu!}S#BP^S0bm0+ zcDp~oxb8-FJJ|IIG3|N=a(T+=E`XPN%4g#DyJFYtmZl)zbGEndkc|)h++{YtHGTch zZG33*+qUsdB{n|CDipBh#x}mmXk)V!jas}_el$S5$!&@0zG;&*HCqxWIz~ z2hD4ZHBb$QxQ#ArIONAR_+G|=Xqp1?4n2eyj^iLU-uXq4bJ`Jcb9rJwRJ-X25@s{D zE4x`d0duXI8kO09h_Nxp z8Q;Uk#`X9`w#5-#xv(UHXB>Byzj>~qvYVk?Y;gYe_~zVJP4Z4^%uKk4pk<(N+$N4o z#2h4V2@k2QBesiihqTuG7uz~$@k(uQu^ou1#tuZgqp<@qHMPOTwhpEmTZdT1$ipwf z+LiR5u^pf+wUWEU9-6fin0{mZz`*GgXs?Rlyen;`G*c0OD^$=25h&|_o`&BkJ1V;u zIAC2Jq#@(265QOywpHCw^LE#%)OPxqLEEV{nc7cZfH5aF zFEejwF8j{gPc1mV=m2AHQ#oajw#(li2G@7ju9^Vs41t<3uY=3Gz}}jG2Cg2&rCVUM z3~79Kx5IL!$T9-u>IbuYkddqR0GsT9m6@*?-M}DEp51I~Pl2?j+mFmfRWja^v6a&% zwsJyaDYrB$CSf`oT=}vA1MjQz23~#T{wuZbPOWR-P0KXCjo8Z9f|iL5_@?u*0jphk zSZrmk%@+^0dG^>!p8p$eSDrqnT^Tq!FS|0z-)VN`>5N_ZoUxS?=Z>w+wwJe4r?Hi$ z8QG`*0c=fYAWzn}Q%hh2WAh{?Jr3eRupz9~m;`LjWOtLf0mwFT|eG-%hbVXeH59L?BG)*IRVCbp9fk2#hD(HT%QNaxKbu2I?Lp!&V)g-Zy?#Z zer^ZN&+b!7=PEw+xAgBiGwxaL9r_&*)hJ#bp(-6f#)H66De*!fmepqvkMThPV~OK} zH=>JMXnGg!^$Owkyvh7*$l zIH|`N?G(Gb`IXpJd+*o5YcKg;vA^36Cn!FW3Gd==*y3U1))^~y`ix==r<}3VzZv7d z2ifUi$LEM>$2TLBCkR}P-%a9kzl(PK>AT2|kAChlJN`gl=Mz^uo!H!83LEQ7Q=9u# zG}f#{krj^7<~}C&)p0wFXmgLm<~|jpc$FS$44{NC6dMdAWz)2{t!YWpr!WY1eb2%Pcl5A zd!xH92K{V)617<y05kl&QQAWjght$Q(^#*K>7E?0O>~yFQWDec~|x zi#3({U|tM--kp3f77irwP!c^e(;4;t9QJtb{$hE+$nea$546PG_zZ&NrsqCPZhQ(s za%nZuvj`?PKKCKHw3jF+nB3S~Cb`_5C@+}Ym=7eEn^ir|V{)gnP6y7rHw>f4-PZS% zP|F!YGO^dzVT(xkDg2%D~w1XlninJ0enT?03QD2j<^HuX>bQlbj-vjI!3Z5I^Hwj z@cT^O;is?Q`P7#;y{^A+{qr230Id>V-rENKZr|>Cj+t}%-2m%(`Q1?dPV>9XWc+S< zKUsR7BQ4_==x_O*JK!gi1Hc}v#lD>Fz%f!@62j2$S{nClZU$j$eIS+IG9TWuB<@+t z(p%=kTb551ZqkI8zq7{ut zg(cuX8Yn?mK~Yx?9PQ=fUA8~yaj0+c%RXCz)$Dk%&xD)uq{4=Mc6G!^Yif; zs5TNQ2Z-E*!y@JZu3STIhyk^j1N`MFCcMBLATFOH{J?}_1H55>mRuUNYPHCW1Kc&RYh7#)kn+6_n&&2n} z`I|fH|Fa!RhbVxbFxU-WAbe;lF2qlmQHl|&=)Nc7_1F&(Myqm@< zY_2mwq)=Lzjz3J#K*^gIcCS5%55IhG^Xt)%&Q0;|Va5!= zO?$>a55WIjzT@azXQj^NgGD~Mi9TAxRq~Xuz}>+|J98KLXwlDI=A#|x>wJ8)Gl`G( zv38;Gd#R6hI@;76iE383i9Xs*;_s^4VU0f8n)qnzv5!{M!n*iq>+sQTGCtad`e+-m zkG27AyzzY>?cgm*cV{1M&J&!vYSkaS#$!7|H}OcuaXZR{QJRyYF}ho?i6Xm+o3x^F zoFyBh4v)`3uW|0`L9j9I4AO&O;h6f36F>2o`i)~hG4jQ49ENb)fywZ`k@cf+JdE(Z zj6TnKOze)hjl+nJWaBPYm)kf~DjA2H-K?Gn$79!WHFma9=D#GKXR_DA-B$5Tv&~e4 z1ch(84llA!EcGp$*_Ni}=bQMJbMsAn%efi%ec$r;j&J$SnU`V}jmFeHjJb)23fOO8 zcG5zS;q5qDGvmQ~70z)pTjedCuTJ5`(9vSw?cKpQ z9^2;WV>BAEct>OZSOROthJ8=*muIci2IhEAV#cWcv3QJke_uLx0HoLocL9SWOME}^ zcAd0@Q2tJfXPC{zGo14rvH76O z*}l<|Z7&}mk)9(?zYBx!ufkXU`*%1#Lhd;7a01IhG;2Z)jwNTwAn!0Fi|M>z8o+z2%2^K&MK)wKj zCrT!Gf&~x?kS~CNBiZ=DSppFO10@(dQ8K|3ECDC@KnWR$x*sBzfX{HCgp9;EZdn43 z+q4AUXZ0N;WZ1~;u6HLs@@E*H`F8xbs$WLRL!whbIbCj!?1*{Ha31=}2=p4ur?qU}3IFOaV2Lz^BEDH=Gft`F`w&aQi^)hwV@_ zMMcDj6n7&I1U~$Dhl_7IWwd{U)0r5N--gn8cZ(76Df$>TlHbmX&2{kX`#mIX#HYn( z_i!_vtPMr*b&d}5l`qC)=rUW9r^LL6cnz+t%s18=dCKNfpJTo`S|Lx_e6Fg@*VUEn zXO2{Sr{hV`J~@;98xEDH1irgNyvgic6mNol?y`83fxgZs-efk3H@Vm;6tI5A_wdd{ zjpk@HVTBFGn>54+K52&&j5nE(c$3LE-bB;FNr^X^M7&AE#G6cMyvbA?Z!(1q%+&Ye zO}-y*GU(ABxJ=+2@h16Tmn7^Y7wnQopJ>R-njn;rkuYH<7A0arM7wLWiQyvGL^ZoP zf}c7Z?3=jlst$=)kvoyYP29}!W@K|^!X^!kNkU;ZX=qFm3bRQ=W8zR4)R)kh@vtUt zZ@iDOy;@igYZ59`$4Bh)7bxFZkuhP7u`(tiMt$;iri^4f@^*9MiLf3=&uomn@v6HW ziRFgup%Fh5OAgzJ4y*`>pTYMGjquR;86!Q?)V%zV_?evikocLL1o?ja%=hDGWOm?U z5{+y7&cx4rN9B$9I-^Y*^a7cKhY`$}0jaYl3g@nrI|Em5-`Vj#lt7s%pF{=;CNfe8 z?;8;pWaN;%#gd5UwCUH2<2LTTaY3y zni~?IG?R}{noZ-A#MY7A8j%zQ8Nd1s4lvStw9B;WiS=E&tY|9D08 zRD3mbNgwh)TK$gS`u^8p_bp!z`$pn_oq-=%zW(X?^Y!Jj)jylB)GD0Q$7nu=x7Np) z`VZ6ZDl+RDdrorLdc~ll?q<_>l{mYdE>oXZ|C`T@? zBp}1h#0)oL7%m$Vp!W=%AHTge%WoIo$^2#x>z|F^()0Woep?#CZ-`OM@>?cGaSgw@ z7=|@#&pOS~mWO9Yp8gfY6n>knwZ4jH;kO3L`1)FEG2Eddf2-E4@Y}b@0JFkxe2n?+ zn|L<-#=ex_M#*opF~6BN!*6rox5j$>7Am*^b_`GG4o?a!_$>w2ZZ?pU2Q~xd))t{6 zzp*{9ISPJLXuxlC9%`HZZ(V!Wy+)^~P|NZg<5|Fav(~J{t`uYD8`Fm@@6Dd$zWSlE z4!-6@*4-OWpNFh#V!qDdTijOdWc|=KtJbcUI%UgC1zEG$`%0bXzO6#dl&uXfB5TNY zl#%Zy|KJebo6Ykcn*MbB(Piq%k4#`W-W^?i(=COktlsZkg{K^D6$+(m0oSbM9k;yt z%JJ=^tB*iNCKultgywm}!QMxYE!YLeI{ZMO;qVpsBXY?qJREH^{>ADafwU@F{a4|q zw!`rni=(T5&Bor9bmdJf&RBik4N~?S+dO|_ThOUUyX|A!(0bcCd?j1Hp>e2nGfK(Z zb?kQ{n;=CWX|<*SzGb)m--d#Bbdl8`W*y=Nzswf`f8d%t=4QM_13 znBRXC9(T8AHG`#-R3=IjT$8QB{Q%dWWZ?S83|#EN(|)jombznF)6>S7)ULIUna;s@ zCDRQbIadMxzV;;v{5=AW-sLyO$)9HWhJKgegoQjQ+Lw+n1Sa*_HpbKcISjD%SdRX* z)#t$LJEko`$1#uP1mKeO^v|Hp@!MFxyqvIfL%TZy&a-bg zxRV@MUo5YFnXJ@7&(|WM zta#Ud1#nc0HUCUKay#Q#k#W~~uYfpxxSotdvYXByYvf_CO>Hs0Jbeg+h1FmCHf2{6x42;%-F_lZfa z@Y)4{_0IvTt*}~N|9TWyD6c;6-3fl}{&h$LeQamE^>{v#Pd)jj_+Ox|bNv?qPsyuU z_Ngo4;8<*{lk_WoRRsv7qI`Oz`m;ThIH*e2W^!-5kZxpwqv_j z>%SS!jmQk_%dh0(>w(11>5IOS;L9zciq;){J&l4!uTPOl`lIG(<5Zy+CGt8w$Hr>p^=r`&{uN2lv(>#Hq6l zU%WXLm2kIC{|NAkIgf}dwvQAHAbu{NiSKOjdv6b&Ko&d5U#9>DFZ^wc-}?S}Me)3% zIKl7|O|!tqelDkk9*8~_`IIkyEHhq&M?pBhaD6HY_<5Ni%?va%AT@lU26BZcL*^L2 zwP;Bz{Yn3y{%l%bqfgbBEic~u2d1G>z+{@g zWnZJV-MA2wJ zgBnWzXV%H3{!x?M_HGNB(<;hgapjNOzZQSnKqhtA8T`J6d?~$);#Tsyf#n_k00!DV z{7?K_vtf^E7p74DUMT-}EN}N;fM)EH*SZe|WgmGQz=rxY;ye8ZBH?K+WJhPic;!~# zYuy(K9}U_YMlq!d8w=B&f{$j=`^!iYWDx*dx6eEBGQ@G<5WqqU?}jw5b& z%MNXqeD@G`fd2p|HJzQ7-M0Jp#ZwnL3^@z0_rmMw29)UFq5nD#r{7HpF0cKE#%2<7_&%e@mFA1rVhUY+wFf(BuaEF$%k? zHcQ_^F_gfr1Z7U=%LMg3)w*5x5BI47U>gDf`73~;dHnycb{mc;qR7) zzLIY!ZN%l{vT4!7CKLM0)7fO_aHjed@5{lOR`;{jaZ*J$G{MYm8vy;UHPj&pCT4omjSfaQ}CyKgWa8t_d}a(!z;9J z^q&RfUPua(udL)2QWcvO0 zA+S@e(H=#&4!@N*n#mVNZWKu)y$a`yreF&|i~(2*Hu( z4y;%;3O}~RUk;jvCccZl)P7{PBm3~J92M79_wZwYC6tx%9{zE@V5~*CZ*Gn@JtHoU z>YC8l`7~X67Jf=IWThy1jTMX_g^W;k9>&Fb5iN?m(q-H3Z_g#vWf_5i!`9^?Eqcc8 zbJ0?eKwB|IJkmM*OeEs>tcfTsj zZnLO%)P#SR0p}YzXH=IdnYjbs8JFEkFtyDIrgtuS{deNEJK>utB_jO;NLm;_j44pM z*7y4V53gRI(~1+us6*t{Gw9>y%)A_jX+)YEF;h`yVds#}S24tx4BBmS^Ovnxtf2KW z{6Z(VZ!t4ji~Tn;RUzlbXKEWZh0{ArMFUkQz!RGsnDOcK=G?LiF95u60=%|D2^GgW z=8%0kS1XD`*oRtA;;x8kkrR~d$gM+F*akg=QU{w0`GqJ{vymbO8iYJRFTtuy^|pu& zjVm23SmUtvu(B^@Ais#Eg%ez(VjU6IW$2U-1vCru={hIxSm#=Q9YUJ$Em`2Su+b4m z3$?Af#(iFAb$7cZ^Say8x!!*VdhAZA4x`;y%nNhcoZK=ep>oQ9;JR8(#na1Kfb(^1 zAa4YR1X_|y{O0melerLXNxob7gS0;KTfd8TAyPr-aV`UvDYxmoBgY=jQk&P+p@W9gI|aopUTvmlRENUOviQIe}DomLSIc&WQS z?oNf9>wt7QV%7)K*@vwof{G)8i6erDBZ7wYWcHttFqhfgz^-p|>}e`>HTVzI{_7pK zu}5!PEviTq*le8E`{A9~hyR=9R9-)oGB1|bt9(Iy;=KJRO8{Gd>7Ssfyg?>mW+6h& zUuMz*&rO1^4zR$#9WPjZ+n1SiHR^3Zqqa<6>XKf56;vAkxfj;3bx|uU(vnl1AxmeECHqiBJbF!jH~}Nj07G)ZI=q*f+w;Wj3)3% ztEQ2&^z^Nyr?V9LW>QG!H+0y-TM~F+VqS8WTPF^?57J+?RW05d3l8m421k6X@88jcrO?2V zkVH5{IA;J*w2*=by)eZrY$~J$CZcfpH!zTXil(<{t^m@#AXm?{!OGI3lGz%{4W^Z} zUEqiEm3;cv1pj$F%?oA{{O9_HIerlBXivX!cJ}rRIV*u6ylU`$c@E#b;t+Jt6k`a6 zU>ogZFj~yu`r2HM!2^+OW(D!!6)uHJ`!?c17wEv!Rok-KT3sa-mc8AWgspEuteAG| z>TUwRu>XdLlXP0)a}T-hh0>v~Y5h~+BY~pz6~JS9YDk0kdkF|*7(-f~kd`wQBX~7~ z3|VO(g`HDaM*$GO>|_pru$bvjyti4nv#s;=GAzhs7~Ei>IZC6joM}Td>H=Izp^0Y+ zN0$OZO-%FAn&1B#xtxD0rVNFUA);0yd&P4|xIuJ7m`I^K2?NMhb@5g!M3Qi7kg{YJ z2FyIc#9yMMUu=C9ozB-_#j2meXU}1l)!7zkp~>t>k=y?_6jx3O-E=gU9H9Las<70$ z~Z$HeIWlondj@PDM=M+xBZt-^TmO31;&|+jIX{#(GsMu9`i&P#1GMbS8nhYS` z3!wpyRCvm24@at_gmEpuC{Ja$0|W=~ddP2zii%Y%N)pW1sdSPFQtkY3=tO8l>!NBh zr_a)0)q=x{G86W_fd(tFff;Q6L$1U8U9xK^q>XF~M4?!kc%4dOvl?vIGjZeT7|9n<+=#s4cZB7SfhSJ(KYj-nyAgs!cF zKu)FKh_aY19gS|Vb@DLKb0D9crTOer*Y9_ToT8>P-)t^VJ-#%rEw+k?zAD@DQ}J3B zW3lMs_$=D-imeCX9R_`jki-)PQ2u-z`174?Q>%3whGgIHoT_AecBNum7JQKU8JyL zecO>&Ofg`Md8-7-gISg!%RNiV*PuGar$Br3R;wB;SX-7tw@R?;lR#4n<# z=5B%BDf_l}XRB&49fs7%X7+zGsV#ff{=3+X>XW|=INy`NX+V?~%8npKp562j>SeC& z(`dU2y(R^@&m=f8y=_j>--!i}gRjDTuOo(5m??V`^0Em<9VKvR!JAhoyqEJy%wZ+O zL~$qE{@rYO9e6gS|NCfCTiHtC`5qZ8*Y%%8d+!@M*33}LIdJ+fLt~X;BldP;N#n>W zK~V>mN5bI10tM;ycD)C^D#d`ITsEoy2gwMmbB>mVS8e)F46ksaEKHjhPN9X3&zU+jR`Se9dCQ?QE!F9dx{@o!+r!4%^b@jdsg2T!!;Uw{VL&iyob1sR00Z;E zZvMDO@vRB5=lz8Ix<{|VFHk7Bre9C&02&$e^MD*fn#n5c2yAQ}K)U#pXl<&~szgV0 zf1cff=IoD@=5H4(J%0s5Ky6%>4(sHFE^8Wpdib@(mz};z9vUU|Y@Fb?581WeIF?+F z;f8~YnCyJAPr>qnakvFUiWWX7b5KiQeZ=hIbK4U{LNno8&98Z_AA?ohXVa4ZC`-N9 z<<-9-c7KH?caihd>*mB(v=v|iEtB5Vwwl$tFWweLtkw?vBJjf)Zxx@2ep4QiQV2?f z&CS#%pYYw(L!7D@gqh@vBofEB@U~sJ67775<1w`}%v45J{Ey+C!c3cCe(K)`03k+z zHa6JTM5-ayF3|MV&nKgMnZ}J;EqZOVoYkVkMs0dlOTq{wby5Ar)qaCxL-)U4&+a?w;<(ptyGd zA9GUIIt{&6dWnd^=tk@EwI67^v;Jlzw}hV~KR85tac!#wfmKM``O zY$(vxnOgx@NUIch&2aa=G7_XkCd_Sss?RjlIgX%RMAwCe+TQB+4?`n5ycs1+UbEHT zf`_f3gZKau+>V!KH%S#oprpbAJe|pr*@xg@$rF>XPRJV$_CDk_FE$PIq5YO19F*ny z55(YO*~QrZSKt+Ks=g<^Ccb4BQ&qyW_kMLW1Kpm{H-!JQnRGf&9wVm z4#_;zNm&s|1E(Mb9HW86bNxbKhaT)7%KTe;4qjrxN6(yyzJ()rP=_AOFTTjD2q))M zAFE=UE=dUP(=hQ0T+K#!B95-8ZQK_RY-3(qLNJ}SQ})dhs+Uz1cFL=ll0ihmYtQNp z)D8pn9wJK4Q3u51O!O5cv@Oxt$~W7%^wwJ9QGXtvu>k)FP(bPE;vZD}pJ6{(ldzJc zNdHlkX+IJo@?tz#f_n*GXs_D!ouiYA$DN4vdLj#A|HeQnkzsz}XAlJN@s#J%&@cgx zmB`pezJdqoVaA*%5i3f>sygW@+c+f=5-a2)sTfH64>|Vgcm5_ z7h<_IkMrS$;k-0d)V!_X7RAAZIx@|SrcrKMQ?@8_wrck?;pS*Ioaz?C3!>)IMPSZw z7Q+z4&MwvYKGiM3dU;XkMy<|fNVC>r@lgnZ>IYPKPt$T$YD2;*#g6pKcclpUB7{>b9b3sDOb&E5ZTmt^}*9 z5Q6lf5UK`=w0Q~`ji&G^G#BCDQVoAph{Mhg4&00KnI%W@<12a?2%~bvDrOMo#{4SC z^_4=V5r*Rp6)Rj|gckx&;w@!Sk+6{QFjyFc-$O%2lweqK&?VVK0Mx|-j+TW|yij#E z_z31kLRiw3s{_T46{2!1k0O|`EB$?>NYyM{R#?ppWCWK)%WK3rzfrp$gxWf^IcX<`f@6pg6qz&R9Z)yRSfp`bDHFB3?5Mi5P4iZPTgn#8oB>(ZRyR7c8#!Wy92Bvl|EH$`*s)y@g__?s*Rg4Afr3hO#B zMbh-r&x2bGb8NOCi^v?&R9Nd)!zpx3lT|d;xe|{;xrYyQr=V^DWQ=@3DgG>uqb}2k zLFJXH&X}aBv@p#A(z=!ricN=8(wv34nM&*#&Kqe2*-DZ|e?OqqhG((4V_`_#8m4M9 zmhMdtvu!rPelw5#djCnN)6PslpnVoGQ-CpO?9frAheMsoDO9{ zAD{$SfsDK;*c8-YLP<+h0;B;%e2K~`0t4&62`b@vLCi+z16s`pZ<^|agH?MlrQ<>+ zZJXDp>m#qWP5V|bqDp`XNFa=cV8#Y5mVm&Ah&`aJqN3heH6euAFsPDcUX&iZar={b znV83VEF@JUQ>=dt#9aC>{D~Db9ac3Ff`Q<0s34@CZBPyTayG_>0RRmT!+oYP&l|{D}WU5YOKrmG0o#I1~spm1ljMP}o z3wYZv{1Pk~p8_t2?dK3-74x~(hPs^a_#Ie*R8E1eT!^s5h-QRsSr6MA)hiL1lv?ft z!xVW7KaOLO4~e61yP(%D5)S`54@ih0{wZQMa;W$62^am-Ny~M&+JV@0$IUZt&0F^m(seyVeOMqy*Iu#+wOTd%yrrNuD@bRWA{N)(iGw|=_ z_;(}zE&U<>pb_D{jb>@0vK=pQ*#0?2OZJW0oMoI0j)7Tae*qAOM6nG{gs7VnqUXp; z6e1T2Q88CDBX+mItVRrS8z-nrUd_8CA~$~JN&#!7qjQCXQAK)0@v8f5SI(S#Ixjbr zlg-x6?_OvuDym$`3ajjDFe5SC!^))63s|Q;{c-sH4Es`9%SGEP3JdVzlGD2u!lU^@ zct;VZ%wI(7aal)z4%bXiSI&*F6A2qJtK12o>Y zdUXqyQk@3#C5o-;I(S>+^0h<513oMm z9Vd#wp(3(zfL6`iSPxV;Vf2b|3Wb5;EYpMCx&%#|Imoj*;yYO5gTRRcZ+a)L2gwde zy3?+7SZ4Y5vEr^7iru=ubVU5oV(|F^{K*wa?dxa&imn*0%mU8PEmPhsoC$Jtg~(z^8_3A@XnRn2B|teZ`1t`S9zcoz z5q_q1o}9pMizl?GKX+&ZT9mv%A8I-VeLw3Uj3M%=q{!!uA@V2jGSm?1baDG=%SX1| zt)Mq91M-@&P#$DUusq_-z*G1*V62ohT~nTjVShp7*j5xQ!7)b8`jH%GLHQF`Szz=W zD`?{}6$902Z|8I}9T=n~0zi%;bDv)=8j=fNTZJpor<|t|_D%LRaKi{=z%)%*;&U}) zde}_O+j3i08$yWf#s+Wl@C{J!{w2f1$&p*yRdXw{4y|H#NPai+>-Ya-K;%!~zY0cJ zdH`CAIW#u0B05&)GSwS5p4LWe*C9dUO%yfZc5GRU&8G-U(&>Poj9^f0RvW_>iF+jG ziV!i+Mv_3*Gj`MH3&JG^z+{n)Fdmsy*z$3%V^WPko|6tRKvbjAB5u*%xKM+tR#7p< zTd&PyXhb$lp5-VC@Ez+hl#F6Y&HJy7&>lzqNI|B7b6g*5VNEem$EJ8FDr&kCz~q3U zT-u`spn(Ats%XVD-od5~tMCZy5Svg+@C{1@Ug`!_3`@bzpY_9r7Jvc4?ABp=WNWyB zTMD41dNdPm3Q(Xd>l(J{lPJqZU|(yPh9d0Wr-$v|<*0_)-NKZi!!o4B2}@o96brJs zg!eZaDr`xpZ~;smLWK*9(R{ci+8SO6+|DCa&@dlvjUTtd)+!}03Zhmx2gBw?DA|fF zu&wao_z@=0aI22LjRN!f*nxRbpsd3*IgAQAi2MB!cwJpw^K#m+BL2c?5x{MSjdHuR z7RUsPc7!`rvDjf!NtG<)c4On|q!)HQJY*@AW_42isP992r^jgX?Ll;65jD&fWpJQ8`lh#xPN%;bekD#xP4xKQv8T~j9I zDD4bN9CWxb98K^W=J0C(A4_Ik1eqi=XFMDSuw!^7i2>|bvQnV@F0|8WvhO;tkcnTzOQmHTl z)2BdRg#er~X`P25l|3yy5UF)J6l&yXT%v`Mz#?u?xxvSvHc7`Yw@UkQTOP#fOhT%u z9I0|sL3DN8^HcazW-cV_^cq8usJ5}jVPjRLxw8^XUw$>3NbH+tu>-GjkRY{DKA^^P zF^&y>qF5vh1BF}`%h;@MwwPF`jY*DP2$2#{PRK1_b-u<6xEj#F^qycYGCU6M70l!d z^NOyba(K098lo@LOcNzAjVVGUe8xf_utUjd6DAovSY3|?tIEA*tscenQ@=ypDV+`* z1w<{#wKr7A#_~RdfeDvIC771_)_>yn%NaUStC!us(TWna3*ICpoa`RxrQVExzmxg* zXgog^|CU~iKRUUqzGn_350O}zeS;6FrrWH90TbJi$l_SYp`g-gNPB+57qEhe5rI@p z8jN>nhX;jwa-HS%kHW-je_2o)d2{pn9dta{84yAWhXX?m7)wM-0LkJS_jd+{q zP>ExIwpfIJ1oGJQXQN%Y0gvZ37}*K{x+A#pf+0vJyWhY^P1?zu!#BIO{Yy2Cv*K0~ zmz|ilZos8x5=SS!BARr*bP`w1e8HRE@3)=@2$prswv3te?B-?5(+AF7i*Wx0`odN` zwD5@ycH~xJwU{FtIdWa zh7R&^0cl*e>KB(0L+KUf(GT%s3+Et;P*@gMNg7D$ctPD(?EYC_rRi(yTt!8jFz*c`2ALVK8+H>IDypV1Irjl-@j=KYR;TbN> zdQp5JskZpOS+uabs4-c*iY@4DgjJb=DL1|-z6!0_`xo4G0hYX%b{ZB>Mx~jk+?hZy zj5JxA4a?f$i*Og$3N@M9;wNz>8ES<^+@x3!-NV;lGLg1!VLQh3HH@iwxw}%T9m4Fw zRi<{Ze6q^FMHis&_xIjZ^f-nxFWL*7-mSiz)7Y8R9Z4!TwX)-)^2o5-IEC?1pM5)p z2crI5%2x}a&iMIS{m@N^kCK<`it5(qK?^w9TF*z~eC?Mh7v>*cKeX>kErxbTQ^uw~ z1?@S_UF0`+`aqcwfM+%-wtU-=x%De-eIPMtU5`}UFcBGo`pc%L;=U_m9=JdHP<*9h zzKEk$gvAx&q3^pgi#d$_y)t&Uu%?|6r_#A#orVthdrd?8L4uX}3b@6zb1C3Kd?n5d z7@ovERt`?F>kw`@xTA{GjDk0j)S8SSb7gnM1NmSM?cg8omh0d$6fYjR<9f>{_gyKs zMFINH$lS@6+azzFbXj#C; zvc%)MWlg66fFy4}6lFyQqrYw$k$rZ}5$fUY?29cXHZ{=`E`~tfh<9fIPgecF{Agj} zot%GuVI#I+|0eS6=fL=s&v0SNi6r2OZh0L1^!y!xU9s?6f&k{c!s@EOuIDd{WXCe< z)OTJI7>vL`v$1|?r&Vl+o=8`C)HW6+6Y^}d*7^MzjmJWc9FgS{td+c!b+Ksa-Upu=8N}<3k$$m*=C>=`gJCS-_Xi@M-b`QV@5# zz5tzU?XVuNT1Ckf{b}7uNJ6aXXrMXTdj+pR)LzSwm5`iFnAG|@JOuceK~xtbWk}Wnmj8dzVOLBX+c}B@D$AZZ+-`8i;%4Rysw3ul6hY<^S+ju z_mdGOd=xYp&i7!$v6CpGIlP8$}{q{yObLBg8_OS)r@7 z{)m&*i5juw31PNS$y1LeI`WGp`9DgQCRHFpp(lN+s(@%@W_DpA52F)o4kJy!+`-iELtjYmL88t z2_gnu_JDBw5LT3hX%yKQj@J(y*N5ZWH7S2V-;})LQeXu?b>y~QNOX-uLy5-g+h55d zOpXN$*W@i&$I?Ab3snt%8h9%K!NFZ528LrdqsMkz4&uodd= zDTPwHx&>Txo8f~z3;1A%#VN~|DJg1eyf3TysZGHxY(g7z&=ZY^k?d1~niY2=vhE*H z=HDUfun}0EetgOC7A>dkOz(H=`|B&R$1CH_U#WCT*tCyY5JoE%{8{|!2zJ!f5eFNm z<2c+~-;Qg?aiX!6d#|nJpxRf^FNsQkG zcpa#L=w^P@TCN?s2^rhJ90t?-A?myxqb%vM}djY;-J7YjjZQR z?@w!vTQ>Sw#+bE%*6*eDKb_`DvXL>2p8F}ZV~=3O%cC1)^EQe*=5dXzVp+F~FpCi9 z&C9X%Yu$im!EI)E9(Rb;srRBS+`g0A2%uBrE~c_FGYkWr1>HFm>jzFIb^zyK>u=EB zO~x$X(De{pQ6Ad z7=*;IzE|3vSi+J(zemj79s^|x@{9_!%T?YB1z zds=^r8hfqgrUTi8`hFy}b4iW;du1<-Lx{rT$M(X+WHq0;=XgmUXAbbCY|=*#96yAQ z(Kg%refizAf3L@fy=RC2&xXRk+kj1=5jVG|_2(#NHLCr3fPT_^|7*ZM>dpx_r7&c%`C->@W zvq<111tT(PV@Vo@WYVURG>pllU6`a{P$q35Nt;U2?vtcVbMPDs@F-&kKjAC9hMyo( zUy&WnXIa)R^vzg0kFXmnxMUpw-%hgpwUA|$jVJFy7D$gwl8|M4E(t>zE!g$#e`?ou z)GVD@VsRCrgEmGH)+Bw?PC7>#?IZH$&`*IZC~vcdOmiujP{%1eBCfM1t@FZT@-lls zn|NV!bpPIxropUh63u(#fMg3J=iBxQPXMX@BfEF;4kG}dbS+}`=%Q)yhKjN+i~aoJ zpT$eXsC+iWCl^aitr~@%mPVF}oQAnC#>2fY5cH?<4UX%-i8(xv?=bPE)$94bpjr-N4E+fUHKPr60t8fQQzJ1HFwx_+b}ltGY#c2d0|C z)dK19J99ADH+1RoPpYZWKgo3UaNxsm%3JqETeR02dwQM5=L@x7aI%U$-tMwrJc#4o z`otAspPHb(-Ut2m69oTYdUFa57xWtH+|z`WLXx;hXTM+_|^O zIjN}#rp2;as$xI7IOeaGK2mr}vGqKp^f4PsTM=n2ztT``@eRHn1y`B&Tj-nr%@x3? z*Ta*6&sDrG{#?a%oC9;$AzPX4mWz@cig&Gp*@HUwN^&^WvUMJmRWmp@axE>OnT!M z1M0d6+G3og9<#$TE1ys4zY$5;)@?_O-9zw*(`cNx9Sy_>np{_Mvjb- z!NkSg*w@2H=yx6nhYe;ZRQ_UT22*f<6yV%~0NkZfV=uDd%{N|{TM?&?530y9|Ma{9 z_V2F@-FDBGiw?G1Q|)Qq26B*ez&%Juw`Ilwv4e?D*x z8X?Azh(z$9gljD0OM%^u*3)mp^u}jAp2pwy;dfz_N|%2FzHXEH5;g+Q33r zpnCFA4ZHVA9@OHE6TZ}wy9sy*>kRZhVEIy1^zoq{V^pC_D=KxSAX91ArN|5id@=j!S;;6A+N7jn5Y?{yh%QvUx;6z5_kuXu&P`G2;sQ&tz76+iK&Zg{NG{p|)SI zT*RA{1(o<3+kKF^dM*AW*W&&Z(eE6+niVJq90>q`S^=La^9)yCkJcB=f@P9~I@S@^ zgy%o`<`OP|EZ0xr#u{emhn38;d|jzz`}n-lPyT=Q-ULpvtF9NXsath#ZN1b~PgU>L zS$eqi^kg!Vg=~-jN_eP%(P#(!GwI2I5=|OrhDAaT!y+h>z(dkL11|&d2`W4gMSOq) z@-(s=5I2O!zA2k1iwnvB`~CjTz4zSes+k@#O@@y%kgl`*&VKGW=llDf1<@_Qg!|`M z6g|KP5@dWb{wVBxEt35o{pLnQg6yr}$JT?T!fj|M3?1%!0Jm1WiBc;cLkKLvi#JhN zwo?2xxHTg6d2GkzMfiNnNsmSS2>Lu;Nr5J6^g1?;Ej#!M5jU2yZF&5tWP$LG8>uGM=ns`c(0AbZ8f+LX zy=)#8*(zH#wnD5a@HSb5D*!Z7V82ahk0x=4!8}@F*ZZnAzU^Zj`DvvCaXm0PddCA9 zKPtP-Bp9`8EWC%SNcp@OQmgF1?saBSMa0{MNXy<7L+ku;v~VUCQv2ES)Xy)&G*@C> zc6mI9Bh1R@5jJ~muNJt6%I5V-R9%loHSjj&*CB@Pl;#sk7E}YW*Ll!qP#ENoMJ!v5 zgsw)A#rP{|WsbG3W-ta+#`kqX4p6%uZLEIGI za=Xn$uH5cHjK|{s8V(w@PEoTOKHUZ$2Xw{d<4->qxWY9{=b_}x{*Ird8!uz$g`a#t zxU!d9IxxArJw(;L?Yjf*K7kX~0XQhrJ{KxIC<0NLyi2Lf3c@JK3aVUtJ8o%eVn-i8 zn%%cx3}}{jS0SW|;3cjct9Y|Sl(wx2$Nz{gz}>-9D<5%+QeU7SHDkH+_MX#!lbGWr6$qSNDoh`yb^a}C~SbBN){C78s$bl!koEBozd~=d^1W695HxD% z6-j^n2c%g|`|CGce=QYf(OnPpc2_@J)}%>m4(yRn=+h&w`W|{@u1}&fW}WiGukich zOT7N*>h>0USX+C)`~k!UjFqRO(iR?PXH$xY52DI#nfNW%g)KJu1|}Dq{9QQsReJ0x z9zF!o_&cd02Sv~wT)F+k`DB~?p#AThA z#fT0_CH}5Ns-5#dnYQi3#2puLFMfryF0=`7<&)H7SR9N~sAIP%+;P$0A!DxkFye7y z#uB_4UGg@#Bb2RxI0IN+hVjo}eQ+_Ma459Vz2fqh$ikho9CG?S*Ysp8&-Fx~_GsE= zWxTZmkuDRu0cF}kPyXl4SH2%FXBRZvlBDJkiC-JYV25SHn2{C{-wI> zjAp}CYXc2V{RtS=q``;K;FQAS(@?~ywXGo|wKfJ0_G5Bb*b$3;h#ZG%#kR=M{JulV zJW4W}wFb&G&}R&8DW0Ocfi3;69)fuI@4)Y3Ksv%cHLZDY{;ug%KfsT%t-KuJsM(gl z5w05A>fJ}!yEI3Kg{LDf95HJKPvJ4ho%I86<&?YwALcUx9c;vIbAFwN{t4b#_Y!yl zM{onWwI*k&pB<{kZ^8>kzzHj_W$TvF9{Au&-CF!sy6gOO6dry$64rJJkn(RW`wT~mrIk~(d*+okr>|3d^_A40iItjG77CV zs`v)57s{P|R&L!sc`uvw(qg6b6nrklo%h3zx_2;|gAwB3BwkqwVZw*XOrk3hM(${o z4pDri46g>D&CRSObfsv=I7S_GMC&Q4sXLNI1R>C;+<|!FUioSnhT)H^2po0L0t{Dv zzeKb5`Rv>)E9~-ItzqBNxj3mF}_mgp%gWyZ`+)pLgqoO_)=uUv9;!S};Ex>y#TqGfKMT;v#9>&zFi2n>c>+9mr z^h+u!?mD`XQb-H?Axae}h3wPEGU4~r8)=_`vH=?3#2+ZEwxO+bSnJ?B5q9;NEV;f@ z4rW`~M{c6%$`s@D zR-cPs=82*B%V7LvIQ}vme;JOy498!EL*A)Jc?N#@uXy-*@U{0A`PA2=QGu(^hf}fG zIdBPjYm94oLv3vKU+(H0cxE5J2Qpmez}s_P_MDiG>)DH9KX5tKy%8d@YptMCge(WDesS;J@9?DJ6x&`wVzj z{8sF{tWOr(K|DnX+&RrM1S(i<5?c%=!`tmmX<-3tfQ z$Og;$)METt1Xu)Gd@_C)lsbxkJuKV#4F`o^N1DHBdA+e#?A&@|y*PgBjg8{Otv3!8 zCvUwGSMW^XZ@D;)zhQ9(f4M%yK7C?5C=>CShD+pd!02P`41l+!k&`y+p_ibA1Podl z3fkcfw?`oui={fAV7=k?3i<4%MlfEv;dX3=fO#mGsKN~64MDt%g;sxGLLOg=Jnp!v zcq87Pz4gXusixQ%8PvFE;*`d%H^Qxh6wEC^A>c5cIiNtyFB~UQ#~VQD?R+if%%avD zUfqZB&!LXOz^Y#DQ!Jd5ZyzUP&9h^;l(RcZ{@gEtl0hG3jkDKY$U;4*i^eU*yXn@` zM<1w`xlLW>Y?ybB9ix-7{kR93`!vwkZtPsY#6^zk;5yX{8x(G?Uf{;Yg@daXI-p+0 zuSc~MSuNHl@^N1CJ;r%WF3yJ{pZqs@^Uq>UH-FdH($y8eh*{@aOy*d0FjhRIwK zdx|&lSDy~XDzjVz>4k@w1=q>K#+UgL-xc~!9(XCz#o(vBh*+@i`fQY2eTzxrSPf$j z4vk?QBx4wFNAALdm$GlLFHZE4592r!f z1J~;?(xZy?a2XzyJUu;9X||$Y^Yh5wK-&UUx5HN zK(NDLcd;756LEHn0YPN9i?O+hU~y|?agS8&cN7OOYS=*?T7;vneQ^q8)FhiD7KbOI zI7cml=BT`_INVf>L%cD+X6ymq$}Qc^t!8c71mA((W_owGbaFpQ6?>eU&6d))*s$Rq zE@PH_6(=!Th<=+{akf6@CyErt&=tA*z||Z$ULRjcSMvn$Q)@%?Wor_$s8qejM>`oWeG*AA5Hu4hN{Nv)iDIb^oQ;n{joH*E5H# znoIUmwx7_odgwJo_Tk&@=&qku=65!6OUI9d8&0cO*Q>Ut?52&j_t-Dr* zrD{!9wI&OJc0(7UCZWk@ZM+@dkIh<>%p?@o&jS!-l|!4mdElk)?j+n=$^PPm*o!FS?vcSUaqS1;*eDH< z^&l67H}qLI%H@*tnd$D8&%?K1c*^kJbtvTOOW;)W-sQHpl8ZB@+%eqeu-)(FaMoaK zcMZRcNhL-|#}u%tVcIFAdlyA8$m6m4{WK^<;zDwp2nv;2i=42kB*_%gX&E^qV!}uBK@R&z_kv|ptsoGEPJo0K3Nb`sc z**rokCWW`5JQ$xfkI1PJznM;)N1TYWmvZ*}JfgTUkLWj>M-;)Rr4iXYBBv2cgY$?J zQ5u*>JgXHanMeM_@|nydvNq%Ap!|!RM`TED>gb(ESVoI2nMagdHjl{4dF1~v6`Mz% z%OS<)kwY|&#c!o&?ckr`$IT~I6-5qf3w z2yH`F&3Ix?S+dG8H(OX{O@Wc!vTYT}O_5=&nhvd|xymd#p-3GD=cJP1Kaz~aT$yT? zF$+{|7N}V0veh4Woo3bQOFiApWJk?W?bO#XvIw*b)N)$$f|wbRJ4ZE!a|D0kNro0r z-Bn55yxxH}cJGT!U`Aq1xLh~^Mu@C~ZA#{XdNLOzZFlnKf)gC(m4UoY@4xd)cp2vd z>hx|$=2w3WPSojzpY#=Fd7a);A3rzl|8CA}@VNgANDJdWGr)15sbVarH68a~KoJ}F zkJ6Zo`>&*hs=QD6IXt4MUQcDmL45c-Tcyccx1BdxI{Y%k89$37&d}5xzM3PY_-<+E zG~ZGGz<;JD`5HWSwoBbAf}Yo{l@8y^z;y;b`|ujfQ1J1`6nu-L6fx&`7(&|@UO$y+ z{91w157wt2Wa$?RJfClRzg0v~3mFJ%zbw-YnQ^p_@pBGar}LZgb$$#Os0M0N19g6! zhM*P-V~&>46dh)b8lL@O)dtrorTCZNd#`E(Izb!ZgLn;bEvP7{pqIe1-SlmLjP!1! zP7s>E8Wn$a>irtUS?UDQ4p0i>78vlOR62!A*ir$#TB{sD>3+lQ0J?MgB-N?0cXn&e`GVA$U)hXveM{=f539cd z?l$Lg$Xs~vSJ-cI`ZrHLjGvwfp)NNR z?{l&s8-)4!?q ztX{BPNw#mQ$xS zwH!U$Q>j{xv*;0eCumAjZx5Q{LP7IIxj;NM;jKeAgr}I%1W(bN;3=9DJVmpIr)16W zl&mL$r&vtkDH$?6MJw z=GIErwwx1B$x-if1Zqn<=y?BZpZUCO5SB9r(OYoG{cG-TQm$MA2s?5!X0X9scm!n84 z)5|GDMIl_Tpk7YZD!rWfW02sqf&qehIcrr|ss_xeTBYEkRq5pvq9&m!UoXdI1yb|% za%$v_nw^m25p=DZly0KHt&?)MoMQwH)_jC!mLi~T(^zj`~Ih{fKSLppgZw)N9K3d-r= z_UF6?W3ksDEnqQbfLM&FI=z}!v_yt&B)Z`Gt_A6X%q|5)TVt}X_CaFyUAw_~PFWgud zw>IP+OYzn@oD;;ZT8@c@DC1)x+6Q1E>w6aQU^v6QK1)mfPH9pgeh2Dg^Sf!q-2Mft5!$PtG{_r=&Lb4=S zh?X1{lCQ%;KZA5JWGF9#u@FN9(o8CyFn%L4XNtDIScvjr{0Etk`ii#~!QqW{@lrjQ z#=8M|Y3-!&Lq6>OL-j?&A8e>xwjCC-?B&9)$2cZL1+~kN>+k8l3$F~JbgI7GIxNJz zSSy9GVIk_Z-MFF0Glhki>anoU+YpFYh?&<)1n+(;ah#{i9C0vBjyQ6cIRX()UD9MNaBo67f47xu)rvv zh{s{N55meuKCr+jp9=92?)x$iJU&!2_Zlx??cyN{^WfFG$%8v$K_1GFZ@Zwk=r*0BiCsB2&O8`Mh=KvM^{Z;!zM(DWr4K%=Jz&_s99 zI{|2#mwN!(-!l!2nTF3!^IdM=1go-jn(xxS3D!j{9_19~yR^(iKel}n)5pMP-xJ@} zi_cgm7@;^i`uL3Y1fQu3W%x`X+|a2H7$cIaR^c=A#~{V2&fznSS3qYOJ`+Xh@R>r` z;FZH?l^pKw`zGY5mNt^A$I(%vhR>9G!-gUSF|+WQ;!)k8jKw~UN&yyQV#H!h0ShZyQ(o-56fsP;4Y^1$S(_GMvXAAG zI-;nA$^M5{y#$k~ziGSr*{%z@p5-uE*0UTYQ!_h$>Ufor$7Iuva{77- zv)D_z4d?v!)S10K*&u!-b!7+dkI8-yJ}D-9&}Vxw+1JpmR^Q0bDL-`-bzx2!CX)m( z8GqGZ$WO`gT1bG_LdFg}6m?HQoh6oOwiG`_*Vf(QCiCQS@qQ-@lH;ca$^Ua+KINw*uMZ{{y~AWIP8jFHdYH^h zD~$goOQ08%<>bEABj;hVEH6pz875QhSzmh!_^ByjGG+~!j2}MvDYl{bDMmtmis=xO zG4nAUiOJ|lOqMzhRVJ$Ox8X{Pimo_>r|sc%v+dz@)%NgN05UlnAftN*$mAhFmc}iL zY7{6;eg?=C$N>iG6K zF&HqHz7)e;^lVS3q!_2rBlJ!%m*(9b%*7Q!hPh_Ewd#gAG3GPj#Ar@9F`5%jjAoA$ zlQrYSWDR2u#MooV9)vxH`l;Ga?;b;zQk<9!87D?7I5F00!imYLVJ$*V%!#Ol$cg#( zJSRpUVlMq=oR|WPS{jZMlhcT$K~BtxC=GC8p4EzzaAF);JWfp3rcJQiV`ww&fW7K0 zqs5kRVoEOK#AGEW#^J(oVq6`#J%+zQ<5>Jnde+qG94E%yTIt%Bb8=#GRQ|?H);KYh ztmFBbS)AB67&AFBh2_i(PK@IVt~I&^zWZcA*Y2(D?>*~_;Jq9PHWu!0{_ZZH4 z{kWGCV}~2SiP0GhJ%$pp0dv~l zW60L9m@CuyJ%(zhvelpMF=QN;Ow|(Q9z!{*o%%XP7J=U(5Ho9!q2f_vI7jX= z%p$jG78mVX%60SlcjVsNV@PqA3n#z`2kbFS+U`EXP0B!?*ZO_daEhCL9HZpwo8UxV z>vdS7WS}U|YYl&Hy`RHUPs(`>#!@pJktYu`1H@8H6$>I-Q!I4}MGQ+_MPtHm{RAz* zQXkGGbwp9Ul!(Z~QaCOAhlta#6wh5UEbAcMTi72%y_ta=hWaCzfuZ>0V<>ZW80w`x z7^)Tc=>|!8 z#93sx2c0HP5kn6xj}Q;tVT7(C0tjKNVH)^GsHB}xg-2gq=!snD5Z70_+o~!&18t#$ zNnfbK&5Uv z$-X_y+VY85D-)NtudfvsF9Qy}^~U0jJn8Jt0`rVCF4gLHM%v`EW6~Q}&)Qi>WqBWOv1-)_R&rlDHlSihrquCax6$W(~6cT+$f{{O%!d`xFDMtRE zsWZRhZq-5Oq12hx)E^|j6+S6QKL7K*Ab9~TvHCWK&Vyt*WguBr;9~x!AX%0KB-4@u z$?|m|`FThebAs|BklYWOGC*)>I~FlYCXDZgyoCoZV_)fqktrX>_s@g|VB~f2o|gsL zP(Bv(@;w+?!?vGohmkFNxv=XovI(7&B`^RZo80amxpf#>gS4wX!^o;V8&lqbxaWkC z8QVaNtR-Co2$`u7DYFPXL%j#T+`~zGWipaIsyP4I9{=uWk3e^>SK^9Zi3cSPN*ZuH z0h*C@0^&?|kCjIv2R%5GMGCBYI-IG_W;m0c9?s<(Y+2s! zrFujV+4DG4aRX=SH^Z5VVARrZI8#m|76);r6H%PNnV!`^M1nK>gDSyQKTIFq@x(zPw;#F=tb{>Dt!aHdMu@qEoJoVk-R6K5(c zXGq{oexoVQROqrLGHznZwBbzoy1MjykAX9P0+E}pn`ffW^!jlx&SZxhfHUcp;Y`{R zoN2XPwjb=hv<#}M%+2;*vSAW#k0RdQONGF#2#|2Sg4~{}RotHWL-ob!z;S!ls^azp zSgWy`%yD}PQB%*uOJd2PxSC{uVEw(93TDF#b};ZvGy_{pn^`oT9F?WMj;^a1x2Mz_ z7LS6M8Ie0jW!^cG+sh)aT2}zKr$~m(>jIQp+#VgPIWI;vfZI#j{XWB}%0Qmm`(xH^ zicw#L%&)#3PJOt&sXk|&@4zA=gRz70=wlEs@F)`_9%Twxd(fKV(Wg+v@aWAnCV2D~ zT7XB#zu+fzL{W*``!gt_aOQ2=xV?8E&iKP{S{$00`?bkI+}^Oy?G1_B8!jDwCj&cN z`lm1hm+~jYr4TXagxj0RxILvG9A20H0B-LtWU&@95YD`1ff_Q0@fYCTpWB=9xjhC9 zV%9)yW+1os0eX|$`x_Xr(*Fh4=z4tmckm^*_dVAJ@abP84sv_{h~EVj1r_vJShQaE z_FJ-LiY!Vy{wTa_YASMj{|`1`vE$XIxIIOJFrV017`Ki~@s!m|7=IeU!R@(f$>XV< zj8&cRl){)j!&5qY#?oeeFX8so-yFA>>sby~Wj)JrduryhH(D?sw|^)DDY#Vzkg0n91GEs_9k;jcOj z$vs&<0%?+aw6x<7!RE+4`F@GMlLtPEbTM`)FY9p&69l)%0KuUJOo}pw@qXkjJoq&B z{2Xrad%E8;CwF6yoQGSoyd(1E z%zQ*%j}GMZ=nzwidoAh6y_TsXs6D(X8n3|JPM>8y(3#_`s(Illld=Nglo^hk;l+D% zM<5s(#_oQ?wJYYqTlM5#)lSP6h&`o&?U^uUiEy(ePMDdeaeIo*xINr1Za!3m*DRd~ ziL}7OSGAN0GG&qXt5<2 zPswE%PgY_)4o?o_aW&$-vmi*KN3P5stkJm%I)*S4G!ID!66d{s+>7zp;Rawl zdSw`owjrx#aEZ#2RgSqCmzXsLpqpjeD$uw@)iiEWWeqqkQ9?E-&iGs+Wh~|j_P6`@ zl_+%C>d&}D#$m}+Em3lba#TC@b&M{Ct3^Zuo`pcW3{00bc|cuIc||Qtcf+O7rPD7i9@`j1oUFG z)VUsS;gMtnABQ(`aBT_rzz~EYo@5ZASi-xGFyC;a7F=_BqFRh%nI2#iaYr%Eyf_cB zi1HZEdyqveErn@hSjQz{$Q_oKB89?2&ySAmVYpP07q*c5USLSWrK)_Ofbx7mIw8Zn zeVH66pVjmDMP+|+R}&e>6~F89uM3gkYMHk@BAQ^Li5r)3sezSp5nz2XVI7Hd2lT<9 za1+)-_d^?qb9^N3Wftv-qNc2)-9VgY9pRS0nVAl#KybL}z03@^p=<~b55ml@dma-r zQ^v>4v}c%E9HcNazWFz>x8K?I!E)}C&cL$!qzx>u^@8Pr^~pP~vwNKLeBqh>ImjGY zNHW_km z(5*Waz$a5@R%3sxe;0gGtp84o-+8Qm2U=?NLkykA`f|#!zN~=v{7tdGED6@9C5QFp z>#+XlKMLzBF9WeY0|bZ8!Qx2CfNVhC!h>&OU+RbTDGv@O6B6E7kM-BZ``Ro>Kdiq_ z{(t4=d$7Ky13%ji>s$76Vb^1Q6MA))fXXmP?st0R)?s}O{;u{6>#O!`-uZdN9djO# zz_GAC^JA0g7jVSAp~d4+7{43NJF8<0m5ORT0^WZ=oEE=^ha{D?iZCm;uU4(uh(y_- zD|bS!2Z^ehtwT8^s_tP(l%6RPRh^Uyc-^LOf8<};sp&7CnT+3ur3apNor7+I#;}8H zvi9x^Im*pr~ zajY~$J8Jgg{QD3g-V~c3YVZ1LF^tUdJ#cg-eAmK91I+%+aS+7+8$U>exhR#3%2ugt zIh`pv?xqy~HoOz8ei(V%k=C)xidA*g?%Xa@0|{43@p}C%S>m%9;Cs=L)Y&4leSxx9$|k-lnh#q_9z*+cvhX7j$x5? zdLnmgvu7qc2AUHc1I>w!fo4y~AZw;$ko81#4D8p^G02eV7-)r#fi0Ej803Tv;dG*o z!HGC~DQC~?7!)^j4EoJ<42odX(r`KkIgMBv)G;^_r2!p-XH`q%Dr~!3nFV~};D zItG@}VoP)kN-one$VwdphoONw2KHL$7&yK;9RqV~rE6Qxsbi3%@;7F(rejdaI-akY zrDOOl#!MZ9!g7@Z9fQ(I_A4v2YmspiQ>IPFAYWIPp6@Yq41!k}i|mZ(POl&L>KNGJ z2Iv^*mFXC0OFm4i?XvxVN45;As?5!JWHwB~BU8lVkrl!QdDkn*Bdc1)Bbz_etQ`5U z-Iz}D~Ho>8Ai9ubc`S~~nU z3|vQixI6W4VTMkEKdDXvBIca%$g>%btn`D!>(U>Hr5#t{U6TWOcgc;sg7^F>Hkz!)2moRQ3 zICx}NEqP3wld-B3CRP};XP8(#GE2Ld_PvBhR)2Fma;|4NXq@#d1B<_}W_CRC@hT(V zmdUZtT`5{*FX@gt5c#y!nY}%|&gV_3GqcwpTmA!lQfzttKlNhE&!S(gevF}0Z23)e zJ#)&ir6hnY`Kt~?9$A(xs595!Ug@@*St|RSKyYXe zCPf*;_*2MRc<^7@^K;nJlMmz1WJ2mI9=7!4a`Ap83zEZ@gXBM-mrt>!s57EphAYpA(v@dKd1(*bn!2=yuAn}^mf$*MbLVqv zSsc2^6h|}7&n_}mAiK!44FXxQ+3F`vTI$V3kjV11gQA%y`Q#-mY2;~qvf?y8c@ZSC ze2h<)kN9L>$|H|DPk_qZ*yIifU3nOrET6`7>WFt=O}argnSzmHiPc_!4F8TQ)Pd24 z^=3kD_VbmH^W;-=2S)W3*r&x{Ab<7M804mBdp12V%K7vNy%PkcNw^1rae096$MDxV z-nw-|951t(;4hjJ{6%wuzi9UGm#i87k~NGuD1+l=Zvw}wpQ`=za=a|0@Rtl3{-PC? z$x2P|mz-Sf6Ms1owGcU8-=4=`^dZNq-wb~#z^J9+@RyuMtc8icoQTo@{_?C=oCJSy zl=1MFtWBG2$?@8(JAmV587;O1e<`^Pf5}Sx#i7IDFRm0E$NN>(GCcp0o;CG3hrgIx zD_z@iPW&ZD~I6{7riq4Mca^7GdNyl$tuU(jN{Fk0vxYp+bYmFUe$DH zHSIWF3EAK|>vOzp4U4&gBlAATt9B||{Tav0I4qf}B}$H0j%ugAj*&%R9IrA_^MaUJ z9IxV0V>m~0yjkQn<&xu7Bz5!p8glP(y!3LpZ~}~Q0LPoO-F=3klz}|Q`*GHAilH8c zL2~sIa3aTh2UaT?K+1Ex^Iu-?=gy1%cFt=s$GepS^5kJ=fVhgOVr@igimP@}#BkM> zG$tJH!)XDo+VK@X7e^G8I9?A|f#dxo;xt?Z1hIo*-`mYVREMykd-nrox>(45ilRbM z!`)HYN->wY+ZSHigO|Yfc<}}nFV|<;T{=0OlnFN!aKku>0Z$kwoy}6di$GD(XoF>3 zhk}@PhJv_$Div1hd3W;OBzS8}F6emPj~s6uug4;7y z52K)X0%M*Hi*^VK@4y;4;b|}a4OmjD);l0d9!_%3QIC@CUq)rYL_x)sqSqI@-bz_GG(l>g0a4ltgTuXa~YsK{n*W%k> zWaZsx-@X8C_K~|MqoNVhc;hTcKTN+){*1hQ52n}D<7eAp zddpre?0QUZLT6~)J;U^>J*)4xB5pg=%Gd^CdM!J7rj@A? z*|P{d(|SMr@=Po3Jkv@$&$P-PXIgXqJky#J=*~HZB*yNwy$+9a4lWJo4-zmOSuY?K zX8%}uD3b2M!Yor@J=9@g^*6)9^z^VW*FZ<;onYZB8D9?;<}xqE!n-{Tu^}wXY$jNk z<^&7VoM2&^JuED1hJ|H45iHC?3Jc4SVPRT(EhjG0iLfPgrq#FSu`qpz zh4q_ZVFehqG#nO|(}<-(EbK&-2C%SaHK3DVVSb$+7M69RSeRwB*b*$Pjz+Aemf2eGq+Z{w&k2ySdPlyn8_LzR>?Y^ubG8~&t%NR!V1e-7+6^8BwVCI zmo1TT6H}%Q3(MElrRRGLEc|e!VY+#qY2D-X<6bPx4mSV`(<{Tmv?W;BYP)Pd;36%9 zsw#6cZ5$gW;UX#Gaghp9Q3%&7$VIAJ#YLJwRCJsU92aS=DlSr>x~e5#!bK`XO+9bc z=OWpxK-oSQsg}0U#hqzoU~B2R6^2}-9F?WMj;^a17pc@6UJx^ji&Q+yymKTMnMGc; zt^h7lkqnvF0-<^mCB;)i1({IC}c4K1$8w z=uhS5Atvexw#`42#Rr)tFBOiX1a~g3pCtq z$QBx^XXe?CI}!eI2oIpy*}JoWq}xF}CEO3QLIk>&w}w1~@q~O-?w~O4((aDOMW#!( zavnNJRL`}no?8$@+=S0!6@lX)f@#6!0tF-t*{=2a2;TM*uI`QsST_Z%w+dLd1gysl zSZ_06jk|ydtbu)7kw7<4GcHSM)pY?Afi}Rmfc7=LKzj%` zFZD&)5g{zFHog0x>@xhW0oJB>AD|5g4}e=I5~jp@n2oFgheHf#o?u^M>%n%&ED+K+ zB(NTDSFkmk{&o4UhuheNjUC#~I}f#~)(DqS&XRU&j|8(hBrb&qGFSpoSLEGlk3Uo) z6+{npLvz?9YCRHAlfWM@U7EI{ThIA(FSud-Wqn=j-^6kW)?d7C0MO@#Y+>KDAkJ~WJMM`1J5y&4>)obv{!Hr3p}aqA|0;Y^*dG6LFKquAH1F!y z82YMW{150u7}_+hnqvmsC36Yt?k1Wvz%FFgQI4{pKi7EAL|M7Ti!t2`@J9= z&Cla{!z6QJQU;sF{319s&!UBKPxxYCP>Ezodd1VIk1Woor9bj)(qs|orv0s{JU?@>m2Aqor8We zor405S{hF0Ag2*agE|K%qBNj$@T^IJ60HMAlf-Q+6azz`-Oa7pw1w$Jw*fbPVT;iK zD&BgO)l{N@P}-RSLRKmuI6^oD1Q)`Hd>j5Z7XK^u(c_298mJ)nu{#w6GjD}$TS2IT zkR$Wi95Y!{L8zb|&)3XQK~%Kth6(~3VdBRyAhi*Sh6{0MBa~#KjZj3ct;S7EB`|G- zd|fSjzQ@o;JP&DDUylmk#`txC*VlXX5$u!$^bz#R^bxdW16tCG<-`E3gk{uy@zy@3 zmtcz}dI<`7dI^Pbqn|}Uy@cvodI|G~UV@XH(@U^!(319&j#{#6E$MFCQka_hC&avM z(rj+HP#LUu7C>}MgbEIw}i@a(b z1G))CGGty)K)$7$prZ{3P3Og^2IwZN7jRy@0^=V4VUWc~^@tjJ$GRgQ$=6nl&xQZW zU*c<7ECvhq4F)R@WuOlxp^{EijCaA^1$hsbNbzntT!g;|m4Uo&;_Iy2R5$U*$o%Rz z;6&ZT8WuoR|bP$TVPpm;ttU*t#$PHuVnr0sPm5!o{iO}gNy3Npw zpaQG(1L>SOgD`ukmq4LvC@26GwGwqk+u0v=JNvIq^PK7-&d?|zJ;bX}iNH)RXIqTiw4@k67<9X;YY8ZQCzv zJ6A6db@k#T_p$(ytCy?N^i)R1UX1TXyw-Mm`$b>$Y7KMxXwj-YjUM&I=uz(;Hcjd! zjPGEz1XeAQNwH~G0oAax?^@NAs&}vIt6I2!B2Q4vub+K`$<<5UIrNJlDxxpPV@NQJ9<${7N2Nec zQaY|6-jfAmh|WGhV+83iNXQ`jQb_mG6w>kY=@03?$?y5uXtDO5(F5=LW-p}sb=3Ci zw-`EwbWL?pbIc%}WG+EBy@@9ERY11Hnm{`G`H(L0caU!Dw*={wr*w~Xin%Od;5o(; z9C{F@R~f_jR`!X5ui=+s{U*gVxiDe8<_YHTTuv?*_fap1#)1vx=Qn!8qrcc&z%=R^hH2E5 zkX(XkIJq35e}ZW=BlTb!&Yw0bXihK<%?YNV*~2ulW|&4+ zREAsbB?inN=7Is<4853!1s0}}A;UDZ0@JXH6HFtghPsh>R42l2B_7qc=P?a^h-vhj zVHyP(wKN>2k<*B!K}_RBlm;-3XH5!}U>bf=9+OIIx0%72=JDW+btbE%1kNbg49-|C z@Oo!t8LVk=aEOIjv!b*un?x*f#e6$1#i5u#F1bv3L~3%)&Ox4!8LG z{!I&=KpKTFTZYCh8U-^*BVSj^p6@Xrjn-g1>-q0kOg+Hs=gCsEW~)$*qXX~^`)Y<~ zXd6lz6N*D?fpTI1p0QlIuid;2&#=i7JVPN5&nS$I5U$q{&!`54XUrdXMvY@j$;#)f>VZQwj(tKjjTQF=qDqvK2o<*5z@#}IqU1_ zI+;Nl<)GmOF|#0z;!)!|M?#t`@~UM7kVcUVnb#|kaX}h7R&!pAY5=5BFR(fB3XJ3Y z_kG4R%E3>S+Qs%-&|X_UTIv)#Ye5I5g;)1;EsYn)*Mf0MP828Bf(c4KBw+Z?^~*;C z20yxhg~!#H66V|S2T*u%aCe|=7pb5B415;DgRd(TYR`xt2}@0Xd5gneva0a=UjFu2 zC!+X6aHh(U-ccm!sOYRSp}gU5p}WI9^4;lPiHmw90>!8`N>FGczZWCF@uQhTGLL`7 zOqJsIQ;XTjqZ>iWqMBYWjuwpjbPV3qORguVC2rTKrioI+0)f*5CtNR$#h&uWbZvWb)#D%ati*s4|26Ub-KBg6kdbJ@x7bw?D87gQN{i*BYv8E7$P`qZ(5Ck@yuHDet>+0p*h~rXg2NbI|-@SN$IJ0lr z)xten_SP~ZzJxlyfkp(ON=~Se)Hnjvr*CGp4$Vi^cKi{RtWq5}!*Wzvu1?Ba?W|St zx!~YhdkyO8iM3W(om^{{(TK~fs5-UQ3}vj8+N6zHm-q;q(ae6FG227SI1I!4@x=TN z+VBQ_ciVo}Z@F+M%5)jZG^>o%!cK5B91lBdoqb2ci4foE^3iY-zqC(A@|GCidfJV&8HYP17{JZ@JOL$vX<| zW2s<#JOeC4JKL>ZGv6w=&wX39ct)WzI(Nm9!j`?k%)ajB*X^B!LPmdFh5mAjBAP)V8FrwugY#J!HV|hHE zW?Xjkb5M|$#_rxy#((G34?O*&g(n@{!5O}HgDi`OAz9=4f5Y$P>=#nIx)m?*+XE08 zjtx7dZL|=DD}RRSv7VQ%c!%6!u}Y=7@@{xHDoMONC-f1{V-{}`Q5#xfDTDu7k@4@{ zTiPJ6xek9U@a7fD3sa}6I9M^0w<4!@xE`$Vrx989Iu-jx9-oT{7Xs`vhPO*<$P~!! z+c0&nFzr?fHE}SxWUN?J!D(Zxrkl}DynF^%eqeCI2WUo|*fYr*juBUZGHVdTnP&5? z8KJ^O4K>l^yt7Us+_1w<2#X z0Hu~Vv9u<`=192me0sbee~Phm>FPYqu?SKO zuaY=(bE}+SW2-vH)@XRRjLxY&ey!$3+_r;aF$=9>pys;O#Wol#W^5B9nsGyU8A5cb zcw7g*v)=3^b=qmR;loTeJ8ThU_pg}lXtRU6kRk{-la|8Ss*&bsiu;;(xZ>)&L7$Hb zP2jx;d;P4pce!qrbSLYvy?wq_YL<3_O;?6@Yys~LJFKjZ9b2j`d@5`STzpwV?f~*k zu-J@Rm5Q}n*^1=42(Vh(TGc_VW$}Z}Wu)wrtgao!W|b$*c2=V#JG^eQyuvDK)-08} zep(GU;JDY#UqL^cM-R@|4#$Lu>(9bNy!uJM!<5ijIUBtagM~guS6%vC^;rfhWNg~E z4OypVt&n=&Ih135tXkK9oRRe?d;scMs6R8LUnMGsHS0QA)B1h#%~2=x=kRUSos^Zk zN0={2S5`hmxke@FtwZRzR#}#y_surkHyf;6iIOe2ai-~<@p&}{HCRJ&;iFf-=A~WM z#gjxw<)RL)Zy6}MIchmmM{cG~HJWQGw$r2V0e((nY&uHjM_Y7kjkXxitwkC|wH&5) z^@b$wN-pYS&y6#j8^6mb3w@MM+OmtFCk@6cGuKmj zOP#<2kvG%bj#GC#kyG6wh6oWv2yYtPM5)Vopwb;*3N0p%FJa*Z#PxENQ*D_jbXj6) zbn78By0~(G-?feTHZ;5YBTuP&6y3)3zLXl8?@-|A;X(<@4YgFzc4=3ZuMRrSTwT68 z!QV++O~rv4D~vB5l|8| z47I?l-{oVqeQ^r#ZJ^6gDxAjj_RNezB-B4gNl?66V>iz`_Y2XhQetS z?O2?I_3Zsei&O3Esft&7ehNB;hZ4(px_@kwrAj~1Jda=(QX}jxV#m>#?^bvEdHUmZ zfVCm$qoG3>M;?*lI1|ss!JW^G=&bozpu{tME2A00t$tKk104dqwc`h%O`vyZhT}4Z z(K3|Q?CE7Frss(oC*=`!_Ek^~P)L+I`_z+LRUjD1R+pRMv}9mK0NQ8G4(&3`YjBu> zp<9Ipyf%;Ea9;*otaVUx@LHxagD0h+93O5%bxjj|FrMM0j_gw~jy8vzbvTc&u@R)v zUbbt9VVf{Vs** zjF{kuk`NP%;NFh#&C1W7z{~(wBT?2I*haAC}iP;P6mUP z9D^a>Kc(;FfuBOU3zNzP#zv28&FBgAZhLliN!<3{M_!#b-hq z12+(_)(%O$rNU1moN*XT792*J1#lRtxttjrHam#K*oovp7Vt-PW+Vnz2p}<(b@bCg zdDmjcNpbwPy{g7r^ybCOO5M^Yaj^#pfw)MMCvm~Vt7+Qncnh!gu%zMY=(u&fBNI{` z4=T^OnOtpRp*Ab#f;G5u4Saf-3l=c2?(1eEWPU~n+o{q*E zY!h@eYO2lA(InrfW+R#BB+xU@F|ViRx&PXnyZXf`GS69FHg%rUr}2Y3­^+B|2qb9$aTdGnk# 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�Th}g+tyGUR?-%5s?HO;)$h{;wf@9>kteum?tG4C;s5htWF*weqI$O~|$1CFMmZ#TkZf_$qeD{+5)?fo|+DPu8xjtw>*t zVzQN#a1IGOYuC8CQ0Pt?4&+rLM@9KY`!>RM(5r1@db#G7S1ySY zg+-X`0(EJ=h>qGOl{#K}8hxz; zth1RdmK`T))!h&3va>SLJG&GV(*)Vpg8i-_c_0DkCYF&5>T>kMR-16kT>UZD1dS6- za+2jn;XyC83V4lRy!NrBlXJ!cQ`Ds z3}5unPP<|~w6k^$CQ=DGl_tXzR{6%^4OZpG_1~b@8U1#p$q;bhoKu8LIu9DD;gy4r zp)w36z^(RQEP$)Mbo;GgIs=5e1NCSsE7EkQzo|K#0jXQy)2@ZUNB5Zi!j3Wcgw$bh zz-55Y15Gbk-pv>^M8O%v3QgLKqEnCJ7P)*QOgEz~)!q&3t$ws+y)|&-daB7w0vjet zc7Ib6?E$n@Xzqw^CHTaZMn7qxKKaZ~tcm-agxZ3);`>oZm`&!_B;AE34*(>LuFR(i8BDlEtcLWneDhJj#hKeFx{$_bXDzKIu#T zA`1KBFKr2UOZaGjY^D4aHOnGzDU*S@B$@5p2Y-DPRqT_$oOq1}UR+9JP2k1_xqFc@R-qFb}Iu@{XNK@D3Ak zHU|jFY?$So5&#}hJ)<>R#;iVNwZ4al;Jd5_M=ezZAUH$FLM#cY+3AcE{M%B5&YoX;~rw9U)|I-aIe6= zst=1D<_uqhYJ#f)vH>h#4Y%`BMB~W`@WdLp%~0@q#9QHy0513u@;9Di^6$5l_|mZ=m&m3A$}KF;ST}d4)5)g zCY@xOG^`VmG;J$NiRWeX{0N#?mR&7`52GABS@pD;D|nP>7QiLD;puE)eq_l>mfDov zz?F`vfV`;hc{cNGq)pf$FFxBb0cDcbb3un%>jQvNi+Yc|+W;ML1d04o-MiQ)#(y{b zP=H})Dvfa#H^cH1SH7I6?dHtQIxho^kaf!ZIvD&lfq3EhXpYd4_w%3SJngj>FGnk0 zArSc+{1SP>K}1?@30JUoNQC`xfN6H;l`P_Pw!z^tgn8*Qnr;-|W|+()9wfXfiVzPX zI#Gmp5HS};hzB%uQ(r)PUV`>GjX_Ke!O>_Aj<@gP`rs+f)w(_ie*@gn%*W8rIWPPP zoILi@X>8mIP9vS^N7*KBK7<5v$Ar6cT)iNV>~zJ4YnZgeqL_�BC_U0+eU|;JK*3 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
  • #X9>MaJ0&*cOD0p_UKwo3V6~asmP;!qypxc*m+56$_7nG!uN4|FO4j4y zzoR~!>W;SF4a(s?Ut5yigMig08h*GGIsEV*5*Cll@8HIX*kI2<=b^9<=~ivCX2)o% z4@Y|@G@Xgy&agz6`#`QJUne+7XI{BZI}4Ddp3LP2rfC+AvG-rS;M)Yus|DXKZM$fKaznGPM1$?% zdLS};E4;x78lgvKu&B(9W`u%ihbJWUWV?g?FfyNA>R2RvehK-smmI-qrRds+Db~sq^2Tw$6i7%i^|L zvfFvR^rz7GTvN+2Xz1XI=j~l*f1=KLykqMA*QoBqS)Qc>)STrVoI2>#?pfYAXuTId z9f#V-2W(+bFiV%yJRQZ*Y-&9^1@ZB7_6L?IZ>GCL#R2EJLN!`3VZ8T&h?pmq!r{cg zAYBPxtzix+#@pc_W+F|q16~Q}Skn8oH-Jvi-_!{NmkC42o7Ka5Z2nsn4n3}u4mD$t zyaWtWZ$vrn$e$5oMI0yNQ0r$XfK_m(K&6ZyqhUGU?(7_Zw6WTQK+9`g&I$5%#NagQ zd6^M0G~!gG-X(S2Yhd=#Y`Lz(c0 zaK+TcVn5Tl19@<1(s>))6yMwpqio6DJz4T#&?`I`dBf)+s_1RQ`KNfd!FreRR?jG! zDYEF2Zi}#@NI@?m|97b+2VhDO|2I+@$oNI#|4yn8mpqHOSO0{YN@3Xv8(h*b(N$Ex z(>fb9Vmh+52_tNdGxr4O5ss~ zf+U)KCiq7i>4)bax-WPGas+<`rY-eYezh;0K`cH7a#**_MNd;^F^Uuyo93Pym$BPq zif|9;Xb?FI)i|wf$ic&n10?5N$g`ud1bswbU+dqIN4ZIRMG01gb)A?nH582c3gb7;N0Jhs$DqMm5xC+FX zx$dxhyWDv<5)6RybYBeMpe{xxHJ`xukZx){0)7~Po2-RtP{VN3fs&P-Vz=K%Bwmfx zLhyF6wO6Jo4X;MsIXi(d87D59_GG(0vo=LG9T_2}-uBkyz^WtCeD}beUGv zcpiv%kC062eJ)A(euVo<7+Lf*U_^$lXok}M?zk@(*z^Xg2y}@LyVFYyP$^Q1IzS4p z21YRfRv`c;cm@mNyQ#1vY#8W;jPZdwJFVy|b9RRCZH%#!+;6B_OQ{vd|yGhZ5=XL7f^x~Kg#*nEy_7&-;9k-e8 zxW(ccrTtJxBFEtBt05!o*6+bDUic#<27eUqqwt1%#7jNu@F{q~?Wt+zdz>+g#QOxj z7QA-*Z^!{Qyx|{^S;RdUM+W*MAe73X;B_Fb4C1KEo<3WVI#{d83tc=34hK=A z7v99lndjfc>1O+9?Oe!eoosR> zL7%dKQV}WA(LW+5^a%s#ofXgI2wO!Ay3FW>JF2RX1pzpGup%j;@f1K_@LFLfmER(g zjz9z!2jmx?xGOvgWWY0%WDL&>t|g@R#*p+}<1CcB4t!+tjRr3R#j>NpOW@?BMv#Y? zgq-~s%=~jdf7vp9S3=+TNk$X;E>tPGrh5t@)Xx21^^OP697*vxzBo@l49m%{M zU>xOTv%PSNBrr03Be_cjG=IJDR78*-v{~?LtdQOWSO$4n1DQ5LEuM`mLD)jXa-o4w znfP+8-RYC1pR~Ti*;nV_`7P7xH6^@=U2bwUM$Fjh*NDUj3O)iJt}iNgxIn>Y4NyPk zY4UVhmA!}4jiGe#4m5bYlr~8J9uyaiZ*-?wYrzv735*qoba*kU_eDhp>7xgb`epbfq#IOz%7`wg-*rSHc zddIAbt}zrk6hOuwfCiXqAniU?onpp%Y3Cv~_mWgdCC zFn|C!g$yu`4;Ks}(`x~hOu-==CBb-S^}s|Lr$wx}(7hZjP-D9kn42+akh`8J^s=sM zzEgyYF`#?#sYNGjS;PxFkr6yAri_SXf~*_7@Nkq@>7p`$R{=M4$6;^{(z9B>C#y;$ zb9nB2V?4&NY9Pak#djzC1H4+q2{!=an(u_408P3?WL;kB62N#fU{nu)9%*nf2m<4o zO&_*ND$N4kc0#pMEi6Haffg;*AQsg`r;r!!Lq!ZB-tyZ>&M*NYEo)(o$^Z=$WM(9a z8V^bb%3l7nS{vC*We73d?!s_*@9b-^uAjY~8%n*h#rCrMWE@-I3bQ+%emFu0JB59h ze%Huq4r466c#pV>2&6Z30>n zLM9QS5GF?DBYIfGHrn!VYJ~GkdFmN<{Fuh5*;Iz@CcZ7d0VEHP2MJ7n9)h~~e$bIu zIWSW;wan9^*wc^q!W<-D>rBAT!zf%myWM-O0+_FY7&9~JDY8HrwSwzVM3*nZixt#G z{H#EpS>U0f1G}BDDIuV1-?!wzx3e5{Fej6CXNUnubUZrC=x;N*?6e-60&LL)C1IHj z8qAU?x{wXpMr*SKdCpB8fwj|H(9RyW$D>UW7O=6@lq}FkpLRTF<)T`TH-1EqJC55Y zRwIzgD-SZ2sy6AvE-c19j@oHhT#yOx1^3m;xmACU25Ow&&6`h$KS6HqsE;ExEhT&0 zV{VoJ6JTTX$0%RWBu|u%xmL=|lw9b+WSTHxtZ4ERI%M>WLYyAMFc5gujUy)hXk{iR z*wj}+@hSW%z}F|DTocPpu1a$>7ey)^KL)7K<9Y)5hpEWgZ6@a3$f#cE zwUfF#HYR&Q`S5bIjsJ`$_$ac){doWbPUk>6Zs#C6l|7|SjUM#siQt&lI7euMF@2qJ zI#!#Z&P2jLN&iUdIJ`s^ZpP*jVCsm4ru3dtJD^V^6W&7@yUS`5YQt;27p6fSzy(_uZehyW7!Fq_AQDoWub@V45dYxpUQ!D?Y9JO{#8_^6i1 zER9TLzJIUGL$H;5AJ$MeW1RG5T`PPxKnt8|p_${;Vkm-5`o@qINW#W8hNOj7n{8X! zgDw*i^mU~59@OBR;Q4@)Pea`epJjR&mfBP4YGKmaeLEGhE`?l!4k2oouy$VyEiTRn zU;~1?j?gZl=t9;WTS}buugDjAUKFStwxRlL%(&r>B(N zy=YsJ??jHrZ5{tn4+8UO>SOqW_~(_loR#t%;1=+BwUQ-~*|70=NRuO`*H_C~yl-La zs(sUE_T{2{RN!X|b9KBvRT&@!aL`Ne|`QVQ~@QTUv1xi>{O;C__MCNGP^=Y!kSs1Mc|_D-+j?6j&&y>h=2LgwjvQ0`Xrjn(F~ zArFVjE6*uoM91N3VXCTNz{-qGm-}HMflr3gWf2MUb9+sZVYqE!X4`=-D<25?HIm%xw<;YTjZ8RL!}H+I5y)eK9L&q< z4tUbbb=gtKl@V+Oty*7p{+0UP4}WQ?aMpPo>4XhgCN2qZzA?Wd)0C(cJVF@bl}?GXvl! z^sSkj^bOBj!C$m2a$0 z$wf8Ct!A3ih4{8fxRHRTmb~^WXvbjTQ~vu@0R(4nL`94 z6$PU#ASYFd_t@CeD+}nkNHJAiq4(xH64hY@vH~5BUHK+!|JA@@L~xLCcQUYpm5m`3 zQ4w+?klL~v+d&Z`VqQa&WaBjTZ8QaQnj>1#SfCYc5i5;LZ4oEgYF@@Iz7WJ)QG7sy zQk+ZdN^lx{cKCBf4~obx`^zMf$r!~<*DmiWvTIo1Nr<*P+TaKsp^=UGRNC+yw4s`x z!EpuNo|rjF(b=&P7AgGnj4t?bAqzVc7a?~#Lz}TvkDxJxN8OIw!B^G1+iX2aMpX1Y zdCeGs^5pTTw!o7|gE-3Ods0^&G>+GHMk54G5#)Y_DAH^Q`nJ!6dk5ugQahz=lqV=q zWvGrj=_5FRQPE=|*lh*#vrw*8ibVU}4tqkF>B>YGrMBpEb#y`D6NCbCT5b0w$ zqJNM5Z_$1RWEKA5iLs6KRt*Y`$AHgP;4FczjV`Djw`mF~R{K~)R5p1VtH-X}u#T2m z#CDdO+5s9I3>wUX)jRu39#$1bqQj~PGBlVHkSAXVHcbLv-(e`iVlr{8TS?WKOxp?27^|9t~O%f|_yedNf3q=33QUiY* z7ioWpijv)Cl;|GdiD-Al9<@kPc^ya98VQ6%1bQHaSPw*X7-Bf8!%*#!OH|V#v6{lX z-d9x*)BUfIp5w|iU&j>^3Evlf5jAVQF~zA(P(NPT2dW*=6)^y|Bmg`k(ZsGfIm;F` zhOmX420(9u0bh>jE(7|Zs3-7Bf(%hKx-&*SLB^J_K%|}^oD%EbfPG&HaE+zV8xS3v z5(21p5Y_&`*ez2LxzBYiIBCZ|o;ti@j5PSHF+D{A>P1`dz>@F7KvJz`F453uJ{H zt3!20@c9fIiSeWKns-wh&Fk7Z(Y*|tE4MYi=mg+9$24JwDV0uA8^D))epAh7Q4Lt` z<0!oETgw=1bZcp9hp?1eOLN_3z&!wPkPn{#xcJu66fhTZFjz(-0~ucz6sFwgP_A-uLMQXDY$V= z5(4VLL^_$=H}FJpLHmAxH-h-)9NH)AHXJ?!cm6XHBRaEge-1FaQowdPj4-NRksueb za-a>`$C5j^6F7GsKwg!GPI#oyiLB{_UxMG%%cHpc-0xeqC*nrFH*i1l?Gk>cu#8U8 zy0?~OGkg<9Y!v48;xa9!3JbpKlVb44Vm2d23*AgYi^-`Md{Ki@H7B6WhL*!uVpxW0 zn1cx3h1a6IS!Sai3f_VCL5YS>C2-v`fFXiIN+G2mg>5CTI*pG&%fkjV zIYk>6d<*&752O|yAUd1ye=wEjxf}23uEU=19cX9NGEejpx>`Ku&c8aMH-2a;wKC=_ zBWT>1Cn^PnO#hUdsjNdM8p95DrvF?o*uoCtu=PY$K#mx&<~Q(REYb^F%)+4vy>d|! zP!=YsM}=0LJ?%DQyI0<-SfsPY+6As{cRxG*{dY)AtGOA{Ch{|;5lo$KEB z)n z{SEj;GwIPE&vdf8SK}Or1^ww7rIE1GHgWaofG(qqQeP({xC{g1!gJO(;QESEkiR$m|?bhFW zP`CcxDXl-E&T~l+d`ke9llmjeNfWaNVz;n;6L5fO;!C!-=~3%SgHay7+2s2a{ z`HR0a{(A67O*?8ljNp&vM(efN=L2MI_FVbBNPe%7-?sd|QGRcg--U+Rt^gvd zxkc-Fg7qYAm1J>%I>Nr5>YY9M8A!YWKj!ILwHK-o9Y)?2M`G9a*T4+ty0_7BJ8vbP ztkX%YM|}`?;8A9AWWu)E%!fnTLxFJ=aP$a3gSgPqETVsCwFyuUFzxV4Yzn+^2+w=X zM>&q-3`V)h3$AyP7maP8KpGg+!V+1SYyA!zr@WO8O1N}Q`{8d9EM&%^3y>E3KEYwY zO1&F#;5`FNSTqK56A7tI7BkS*;5pZ-E?Zf)MEFeQtq}{``G~w9h@#yVw`y{5v?tSuE9noi}9kYr`9IB-|zd8!hh7j zWsvYCto`#z(Cl3@ewj!EQgr2Ts)CPHsx_zjd9tjewNRWOFoV%uuyC-|wKwF+YYw9v z5QCX|(CgAwy&H{@C>;Kv?-ZZ$gtaQ-*9FU)3}F?xTF{oeGJPoo{7H{lxbH?g5&KXU=+j@oA*~stVK%zM7x62B^vNW)j^h3UfHATM*uzrWm^Jqp z65*?9!T`M6tl&c&sFqc;aO?U6qM zpxTSz>ro1Gf~xlk>1xs1Ml@8R`Z4>(xM-AwK9j!F@o_8)ZxgzTUYTf@S;HIb_1O_h zNN+tX-8=>+u7tQT&IT4NapXK__L~6f>#Mx?5ijA z$Ktr3FwSD!@8dZ3`iRZA+yPP9#~Jq&_-A$~j(dV}e`MTv9QQNCf%(KVza9J?aXJQP zZ{NjH5SaCsOg&}Lyf(Mv*XGI>w9GLgGJI?Iy*bnp#41Np^}?(6Lt(-TKS%J<(J`z$ z$TNMb&06|!oxj&>|694jijn(=2syrm2XapmIgWAa6)GNyx91D-;51G=GSKY`|1pV( z^g*{RPXmK(irVt!B!~~2H|J;sv9iL?Bh}jbVYxI&>cjcJ{4<}_a2fsWW9?(Cu0YSZaFg`e8vc#}u%r_Lglhea1S9gBXwOZDh&^H=Xut&!Am zP=5Lvn*g@XA_3Yyc84Amrz0j=o1L7-&@nN2cv;A&%O}0DCmqGG738AMABm{b!I#+Z z2bfpi(K;$HOS$h2uBg(LpW>txVxnm95NGm)YYFe7EDvf~Ji>-d3BF8OYb$`3>NX_&Z>`fb)BRGZdQGo7Hmg0~Bx_nGiAU8ZIIU z3mNLB(w8yDkf?H$gYG`w+;_`HlqDO7bI6fLH#0EN54&c_Epu`@+|Fq|_&3z1AjoOe zVW}ROV)X{I(Zux&XzZm9U6e}QBWn?|7_=j79Bh!J(2@{lMUXAnTR{TH^ib#$lVH1% zA?k8Lvja5wk4umKX2T4v5E)u(^%-Ozx{Os90GLN1)I293zz~ z6jJsuXG2_Z6^7N1y;&EzOO^U^)}-F(!SyX-u-rwZl-mpcBCTK8_+9BcMg@2lkCo9p zSUC{49DE(qFs|Vl$u{$WFI_6|)1?MKT`I!U6-9WsQGUMaWjt?y=<@v>-Li2jbl(Ge z2m}m=aN!Uf972ObjeZsAN!9IBJCWfp2+3v0Lb&3B-&Lnd?Qk(J+|W zKxC_vep-J}D3Uu^0yZ0^VCY^r>&x(H5fRfXX}fcLneKZ`NprLn^l}Y`i-@ib(_gXK zFSEvB!j#B$jd^w({T{O^Ze(n;`RSc~BU(0lf08a$LkMw22Vp(f_PvlN`-`zSAEr;;?rncVYaWlNN+FZP1p z0SDaQt4h2l`yJhoP5r=c{eeV!XS^yIK~up3&!FS#OX&mYhxwNS3>6}mdB`3tLYMh! z|EOU*SSs6B=861Fx8(u>+I4X}*T|08XMMl4sZaK``~_FbvokATDDU~{mJM!}HQ}kC zKmWye9|VBFdz6mBdyIbIeXzJDGLV3I1Ad4E{7wxnw&!h@puGaRDqw04KueLi+5%Zp zthPXG3#hihXcIy!OYA@h7NE-_bP0|wi_v94x-3e&jV#QA2=(d94mowz{R8cS@SkB- z`Gy9D?{~?jzx--!Yj$3|SZR=9O*2AIF>5ypBYhH8f?UvA6HFK+MiS?S(FX)Of|eq^WRPGek&DGII??9`#i{{fD>H^C?(rgt@^7T$=EdRu#7*$sLCt;1*o zXA!K7;=3lTD&ci)bx&*S52fRF4rAj1mwb2++z*lu+l-x?!cSR#F{RVOsK%@5`EEGe zh$KCz(hM*(e>tMY449PyhQEI%7#xzaeyF1wFhms(_QE%#pyYk^-xD2}7q#!n?YA!oyJ}8bL?U4<&v1V#F!} zJEmejk~T8@8ED}^H8c1D8miwSf|eih1ii%S&2}|!o~@1d;fB`3iGMUdbWO<#+EPFCtbj%9kMlN{5OqA~`zfL3~T92bkm79%jWXd@P5iy^Dcny@yZ zgV9CxHcb($vq)eI646~PxTtOcXK?+sMvAuNpRC{ntvRj$mbL^@Ja6OTwDz*<;nfwv zv7o_rX04tVg`SB};yCzZ1i_QfW-Np-gLEYfT5umaf>rj1WPSu?U>N7w;6$*PxgUo> zKZP)Q+|H?Vhda-OGnnn~an|;GYn%A$o*2+B=SR~$j+oFcz|-soq1>e5G*segU>YBz z;}_xMpeI2;q3WXMwGV~>eIDy{I;YVodY#k7bvtLkEjlGXQ%d9f*wJjR$>y4Do@C2F z@7O7&(Q`yxw@4+try%4?(I4({*A_FabFiQdPl0^5+N`TwOfO8pmnN+?Nq}c@gfv6B zPTlNZ!u_zwbz;ZuZMPz9i5ZD+i>SwJyKGdWnZE3offozua^F1!45CM-n8NXS8x!(*xqwDk) z;#4~PF!p!jHMw{yIy2t65UU2jc8q(p?re%AeB}hMAJ#TY_+$YdaX3vp(8FjG^fB&K z_-I#pWlAeaIbIjNB`jA3CEn3OO_Z0khI)O)oPIZeR4eAnpf5Ca&cYl9w+X55m(q|T zjK*VUjqh=hU|Kb<1eIetaO3fyD<6#roMPTcYFH(L7lruvutZp+Kp!*8Lp$S_hR(`I zi|JBNeNYiYrXK$3huMqZX+G^J`cwaE`YEm$?_}^KMJirgT&xu@?p6#htJ1Y>I&~xZ z?q2CTvP;AhWI5#tF5ZO?a0T5Y2jJRN-gqZ?rHNimC%^w-y10QZo++Szv5;P>YfA&{ zXnr3aXn>FX8N4Eu2^>eXtk;mvpOH4eTnFs~;1Uo(%vT{yXO38HVevjn_12l(KC#mf zX!bf8Zw4Pv%G4p*n2BAMY3i>bVFo0Gg^$eC!xrK*U;trD+lTsEcoumK0$MEk;97kK z)>btAc}34hs0bDW%xtribMXc!=Nlmbvc!!jX3>5lAx|J9z%~Y+?c}2ttrv~nxLLr0 zjHQ6M4&XY9caM1UiSOZ3E>>o4%=vmJTWR8BSY>`1gPg1%F@UUdR)80(ujbHk>O~x+oNeU_PoefIywL7+YFQAuJ6wjdt^srOk2HZ~wyxi>ZSkJc( z#?XYu&J5bn$j!chQF_Q{cNk}hLB-BJ^tSn{mK7mVcEwR@QE_b?RM5L2f0F!S>}^=>4vIfK`p{)koR$wDimnAM88Aj3$=tPtNcK=osbp4DfnPp#ptL_I^D8U9M zV-64k3{Ec5&XwmG7%bY2&cy;`cD{qjVR^6}}MJVRBB)ddkxTOQN(!d7AJi`!LgZQAX`2uFt6HL|DZT zxUQN`#GEz`4H#Caip4(cCt^yF<50Dqh)>sHZSfl*1H%zqc~*#J#=@#>n=~PB8bo%1 ze8VrsQgmHiRk;!mrhff;Lv#WZx%FfJkGh*QPuhS=4BlmeO6KE};j~3(rjCxQGB!r5NG%tJw$eJix z?a{JP{p9s3AGd_BLG|(2s(nYf8lS6Tw+v{n7)}>ks*1S$O4~v{gpxVL5^Yl2yt4x_ zc4v#BCM|5N-SLdV#cRM6ZLA=l*rUU8NfzWF^UP3+%cy})Z2ok2xB%~v_s@+!E* z{+$tGJNTV%iZFg1T&7*!~@7Q~ju1)@r{G0ngaKg8^mF*uMk199Od8iC&UK zt(K|B6T5f%5lHae`vJyZVE0au^u_KS8YC+1A4EQ@&EE#jgXnhO5@Y>#7=|j2rnB;z zm^&3!>BRcr1IUV1_I$f{Ixmc&5bh|{?wwjir%f2xy)z%*(~1O?n!cn}yaTXm`6z*A z=6(uiUpng%m6=U+))fsbH;Fi;sjN$;(19``snt8|q9nAy>KzJ6G>zV&Bqfxm_uJz4 z#rj=lHSJJk)b<^X^Ywc2dG`d%N$z4+Y~LxEO!qN>M&N67)yeSH=svwGmm-<21w8Ny z5g*TGk_PZ(oncb)nR)i_IIh#YqvM(*Bi8RsO~NGVR}-$W9XySUjp6a!$4Xtj=!7qH zZQ)hW*1yHrt1fP3r?L3P`;$Qo6tG?aLA|5=5N6I#A&;3Fbk%bnXsBaK!!*2#OET(P zV&F#SvohX1vAZfg3@(+C0lg%;GA6L1^`Y_+TUA9KSy$1JYP7~$2Y-jdB#Kzi2x0gg zjbpT18;9#iN^pXXDGWpAOz?yb5`8F8M=_cTPww&`(%UrKFBjzaz!n~Uz5Z>D}#-|M5oS)ExATHB`VIT`O;#^Rojy` zpT{K{I9}0lA=X>dQSWi@XYpK5`?y#8SZ8}lLZ zjp8q7Tu!hI)2$zf_0oD^fRk?hIEw`O%|}@zkehvRDc(-GoePm0canCHK^<0`S;*IP z^*bzhz+jfKoFDAe2T;%boF8;Sp03vP5Wv=_O5i#^R?6Yyn|!a-*#JPhv-xV>9D*w7 z@e@E-CT%$n7dE0E(zygd3(<5%9VNVlY()fjXA9MdjCmt69NdJ7pgyLM6ioPQjBUt- z3B?8G%z&ljL(6h#8P1w)M*a9A^H3jmtF-+pz~r`f-1BdQRY+a)6p)t}N0s!~U2CQKlZO-DYpi zqS>OZOi$+`w6SK(Iu4C6!<8oOm;kFwR{JX86!NIdYLg&#@GjEkVwOXtSXzS zo&18*fSktPK9$`d>kk1x7zgQg{7ZumpsF!hOS-BEnh`n+g?h5o6c*a*Q6?etTL2>t5S!7_Zcn(^= z#3`>@>51osEB_%S9<&ld{HYaxpl4_rm@HrIluuM+dpu6yrwl%P=i>~$6_F+n;*fX= z{CqB*<*{MbUGX21_&rhLSHjQdRf%UN%=(o^D-S``75|1GXXu>kK(ot`nKMLX(dBzO zLlop#`8)}wy&D}S3h*Z%jlPmY(h4dNI78Pn`C@12YfS!71X_6yURT^H{u>zdeR+Mu zb#qjR(8BK_w?SuUhX*Vn(CCp=1>dV;S>#GbMGtjofoNwQ zBawJ8XWy z`orN3Jt<$No^TVQcq-+1BY|r$9?uq0q!+#LajrY!h(MZS?@Qo{9Hii!S8NM@fA}_x zYw=PwBO_dR4uHk6zKpNlufnUa*iJbv9A~~SM803+T2JOf8BmcqQ7*LQwFtWM6xV#Z z3^@?l(K}wy3ocv79D5z$71gUp(HAoR56_%< z@tu>lKSHh>AX35$DOzVBDcdBS`YdSlbyKIWH0Q(e3#{ePFxe(l#k!!WEfnu&XJ;uQzR}OL7 zE@%MWlr1|C?sbBHRA|1j1VuwUqp=V(b?`^zimSZCEb31)uUre}M3vnSzleyqf(85Z z9qEr5hT$aP!ss%q?Oq*PAOb(Fdl}_yz z=T%JGv|ae{6esS44;M7sJ9m{!JYahaC9N~t0;=t%&0YR zQ0sGz_~O@qZw$`5azt01*PjQM>0NHsOykHQG)}gFySe0@1{-yp8SjU8}=SnE*|FNp(~^G z&Sr0MCK?WAne=W)@$_N)AulsF8D}9TWnj-1H{HT|F}dkr5^g%^noS4y8cynR6!{GH z8gD@Q_Pqvk9I1kb8MNUP&?5K~>fCyx#GG|g!6X`g+nb8n_7wfEiuV*tf&WlqPr((G zXUJ&Xc;eGF?3{ay(H*n>qf4--&;!pb^0CkM>@ixX*VcQCo17*CMxZ;G++(nToF=Ih z-hp|=4IU@erkDlC5UzJI%Hj-yQDm>d!#NzDF^VMNMxMD~@%?+Gjmgf92aDwPg03mX zY&@8rA!O~^~f?vDU(j@`43)xx7qawtYXTU$F~ zGmGbb#AdEfJ7Sa8{8oH}(0Y#X8XYIbJsbQLxOZmduoPb!bQFgWh4wBS$o6Ao_QN|6 z3->wUoKVJb2v^KHkUK&Ud@7&Wh{~(WfLr^1c!}uN3sBd@`caQ)U4Dh}PhC?iLHwZ`qmk?`DXd+gLOOYc_9vEe z6LAiHfe6${?5p^}!B~mI&UA+#TocF}pqcO?yl29P<@eX}`y2Uv1iy`&FvwIi_lt{| ztqiSa?puF_QfAw?`W!^@=M25~I_$x4Hz-~&;_K=1IuEat2T}U@kN*qL6DVU_&;JG< z&QM+IO)8$bjR#uh)HL7jXIuGI&vb^axDFe>Q?*S-PpF>Y4E16QxO}NI^ht#1Ot=bV zCLfJ6x}v(m8S3MPanu=F@Bm|Tu46MNAI_n3&7+4RjDJv*<_spk;YB$x& z?wbc_*a>eI5PxNZ$vx+H1jJvv=RCqG;sycf1s9)W4Q=SSunWrimh@k!sokNe$&8bq!)mBc~H3c#z3eLnkQHW9J zy-YfI3b|A>Kye;WbO_-p&hiJ{?*m6S_zR#ow&x*kd1x7y1Q+71kSXrwXPjkDCNf(A zHj`yV@F=t4c>))G_F#AM@@(pIjJDXNW4SX08=$WrI>BVcWq|lmd zS>>ro7~F*!T-AoQ0|-e8hm6yk-4gY?-i765JqwNac{Z}`jkZW#0Lt*`z&pQ(9Ob~) zwJTf|Qv^0*P7ZDYJGjA<$QmO}cqcGb{YeBug9>0zKEWZ-oGI}ZM(h*Z6i?58KpvCP zH*ZF?B_*}Qgm3A{D?A)Oo@BoQGJY7vWRPoV=!OS5g1>_Cj>J!)Uz73^Woh!#VX@4k z#+v|HG`_%Oohe-k6=9%OT?P2!@m*{>3(xeM2$@ATX0d+W5%@5MKA%6k{!sMlhi?`H z|AE~6@Ga3h#wN}mGUh4)T$w|(Dy~c(`Yv?h&}`^*nPVH!eCfeO*e?dj95qR$R)%Ds z#Uo+8#@`ty&RcN$H3y-3{t`qAPps-GtAK>a*%7uPQrcZd2X#a&XrPTaxz zkHjtK>JRBlzWxt=Db%}P!K}+2^u#&-6EMxs4HhL}i%r^r2zH1w zpk*wMK<#^m`HB5N8FAu0Lm%1@^KlQR@_1V@#3&2V&Z>VZ;l)Jwj+#YV_~JzPPH}j= zZ%Jmbgb`rvNY@u}oFo#1ZE+$z2NLD%tWgF;WS}w-^wF<*mXWvaGor7SMit!;r)8h{ zPBxFMZ=Nphlg}XTG!C|m8QS`cz0$?8kWz`qTRRX_(huKwQ@3Iqnh{^W&kYBcpm@E} z6BV=Ze>ivir)G=74uxT%|f z_wCHrTI+ceqR8=wsKHP;drzEns%GqY2=g|=ERqAO(?grsG;aaOfwbvc;o^RV@+yT4 z3cywI^0MPK_Qc@SdNb3D8V;n27eYo>QgtAh%FGh%G#LrkE#i<7Ckph4(sAp2yczAF zMRcm&tmRIyzbjSn18 z7exim%M6Oml93$lqt3}yGSC*mFyB8ZHxVdaY7j=1qlu?bO_irLLU1a?6T%k?GxMC5 zHr#N`i8;{3rLqN1w1|~Z%3=f21}JKT2O=16X?=qp4a_pJpsozm?nrnk459(U9mQo2 zL}An6$t0fA?)7-}MO%=xp3rn_Dkozxs5DycxHO1Qas@x+W+B!dzW^{Cw_>eE2OpY1 zP=25IIO_4Eh-Y}AG0hHR?Qf-k+!mAe<@*X=?HFxvt6=43MMsMo2vCT_tr)S67F2VL zjuygj-wu z)&(l@MO0RB8-ehPpE?}zR>O!?63y7R48WkVj z{Kg>B_sL+K$OsQiNZzF9)_D^u=;V5h?DwiW9$%gl>b34U_T?UBxC>UZC#rmMIa6L(2WfD&|_rE z9sse>m8dWPhXP@6L{_b@MX@gUDCGzZ1PTknVQFwE3~AL8iYC=pjJmk> z>VtS+>Vzk8$PgiSNca8Cgqj$Mszj4a{lAQB_UX-$TS`T4OCx7q!CSoCpjjndIHVZZ^<|zHD>Mx zjSj%VhzAe+>jJI#WYh~j@>1M0@DI8$Dj~8zJf!I%cqmZ04iCl!b{dZCaxEH+)*$-| z+eSzlv5eDXM@z&zUg8lDoFK1FcDY1^<7UqYyq8Y>0!9BAV=-@sV=}odZeahL0Uppv zP2rj1KvAxT!xYCW{W@^N4)4LjSKTOCZeU`6)>T2dfp8uA9!~fzLycxIvOGDjIG$??ITDIIi$4sd~K9yT2${4i~5MrRjn;Fb;uvsUz;y9W|OK zF(ibB43)w`{}W( zXjFpyA~*m6w)rtApMUAnvR#Y9VXPADbb!}b%UU5(Cqyu#LX=JId(e1|e6oD%#>hqp zW)r;`FpaV(tA7N_QTx|yo$#l?6Nc#@Bek~dBUeYV?2%pv>T1se-u3gbr}D!MtO876 zn~@3nA^qjUB`hOhnX{3d`8ugHkneg~gUAe0s6Q1)v{f$Do3Dy$CzCBM+`({A9a}8J3WgibzEp5G$A-V4$#b4pJlxWws_ff7C~rT{+vZ%#DOAacp@kUsVJS)3iT@|q98Q9 z1`FB3*D~UFqKN&IQAFS_Lv5jc8G+KJxz-L(VUnpR$)eR!5?Me9w!C)OkmEBm!kNW6 zz|ywMOF=*WS^gN=Ga6Uie(Kb0M0o;|F-IBq48oKJIO@3lxKb|BP4Cdjiyx*rt%U^) zmRJqQ6sIEe2;sCF{*oE>$pi<4xR=}qxX9jK)*bOFt&YVsDoqQ~Fs5>z;J~5Rx3{Mo zc^a8Zcor@B$TX>F$M=;EUQ8HL4*ir{gon#yc=RyCWG%$nGg%~e7&~DSlhv+vAbr&GnsX{5NRvO9qUPX_jHQi zMTobRnJp2=KDB?tj%djKW0WHGWWSPnCQy=DDUVdR%)2m-ouMY*2N;>cjw-93z_2TK zx<_*KUg`kk_Y>}iWFkb(<>sDhTJG4v`Fv*T47eU7N6%yQBF#aboZ#wQf=j;~*ag0*dqam3J`BL@EB9gE@3#fH}9AssgGQA4aI zKxDcYG*M}h5?aUF%Ubn$CcYc)izRT-8 z3g{1NWA82G!El6ma7C^)faU69B-AP46AS_h-sGc4o|dpR15CJ|HsCT!`f&&KsDwu}1g}?gib{zoD)_W4S>cxwMzV zt7Qw-9cGr3Ya9T2%wpj14j7r`TK{#(^G@Wchh%Q7=vAmL&%|n8Fv}_@je0pN7Qc(L zYJy&GDm0evRm1DsTY54Z(T?+QPnw?#cSk+$*5ffpjaX_MEJ*Ehn7v!jO|1nUvE4}5 zn2Zb*g$)^e#~Kb_fU4;Ex|SLq2tZrWx7wniVT(Hp+KPUa@Qjw-nR@;K)^4Pedb2BE zqd`|%kIK8{QW+v75yXY#m1J6}hfF9Oay{$Tg|S6vD>%zU1ofF<8&#{2)f|6irqbDfTK zv~-@$WqHr#?tM3a_HoPoqch|_uR*?)`}~Ty=@vxY;rCnDikoSDP26nj>u~WA zr%BDL^8E2=|3%sCA&f?eRa3icHUnGVW@_1ceG%x$_XwxSBExrKhG|{LLYn-Ane(s{ zYhQ{fneP+|@04#FI=EFKPshmWGdOjP!`>pXPhip}Fv&0@>HST-R!2<2{_&l$Ll?=t zO`xpPl&UvbaU*7U17Ab^PQp3j&8Wj&oOcX0;^VCC)VR9|8MaHo5)yt3+6@U^P+&#y zh6_Q#@Pnk&w}?o2s9kFg6ARlH($QV}TltFEMvUT!i(QUDT(zB;@aeI908xj zkK$4xmge_cMTuu>J=o3)aO+h6Eb`L+iY^$mmYoT-3p{#0!_z0pMBB55uhO-#;kJoJ5G>NHT zPGtgCCbv~PS!N$cBeS#UiV&Nk`A|sc^{QFLT#mcg-EsQlMK#oY*5Rn*7V?`m3xxDP zfEf7!9{yX7uWMiU)NVjW!4_Ft4CJ^}4aPH~zn$uRu)@v42^ zO)W<~wa>>4l~abwS2J->AZ>i*CP@ynQ*`5Qt$u9kCHT{`>zaHHbsmmYOH{K2#_UVb zC6TbC=7>=oIaL%#wo+SRbgM`r??<>BIZD@XkvRu(oYLAmjLt?K?`2!grCTyzbxTTC ztprAiM1v$>Ex9Av#z!$3=5b-KXqp7?k@a}355khPo*ld&{>A~2aVbpKVkfy zXO+~W{5i)4DIcdAAxOJtqrO6X|y<%^=x)_Ec@qfCLrW5Rls|D=hCiC{?^u*gDxHz zI0D-G&U0H4CQz$QCgwdXM-SiBf|JCEEI2u8x5){A&UmvM6RXTH#AF+GaC|_kZY-hk z!gFh4EV9}ZMW&g!+&Ijld=@B{bIY*LU=!&*>542S9sA|U4}T`PsWGvwbBiTw$;W(F zoQt2ia+fmm%Z@PRSSDD3GOGI~$cr6<#Xy)z7hPhQ#U^f4!+r$1)i2XBG+ctdT=w)=*9E(Hg$+J#SbK z?`0X`*;104*i!3dk!8f$4e{AZUgMT`9p5o|$cp>7gduy4B{!^h&^J1ZjUJLgZoCl>E_6}>Up({66n{>XYiQ$VaKOW0L9aJRZo|lp9tDPnX z-Ha?2#FAVG_s$|F@LP=Acqh}$yuliEWo^s_)>?wxVhtU3-eQf*thc_y+QS{z_zVnW z_-WF7o7^#Vadd|@-V=9NzXikW140YhFw1NAR|83rQ6wYtZHpCDn26f^>dYmSCmbv_<@V}Nqpsi(G4=Idd=~;4^FRwwq1IwT6Q-HW zkRmr%>-$WrL~?VrW|WcJtCP{>_G$}Y>2iB@(%zBi6J(6BFU2G_oFoHuWC_fB8cSg8 zXHJvCF9}OvkRg{2sM+f6)p{Oq4%&@>I#9cEZ?*a8Wrk-OM{JR$42^{Ol*wkXk;qAG z`)ni{Gkj(!(0=NOXvkN(zN!4kMPewUvldjN)84GtQ2v6Z64(+KSi>M6o}F zDn&Vx4r$(JlX?*G`!$l1E4&Vz(3vy6fs15oIL}J$$qbeYe~1i~TsdR!>pww3!o>37B<9-iDsDTJ2<&LJ9p*?JWKg{3yVqsHrmUSQsE4Qx zh+m+}-5Q81#Ls0g1=tMZDt5huQW_Q|{x=+4KqCQ*ae3c)s6H%Gt0`L(jGn_5R;&sn|CD)9-KG7pnkLzTAcF*daith&v$vh1sa%{N+ zqNw`G)fN6Rz2jIN#BqhZ9nH-Z@_H6?5D3UWl|4qKXGu3&0g)LyNJrR62?{(yU z$$^&qq8(Ei;=_D+0ROADd|24*>2f_bos+5|-9v5ZqWj{XZ&m$LXY*N)O9A$rjZPmB|6sV|iH_>4^m;#`@ zZi%vM|74Uc_WT|b(%;FQKLNIo4E-q`9Mk_y+;r;oCO)02=5%d|9e%Up*7Q#T?)*9L>&DZHJoBR>oxRM>*J=rc?hw zUcV+UG=*kOAy$)A(rd)bF)U9;!ZScxjTfGYR}5;59bSO*LGyaPyppWGTu~=h4j{mh zMRKRfLieJwr#&|#AYs!0q?gYW{G{KR&8aCCb#M;D3ylEmLz<#G28av&XoV&#(%^F9 zgKHlkCuna+Vky||{Tb}Wy`h+;fh-AmB1|>mkL&dxSOwrD2-XItH$SD`5@!NPS$fxYuln$Zv z{VNa$gBhcC*b!$CS9ll0dej2B&;vMlE7|{EAhM;S*N5hvuS-^^$!?_4w{FJh&n)x6dNbkeN{NfDe15lYwk8BB{19Y))00r)1o z3eyM2yreydj)X!~FCsy=>yYGU$v}i;m}Y0tM9!Tt>uqHVa9FfNtuD}=&d|Vh6adH} z4VH!5eAGZ1@a;1A4$OsbR|4O~iZAjfe&cZE8!7O6BAS)W=g{zri0i9a)9_33&ZVOL zKFRbiLHdud&D-l&YG8uQV{YE2oeJv7LNV6#y$M)DlWsi>XV%-1{ugdR zO5Rpfdmis8`ZbZtwSJ?x35uSei2F`3M#{x#IgN$b60NN!hyumx-fUNoiOrZnztG zgI9M&X;g^^Gan1Vss>6p5D1ro7)N9x&GkIk(J+!|fgux#Mft*9>I9UhIzCZ(f~A({ zG+F(*bbPwfQhUrxOd=R$4FJ2|Wzm9zV5hHl8j;dC_}7b9qdh1g`v8-8S4zmf zTS4~Q3bOxJkX2hj4%iCvf~_D2wnJdZ<0({St%Dvtrtc?bI~U>x7@fT0?fzC|38e2LUq#KRQS7zcF|xeEPv^ zDPMskH_W^q<~oDN-6jy%QMYoo3*E{HxK;28NXYQb5ILVRc zJT7J)h^l#*+>nXpwn%b=S-El$=Qb3-ZeJN&SOzjMWgxvGYRW|+rrZHr?qVqyjY&Dl zSHk5Vuvifny*z$>Hn<^Q_5sd0{3E6)#9)dt45o@bF;(n=slgto8tiwl*e?<6SHn!x zZK`+gIz@QGec0MZ;Y}6rw}u`HzDPpHk{+Q2`|1$-xiSBOuX5a3i>g6v{skiTP&yn# zK#T%5WE14Nv)h6+IW}ClookZ8oPYb{GH?aUrHX8n`)}o&S34e;0*{vxkACPeL@|F= zIiVk=tyURN&4x$WEa&uOh$aRW{S(2f8G2ZRBr6d7oO-Fs3p|6CITrzTu*P_`2C1U+ zan8%oTj`M^^8LQi%ygjov=;F)nC?TYq4L8;tV%_d<+jQK$DP*s!jkNL}!-JRF(`pt4WRZz8!PU|J;IV*I@Rfd=7fG9} z0JN{`gx0$w&lBg!Q?u^KM!1#xkL9h@>oUkDyY5sPnw&Usvdg5PNrY86+j()huQl$sdH?&~{ z`&|x12&6S^TSx2MnduypFivocc9dWNvIA$>b_FAe85SuHx7CKqT(W{}gTb(f)|Z+R zNj?y~6slxMzqAxL-r~8!{{^Dh8BnAe%rtlmMr94uaaqGQSN7=dmmAcB z53$wu=wH<4Dvh$0SNp7uMNFktLK5o#f z?g|a|>Y^+R)J|t|(^8a*<@aDLxEZ7!DZwAuhk`#n~YFg!j$&T8cjX4N(`?u-04>6+IMcB0 z?Rbgs#D48U(#zNzbR`b=Yi5U5#KmL?w>vV9yH08s;BEJGTkSdXNb+_jku4X_1)LNQ zxc@+&!yc~d)sg&1xE~NJ;Y?RvhEkhSsj=?*ix5F$$q{Y8hMIXpZSOduL6EQRs(00F zz(&?7xFfw8v22S%E@dHdDw*-Z0UVW>`)Pi#rAM!)NvIHjS@qoZWvSiIi}ePM0?v;C zXLC=Fk8g6kYB25{{c8%D;O~|J@HrF3;ACh7Hy|n+k)07u>~`LLNV@#z zv!Dx4xexD68Ce>YyQ&>#DN{*OMn9RVl+}2*5=j$`J6m=(q`74l(pZUZ_GhKh%Ts&2 z)zZjIO#=Qn+cjPWL!4*jF;<+%3+BT%HdI%GX)pvn?}`@iL+IEY*^z?lXK+&d4su^M z*bJx3lOERTW^%zL@KXdy<`>T4+_OQPPV)0iem-oBNqUKwPEEo6F8c`1{3rU?s?+P0L@+JmDGqvmmPHp9lqfsZ55cMECQHap;WA4r zIF%mz1(D`i>#o2>`YRTA@#=(kNgERoZjqA{!UQEV{%2DkM7lqcreX#q4>NST7cEtB9FKfxfRsfoLJ_W?P+QNpL4c+foqi!HSMIm*&QQ6my0XDWf@ott(Z6Fhr5D>oqc{pO3cGtR?Pt4sZ+Qw-)+xwI75}5?bQB)Q$ z_~9dPVEYcg(&$z=FPDLg?z_l4PNseiI1b*6>E(LlL%`_?v zyY)ze3$n7Ln#$Mt-q_`64bN`bg^@o{a4#%&KQI<>g8l?Mqi~FKx1mRvW$o(#%e*Y=I=^YVT|1yYKe~=@Z%toZ)Jo%PSok9m6kYZWZ zipsa5Cv%QG8)fh>i3f3D`A|kqjp4!km#V(V-S8q9QEIGYsqTiu`TiY!e>vZOrte4a z{SkdXlJ8II`z!eF&xY$!4kT_UatqzXE5RW$uHg&VNQb-OCY-1@J{E_$!F$O=_dBrX zr02p5;F4a|zWThipuvIoQ5pYdBnmm4>tMiXlU8g3^niIk;yfmyLw zUrU1fJGa!bV&)mQzYT3dd7`6IUeyUhhgDr|^?K#1l@Q9wch^*EQR+2QsSe7?+HVzq z1)gqgA60nFS78+ar{Q^7t_a&et0Amly=SK2`(~Mf%{SeAYL`)+cMo<-qdBL4G!64w zssM8nASFODfQ)9V3-rsZn8`QaYU^)hYkfazLGBkQul_gSSH>awMd&1p3$z&u+n_oJ z=gJ3UCvFqP+DtZgwb%^x$L`Bi_AAMv2j)#>Nh5Q>dB|&sb3pJBaFN*IBMg zA^7{>@tlL_3_NFEAh3@v(0l`>DQsGnGe&DC&&Y&H)*>q{}kfPe3;J*@L+h}rfcz>D?VxS z5VAMs-VNAF zJcm3Bw|dx;O8JD!ApVu-SIXTGCa;up_J2>MyZ{DDD&-FO-&-kn+W&o(^6{9b^k07k zD$=j1l)KvItv5yU7N@Fxi|DVMw&Ay|XWNf$$olfJc-k^;S+)!dx2_Ghu8n8ir^AQk zSsaMdiq-f@&RTVJfSJ#kfX#e10ygvEfzix|Bh<`?Bh!E2;jA;)yDiV+V)M0SZY#Wr zytnnt#OwbR|F&qu4F(^(T6itq`Ph}j33%sY>9MW+&Ouy0G}g)IE#{dEZrf!h9y9$j z)6euFs@QmTH@6mij^+Y>{ zJkxiZ?zwPT_R~EqW43U@_nPCGEBt%raiaUok>rYF%w4r3Qmm4`RHVHmFM!YV_wqTp8Q`2JWjjnu1;eR%dy_ao23V~qxACWr*%KyYdps_$N zUGe`-{qptQ8l7UmNVcdVjTM*&qHZNL$qC1e6m;+zbRVFl@=31(zJKTU5HZg+j4$-@ z)o(#3KkGvSN5rW_HlsAUpt{&d#VodR2<1MtURy}q?v`nM76mI^jv-O-XX(<754EK+ zUPjj@T=Jo)-rh(~bT_-5>HyFciD767ewWlKthaOnb)GRjI0XNd zvE0_*82T2cNpE;GKL6Hxk(bjXJbWem!H|#zYizv-`L+C><+lEgaBt(AXnUvE+dwy* z#JB$qQ}|d18$zDGxHWtfrePikfGi=7>u|Bi*^quwCz&i z31V)zmcIRr56TSuxJ^2Gsh5I={~%6HqJ(nZ#~j}Qq+zs0YQ-<(H;Q5&HgjW7nt@OyS@3k!S%=mV)i5=#21)xIDt|+wxn^} z-If$(YAB<^FRM#lmP!x83$+cw_E^^J;{J3HXd4)Hj+$TYozPwx8*Kk0ea=>sn0T#e5g81!ryp6|$E6^Yf z5>6W4@iq|F`X`F0mOc5Li3rywBfQ2&a2&S=wP2PX{uA`Xm6Y5%VR zpQogqm}~eUQ~_UCKS|R}P6k#W5F0uP43o0M|3L^8W20HXHRXq&f(tRZ@Dp&uD{uoG)b;QSxd2#vxD;<$NZo`ms}6JW{NWn~>r6D? zHcw9)4cp^WHpLbD6WgkX7hZ#`io4|@DRvIumP4*C9RXqNI|3>qP*#-EP01dvR3;J^7G21fIk&1+`N| z8eF56<4a!AZ-fBgVxL;U!#DrWVnC>PqB53bLWn^mnNYj~^yto`%oo z&#wIW1}@~YEf29i@=ooBo=n7}-V7eKY=H)rxR*za>XA{?S6kYz#42xIdtIfbc`c+g zwnTF%jrF0M2vaVDc8Oenj!|1>SH?5NK}-t)A^E z?DG)QfzG(}lfl(_jPa+E7}{n0W%Dzj5_`{N_+`Q~m4U|hfJ@~G7av-vw9l1cKJoB) zEm|!ugbdvXqZ>E;4iG~}+hb6#t=vQ+R0is2&67?=S%e1CgYO{+a=01Um*~h&W27A0 zTOL@^Hv@dN;7Iospto_(UgjcA=NcOjEpn(WC= zPH*mkcn8}Eknsmgdc`WHT4o}h4#G6-bl@9;;=b1F^`Ya0cd>~xFxCZ%I!#umaT;EG zb7)Rs`UiTTw$0ls0hpyf}mJxG1b(qJjA|S4`+SB`3!GwCHww&$7N! z+YWCk?OK)|%X`_ltEJmQ(uok%lbx?Kt&>7lYvyIW@T&l~0ikIa5!m!Xp)LnW?S&#g z*prriC_@nYTHF~k@rb15m~Jpo{|E+M9amHijr@mYM;a|NHydUUx)mD|_%v+jBlzjq zP{O&U@=}k34?$0iQ9Coc73vQ& zlVw=mo!v)fOzQ>9IpJETN$h7_wal?AyaB7{c(hBBkwcD-DO_AApM4@H6AN`x6V%_2>W{VW@bNS1&xXhJ7Eu5rIIG-YDA1`LEZbJ=89bUv z@+f+N8IZ^F=|qSrg8h*zFJ3FnWflf{FTrZ0Q#9@;CcoYcD@|_JsV%3g6uSv>TR9LN zd!Z~GZi470H$eV|;R&EI6?TB3|(xNPN*Ah&CcFM0;hVy@(R{ zb$z0}q*BQ}5CQQXh(+lhsJu!B-NJD3ity{wnCe0gq&x&U;mPn}^Z>}{uF6_Zrq|oj zBhxOv?&Nv3G?sH`i%hKD-@NejR8KFK3&az;V5w|`=Zrno)8bij%R}WMSvsPZ70qkM zmd?)ly{KzW3s%DU7}&Vm(mOV|$6EA~6l|Nz9!pA*J=Q>duPbFwvpw@(hfqm3HqpFC zptljXA8_$leobO^Nm#3ZU<^1LHN24wCrra--n$-j$$>73dC%v(=bL%Y=e%cRj%Un! zEF|p4)Qmx=2*->(L`^2PPS}hSxURzP%!Vbz0&pQCbG2{6We4M#$;@do-wmurIEaWC zUbrNasVy0Q*6|~qT8#DKv#yWX?2OIV0_}P&-tpLw#I^@5&&p0=@X}e#Aj^8j^PJE_ z>ud8)&UkS!W=m2F_jbnQ;^s(*!!`_eWH6#d)a2-dH6y8Ipe)Fs!B;c!#bZz>D2*|w z3yxi1uL3{tZ?V1F`bIDhmf%j4k;C1<+*c3x*I)Ru6reCM%Cs_WT|GQduPs8{03t@z zqiQ>|nU84CY`pqO#I(sXo8A*5Ru7+$@rr0+yc%P#!ev7GOu~^H8ShCpKmZ&@Ms^leL-=vBOCR|3KSz;#fq6j*iAZfk_FcsLK^P!C;6l5N>VGu zAl3%bx+;!1a3!iZaHSrPh7?0Lde_E{!?H!tKM~i|PL+Rb#;ox67iSP@&w@zJhFj_X zB5oKE*wzct)*Zs%Y-$22OVKV z8~X?@up$>=a^dEvxLXg*m7rq_ zAs#}uc7(U$1v_JnTI;UA5*@aF274`b`8bRAf}Ieckw#%LAYBX`04l(dS?jX%&4?eM z(am>=akP6U+T9G=yXa;dYi&7dzYr4;4q?xPVutL^2a!$nWN+h}0k0kEj&#>QL>%6| z5{j3CgSUY}Xv=k&wd6j6yps*r!qX}vt<&T$uh(Y9Mu+NuCH7TfueTSVFuUbvSx%Fr z!M$i4_HjV)@5o4av$YdLohF@#Pg^@n5)w(sg&S9$CSfd4D8Mlve96KmOZX=PR%;h{ ztCgpZ+n z^3Ve8dw%NMXan4|fw@X*EBbVtDe~waaTS;04xF~?_QDtqPEDbchuT-e6WkA0TfF^u0-Z~!rkygrNh5GKVwJp?RL&#;LrFsJ)J-%pG z2e?Keud{1EPD;qUI<;wDu+pQSLs*msPjY-IaZQg+;)G(FHr%R(5RWSdpIvETwqzFtgm7a83&qJ9GGU@Rw zBPbKFcOnn%rWmB@wgCwy8=t)2hLdZy5WdZHHw2!H6Rm z!^j_+2PXdkeFM)C3>Be?7GHdKGh&kbW^Duh@KP^CUi@>KlGm=)UUcs1Fo#NsaT9xw zDvo!Pg^c|ScdO!RUCGWaj(7$~F+u)mP{`#2F3^sXVz^QClx|Xc+!LrYQCMG#^g${i zr{Gl^z^wp66{kt6*ob^*U-46i;^44b_&n;2x?)g7>;gIp)-II`(u_`?ddD{^T&DH&AFoT?@noB-CRyf>mVwh?9+9nv@Y`a}^&Ilkk4j zm_!*o9_B0BLP{pY!rQvA4t<)yV20-7AlSx=8bLWrIhJE6_x-nG4DAu#iUuEiizS~~ zwkl!?BK-%(F2XDrYRgVbark@ByOB~uT(#R#sQ-jxp4lsqeKDl5ea+lG&5nX0tZR#UPPRq>`d)!ZP4-MFHHz zIWCc3%*NzG=F|i2b{UniM9)rg8ky|%OTC#QK1AS4OiykaCwx7*iD}GO7#on4?6A#27yY@>8}%MN#*T`B1KHn&MBOV*|PlAfFwUW7XHFIt!G zfe@@qcZZXX)}VVb`nJ}f5(#%RV2jubs&EO)TyzQg;*+8!sH~wVrrrx$nW;HUS!9-YjN*hl5N)o{)W+IL zGMBGpP?HfZK4~}fVSS^AUmT4$PqV9x2{>1SaPlRp6L-1UX)ntaVL=s$#~-DcY?P5s zeGH>epNwBp`NSF!ml<7$NNdZh*5laWB+#z$c8rT>n`K*h{@QX!dq}a+wxrwsr61}> zip{e0vmwc)pSShWuh@ZV&iAv^#45kOme+b>$oLK4z<*r!#jS#)!^z_ELVY@}RdKpJ zw02|!_ap2>Vk3gC&&Z`dwuW>u{LwLUVzr9FV|ycG<+dO5^;`SX5nN_usy){h(b6_& zdD_6b0<8Q})9N}++uJh0GAz1;iG&N>&EPg>f;Ao;{g!_)nv{QLEjIveo4JNBpXF2fE*pxO{|No@%W;!zLr$b(6LDp$$Cy`cPz>v&rW)y`=v}|dzxZBI|3v()cnnRC2L^Va8w*%Vak33{@E=`(k zO$kPH6jm%3u#RH6cD&!J?A z(TmMKf-+`|MO*g7iYa~11&F6{q7~C;*@4Z9i42m*8cBGkPx=|G+{A-e78|lMN7wcd zECT<_!xvh1j^WFOB!{nAcCJr5c$r=m9UFJbXvU9LWFC%VQ4LUC3}SmzvD%Jf!X}Ki zTNEqVO$Biuma(#vX5qk^*sX@F%Cgm^*q`=fC!&3EmdkpDP1j_RW&{_wN4~uWw(BgV zu|wUCakOd2QNboIJXh?^YvK90@VqTNKOu$Zdh%Ey=6mv5c3Vry06Pq5R83#oLlPp*wzCgf=GMQBU@MQhi?S#z&-D4lfcFgmzn z<7MI%WLrllOg%@6C*695xIQifX}yxKP5##Myf*t)c*9kk#tOA~ox!d&rV!?&hGJS1 zOaz1EtKo9h%K~-PdoEZ^4_=^DMT@+dwxw2?wMi8!acd$rIDkWa}tN%wO~c;=CFzE4+H5oSRrysP73z($iS< zAjXSV*^}_`yBp~le|Hm~JzBy^0R6HZ!hXU}eH!b7ewk0C6`DdD`Q_T22w=iy`IB}b zKu>KiCHe^FA+0V6uNRm$`RdHbNOPdzfM#mXl%&liE@p0)9qqvxVvhx!Cab2uL`!nx zS%u(-Lt;#@TIwwEqF8z=DBqRhtV|BUUSMyo|8a!EJhEm0&&c>KD`afJ$M4rrJI#ym zz0HfC8Q30^pr!u0X7fWBai{ZP-O-;Ftb z(KBj0Vamk5r5!^|mMYxQ4#xSkVmHe3fCvd}rrP60gw_`gjJT*Y`TqrtVaOCqAmWsp z7Q^@n^u%=K3@i-q^iPi8JS*~1IF6`i)>em^U6s`gyIQ6->D1As=YBH_5Ux!SslBV2 zP&$&{X+C}5nAyXGxojUL6%v%^si$@>Q#?#Uu2l43{#CH?}bgYp&b1 z`Hg>ht`sny$TOO|Fow3D(Qp)(?w>rPks+9yq3XZ!{A2}~T*u}3l!j4~r!@3Or!+jI zVaBVab4kndc!r=gW1q5t_ITzQXD^39lD{6$$g4e`!Ccx}gMu)V9Sw)|);mNf)9W-D zB;UjGs1hTHKn`XReo8Hk{Tdnu5=B3y-i6Z!o@e}u6D9s+?Xzh;l1=eP7C}>Y(N5)6 z7)%w$HPF3(WT>`c< zVH;p6F9E9(wy_=dIn1#Z94RdhMUQ?TGB6ga<}D`F&)d$Hxc4p3KBFcJg%Av5_4m$--eCB#8eA_&8l}J}OO(s>QR6RT9C<0yeuiuCz=r_@~D|$5h5;D7$BNuk6@kA8wT@9}r|knx-*op`Z$8iC;v%pFTc;uEu__$*su$tc(g zwZNlkQNgE-g%i92$svv=^k_0iOpA2Pnngu0P&8q|%Mckupdd=*e32sxFTpSfR*t}t zT#Fw(1nDZNyUHR%ZWQCGAj3|8L?owdJH}Vof_Z|4KEPNC%GgO!YHZMpPOxxY?==adxgq4 zJ`*IR|0WyE$x6Fb*pXDW4f}FrPj z0rO3;o?dKPgPR~ek1S3{7QpQclM}r}Lj3Gw#%4X*z;$S;)ZK_{>>=S!!}S>UUc>B8 zcbZJ+%5ShQdMa*fcY~Wz0xYF5kLYfR;5z_WaNh~WHsh#S$^?a)>VCNm2hyZM?`-0aq1~=MrWs(JOBcGP+ioE?vW1$SLDR#$R zkAK=!w8nn_ZPpq)r{I3!(L-j$9*-_6j%>!Wn2 z_p-&&O$qY9nPkcZZ+wEM_b~iTT|lttv869X}u9H z*@UU+G8tW_qsw@7nVv4w)0K3fx8N1$9%bH|e-oUz`k1)C`zlu2fi1eQ#mU9YcM{t4@kYGKo^?`A5;y|{%mTe`Bi1N=N zMpFn@jAjo9eiARjubjZ|=p=sU8vGdDl|-}Q$517p!S4%kr};(#yAa2bdC1477Prnt z67bZUi0;8olioO#>>weQ7lsn}y*i2C`NZ!+jqOUBakM#ebLCg$AL2G&9JM*K&o4*? zeen!TuE+E)W5mMXZOr<=qk;M@NC1T2N+;bqpAI^~1>&Y#7s4ghj768x=vp}A z)6e)aN2gORDX>E=ZgB zWLbAlwY}XBE(7+|6(LBZ5qYJX3hGTGD7b>PlXJ}=_6t8OGBk4Y)%h63H!~v)?*8CJ z9(L`2TO@^eufb$+Df7U$U-7`&ktWZw5M4DRK0k#AZ|mr<^;n0E`%({M7=PG)do z`pJ1Xt6ir8h3??Q_%C%0lNQr7J4$?hfpa^nD|{z6?c@?^#9!{VnG~`T>f~Zjhiq<{ z?>GI-+U#21z7+7j1vhvfD^{q#GNKTA6`DTSgQ1?*yDb=Wv3m~rc1{`$;*9Z~Q4YAK zYlO&F2b`=sF+FuLTH7C7orS~+#T2u0GB!ANKW;z*K}#TLxqIxEA})3*N_m(MU6~J$ z;d-%zY0n=xp1=L_TjFnNE%Zv)-$t5xV(n!JJcNSLR*pX%T!~t3maNehW4|%H20oLq zPVNzN{R!|9ZY7H2dSee)P955WSi+0Lx9$;{Ct)3UtFot>`<#1lIAsuIz z?X*h*UmBl?)^wjY?ZgCblfUtNAZ;k~mB4kr`X~~Z`O0F@HeX$4Fc3H5li@`9w5Jf2 ze~l@h(cLD0XDeUe$?~~5To_!-#J6p8YI-+vMT=ifC*67v9L`XLw$D(Ez_ykcaa%7< z;C?~^_wbu69&;7bx$?`oiutp8aBwZ#=E+3`eCxwV<^>DK$`pg&wGZd$L4elI*E z4CB*fT)K=*myxl1X)>OqkbM9xLOm}*yAu<%3%;)v;yAL7mBF9p?@B4*MNrePy+n(0 zrND4ssPWgZ(PgQw{3@$pnMed&`Be~_fw;Je(f@ECU93E&1(>eII%s#&9PK-^vhPwK zZJCoDtkbDdFN<{@F5TAq5g8j9H@F8OUho6_q7z<4D99qAaK*m`x)0ojvCH0fu5A;x zkfs!w(w7m_HGe0^kZf>Z^0L znUI!aI+MBb8~0VS|HImrp-N-f|E*^aVF5MBBGPpmx1x>}lZ_~QS8j0v2L`34{uAL& zQ5-BmuwSbdmlf;3LERiVxm3!@zDd_0w5t_>$EbUnAVKidD9;B*_H%--K&1+I~D*y^F0rWl8cO7NeEu$Nb(r%C)yOyJ z6~8rgWPDdr=@`Q0Y+Of%w$%~+*$e)Fw02SS5!L|Zii?w%zaxw%FMow=PhJS)^4l($ zK5Ej48{=9@w8!g{?eQn3M|&{7E5F;fUSfP%FY!gkEwHVgo&JS+-XBjBa~*eJ$od#k zV~YGZopkFHa9CkN=@Lv=;L$iyP1NPoWL^Hra<^!5S29uF+DUVAB|int*Gyf>8X_J= z^Z-pEv%SVN3m}%xl?OV|V<=&(wa+IFmf~VuuzjGGz%xwZ>0o0}Io)kCfg`_hACUHt zKEP1JA5WlIv-YtVw5@$UWiSvoDt{zV{%OhbGg7|OWOP@4XDgqfZRN|_T~w{x*Y2NY z>B797$T-O12Tl541}6zc8;T#exv5p4(I{}6Id(2sCSzxJ{jBy8(+?LT#1D6n-zE5M z^s)vCuKx@RI6y@F&m|salh8+;*!DDq%D=ffKs>;37Je`} z7XP=R{6BQktV)0Oa;@0KOny^(D90b+apSwtWKtu_qk3$ z;|U292{?^>n5{3H3z;u5NPGdg&yw%_=OkayPx60)Ct*ocBkY9b_2{*`zU(w$C!Nn? z_eEkSsgnpjqtw7ba*53nd_xhp1=th z-kC_>F>6~phF=AcD2iK;z}EtdYJQDQy7hGviBLu+n6AJNku#MV+MHeDIuj&rOrUQ9 zjQqY~Lg{4&;=dy9k4s>5%dUUotyt@NMrS`tr`q+9IpoJ_yyBSeL7N%obsFG?#-CB| zv(v?~te2ipu$-R>*wMQ}C2QP9++-10kWkH=dqH|*1o$C_AD@D~P)lB(jMJ99&EW<_ zWe#)`InbNPffI0Fun*J6RK5{$K$V;5q+8#DL!uB$mteXAk4gD$#`an_n^1ZgOZ<;= zrE)Po4|RF{uP%+_69(xZr-NNynMYZ-M*x)g9cG0_`!4f99p!_{fy5CRGLWtW;^53K zWWL8l>DKp6+FMLCf*IZV8IF;^!~?e%8RocE(xh8IFmc7jHj(hg@gzMmphxz(MSM05 zjvzL_REl$jyYk-?E94(aekwiFx(yyL?KJ7)TTj%K^d}kuB`{g#rkLyE{T53YJtyYD z*6oN2V*iLKu=f_jZow;+LIKswiLr#jW#q)5@MBGT2cZbHF2QmAj$t03HXLOXw^~18 zO1Je>III!9QH_uj{mhZ!JkkVb%E{jH4BiG;SJOi&54)h_m^If1>9hu?({bSO4CF+; zJ6=%3pD{1($~+z=R|p8jh87VnHqw{u=p=WuE2T^+FwUkwlZZNNwU3 z5wMa0l0qjbuXQiVLvOkd4l745UGcO015h^g%v`zqQg>@=CD;jQL3n&vEevQ6cCXX5Eguj`#RvmKPMoj+Li&)vu!CD=}J&hG4I60#vuy!on_m17OL-+E1Z#x zYo=v2c(Qy!-EH90l$^o14PjY(mP!3gdUcn?x7)7kkWIu(mF@@C~?U#9zx8fH4dY2HKU#Q}riNz;Rjt_eo2U{}B4JDuG?kvv9|Wg@0OS^0t!Jc!{2s{K%Mh34&jJ~{)E}YdywiBi~2Q*oRA6|q!Ac}@m_(Zi2 z0+hZ^3VJ4~m$3ejBSk1awn20hFBhNmY8>z_gy0`MwL%1)s6c;<%A6W$!sbId&Ye%3 zev+xB@1;{OHff4^E!<{04)JTDkQ9QC^x^)%IBy7}u^>-Gd<&4@6LMu-v^?^oeDED` zG3P+h9gDS33}GpvGi>;Th|Z+Lzrcl^s@>*OoF!9#d_IQUolpc-7`0xS`y>pz?RE+| zP8vo^R5M1<|4U%VYy`)N4ufPmH`(oaIq+t6$i#JF(5DM`e4B`ApD}#I!0JQ`UH;?t zqI4;3Y6_K4Ryd1FE=C>yZfK`?2n#_6(=^vvioQR-r`PYVmUTNWrYAp0T^sMh+u3b3 z09TO4g^0$&nu%(M{{aqK3c2D$wQ=FNsZBw1ubylR-nlKJRqOv{uNGVkm(wFz9W@dQ-cG#(e zePCf*xtGrZ`!-=8Y>$UYZ!6g7f;O0RCaKod=v!0b73^cLARc=K=h!Rg#$IWe*eeYX zdxiF~SI8cFh2pVSDjj>JZsP4j%f$K{`6&(!b@IGl?hCHL)S*puTwAn)Mq@X~ly^u( zTh|t?L!+^0WXnT|XjE2-3+>cs>@2zR@)Z>*`#Svv46{m@#-4PNu7`SK!X~Sd>NV#dB0Yl;()H3yOGy8 z;Szv#c#`@K`N2&!G}?Fg!?55>Xv2D}JZn;<*fAu zNfa%tz4mTrNBPK5AU#^9|!Tm*(se)Uu!NSU%X=(#h$&gIM-{A3G*Z>~YP8%X#zi}He8VIhX z6K@1@9V>P^jjyxZd3a~J;^O3zVT~U%ete|vFb=}#hNrW>z>R0uCAgFab%HyP0^2UE zN^r!lma1r-95F^&SaW_$p ztC(i)riwl@M>gW38VqaP+g`;ChXHsE&5R%+oH$h$}+D*+zn@f z=U{7|rTvVh=^4kN$d7-~w!9M&%)YbL!FQ)gNB5w)nSlIEKmh>Oj@f9t_^ES|Kklan z?{oo5&ZFyXJQrs{wUyomy2Ig-K#F#dwLC1OALrsSnNt!3i3H+gUyHPc|8OyA@80jm)wojFM^b-Sk&CmP2d6+E>0+LYSkk{d~0tMcwpF z&Bw1YVGrK)U_^kU<@)@M^G=g@Ig_e?Y!IV7Hd%S)9}QgH|ts@V=VwefmC$_rW!-h48`fEj;<^!G?v$m4!QC)s{@Gsrxh` zY!4#^Y^!S0tZ*)NI`uWcS@Gk<;kSw`rpbb97*6S4eA1FJ96IQ0xf2If?~Bqv7KW?{ zerC;-pC3nP#Log2e#S6D%DN$@-8?=?s1FmzKJ@SHG)Zg?EkZcMOV|I&jCKUOnlKaB z=zaJp^vTqEjj3hSW`1FH8zG}%Y$)Usnk-=tC#|rhcqPQ_@cVvs$rY~7bojx{uwj}E1O1s9n z1GIv!HP#}tjhBPOa%SiCrn}O#(@T2n^?lUV*05L3mU_JUjVMu$vRD%(bnq0?FO3oC z%_4tkfgafB<*Coo>P|Vg2OS=Foru53m*^AFe@&Y=UW<~R5YOb;4->gDWlye{_9kF4 zONJ9zi!9>5$ts7hZasb?7^U(cjP_H60XTK97@ikZX4dA}x`Hl@FCmL0D={ZqHxr^r zXi2>tRanYpf}W1z=AI6iE$Zk&=OYA~#t&>K6;P}p!>tK2zf=Pe!b zLWg8{B6R^@Xu5d4LqS{1pji;rNif}?BYx!tC>-an1;KFTHuzG8P9f#s>c)4$Kb$?t ztl^1h+j6&Xf58dnA*j}sv35qvt6)zo^7-LOh}=Kfzh=qWMaSNj3@SsMOvfi^!GdoQ zrU3A<4Uu+Fca%D-r3~ip++>ESWqGToEM1R+Ks2nY&_il{vaAx}U8eQ)I?P{RV*F}v z?4CttF>kG)v9B+Lkm!IJ;>WTjhEptDY5U5hYQ@C(vD(qZs`cyhaeZ3}4*)SQEYn7{ zcLT2js}B^@cv!3(Muhy^!<4k5@%qxD)sM{-eNpc63I30MRGTTs%FKBJd97qrFx zyRF55npSXavLgphNm`HK7d%LkUS95RdKL7ReCZ!Wow+WQwd`7ET4mFZLr0rlZQ_o2 z86SydE{4`gTQAK#*&~cyH!>7;-3lORyKZ^9+2{3AUk3lf+W%s-S^Y0|p(FtJQ=!%6 z5`cEhloh8*At6f?jj6)uvJJpU;#`nGy*;MKW)2bwx$%27rV@{+kQjTtOi_)4^x>o+ zB&8@&af|>Z! zm(JW>??V@EEbHz%z%E^3awU|-tnQdqHP!r96_Q53l%L8v?NiDcj#*p-ZAaGrPKS=n zz4kTtnic!?j5BM^YHiz!2dX+-QdALLITChsB}19g{Hj|Pb`0iR%UbM*48Yz;Yg%uO zb3JQKYav#&8oW)dO{?cx**gB+$V>Z*(~~W3Ne*BMWl6@V!`VG!g08-zE5OCh zr+$&@mR#qu-6Vt04$8}8dQ7LAH!@HtxonOvYME=I2w~3x56snIzvwNd&2SHQJ^~XL zIhsq5P|HYZ)t#F3u6K%}tB3s-uDk6dF#I{Y+*%T5*={KwActMj6|&XWgMZBtul#1b zzld1LW)lya)`rlV@w|yFfA$#8J#ZVn6&7>LTzTl!ni|aX$d2j$WfGie99_TDc>^c) z5-`g@+m1=ev<_wMb*DZLd)_)sYcfGvkC!TdaOt%ubYxEG;e@)cm})LG z!^tDy%gJ!EP&?5yq|4hI(*Bl2!8P~fO}b+1TZ|{|W&uOVE2wcb8Fsj1=#hzpnnY>T zpbfEf0)P^JC^c#N(iuc0BqDC6#o&YBEX*(=+9wl`zL6w-H1XqNb|7enWvL3LjQeZ} z)RD>MkdhM)CS=7u;yMl+1y+6DC@w>#OVh;N@JWIZ=j^sBcNN1OyA%<3(ynJ@PIj}5 z5#xwT7hNuPs+QsjmP2t3KGMK)GTFotYDp5WA$WWdVV^w9qA0sB82=ttO3T5b1pjZ1 z_!l*}k{J|Pgcl;`Uyw!6mPyc7K~Wv* z3(pf>ardIo0A^tINaZk!p#!)N32rmG+GIlu)P6nE%j+WjAao$#w+bQei$J8Ds0+5C8wArDNUOKrwf== z+qg1fU?OI~;H^Bt>Zug4flinzLXDVWfc1|G7DVmKRjDTSb<*r43b?O1f*{O9F zLC1BRyVklxo<(>NrRWqjg+R%q%HEClBB|IpTS5_!;pza*HEx-)Dd32_R;UdVC~qgl zy`RGi=gTUvE z1Z%?N7vnM)eHc}{V&n=PW!Yor2TR;W68YE0+R7$j9_FTy)H=S!!xGgO!TdUyCO0(6Ss}7HM=VT|_icD^3L%lSax(u(O z>WEC9ebUw_hau-mi8tqjDF)nl;ZvqeC8hor6LG4&5(z<^<=@#vzlIa0YmkJtayXSx zMX!gH8#SO~+E&~7qZz$PTDTlnzS!)Cy8X&1s#nJpBLz~{X*0yus7Fau5onWc)F=7a zNg~QvLE%Rse#mV(Ah@Yt&`@_j8l@4@e2T;&JGj)NYt<3T5-2kO9}O`UjIiqb^1j+L zplor>2x|>eHO#W>rg66qZC{5Ok>K-edo)@x6FiL!+KjCx6V~(8q-Raib38qz)>`>& zZ=GPiPv=(&>rTz5Dc-Rr{5XD_EH-J8=s?E!L5s8kd~l(T8m6bzX&>5b3+d3dP#49v zNTJfU&>^;k4r^Q7R2}tYSnX0WuGlnUE?1i-kzms>^+J2*rnt_}R5V_KU@?{1vy8YgOO+|^Fvw5}AYCeW2_(ShEpNuVgxrRa|^5tOIxl8k?v z&7zbS)8n6uqKun(ynz8iW0-zisUjgk9QRpGpDJh;HH4|5wO}BP5Wf&5^-U|Xx)lv+ zuU| z6b&REjF`F!cw#LTWUT0iB{p$5M;d-ayrd2Twog1_xgW59uPVY)6T-;{Dg?Tikp^Iu zf$m0k?brlG&Jj~rI5(U?Rysv}*cYwHV{Aoa@d-V^V<3i{j6mpOpCO(4C>0lfrnQ&# zG;7^OVAdlAWj#{ut>=Gb>X`?;6Qg=2&;GhtzSLgC6E_4}_f7=w(uWO>L!R>3Z$dTl zu#wx|)}@7_HEzsxYx6v{!CF7X_)_OknQ41Z>7)nq@?N1R3rV(4sxGmWQIa@FXbc}| zWl%Q~G!Fw!W6uXM*#yScpet3tXvgylAv-yy-LOZt`~s+bWhdZGWt7Md8Faf>x!IIsqpG zz$tr@mOkkRAd};1A5Ge&)-xHW)Or>^W>Vy3Iw^wtMdN)UObYL29?$I|lC1n;miFf?1*CmXWWr&!}Zt3ebBF(0!+;YF(w&p{9H3nf_gWlM(2%{89>)(a7Y zhw$9CEoqTzya1sZ9nT2BjfyTGGXPazu$|TXETRT~#^#vTnG#EX2^NG9lQ;RL7`RUW zdt_)s_t5&jbZ)GI_d*66i2Zq3t98J`XT5y3x6U@-4g6XOpOf@#q(|9tnye6(s|bCw zV6Y5jgh>ZP!w*K78<9cwi@ekqpfe{x4^1lE7>UJZj3_4XFQ$O~E|%!v7BsTe`3y44 zEoE$50Ax>f?ZyJW20Hvjki@epczK42^EzcZ^gUQSM5k(iom+(3lA}9XEMW(dlC*ik z;~@hIsrKd?+1#Ei)`B?cEK5Q|<2WdU(K0Jee5YGt9*$CFSAi8w#>%3f93s#mV`Vz# z94jZ|%2=70W~?lcl4E7=7ao?evebqqOI5~nbjX;F4y4OqjOj4Ne;x~h{hJdI_jJTX zdvJ^*;4K%%w_{ zb=kQ{t~YRODRXouDypGm2a-w+14%ld{DztxND9SS14-s}2(}M*d=>jmp^QCWDQkhW zjoA#-8Zx03M2bzc2=U__T0J%G7sXUsi3gnHvIs6j9zl`zA-sTYkx1$Ik0Y~2KMqZj z)Cf(jN=zx(A+e+d5;6jabXu&KsgHKBr1Y|aC~K}D6OTSM6oXi0#qdr|9s7$oQP#+h zVNC&I(v(+enj{OTRSdOVAd@Xx5{;`uR-4VrWYD!{86#jAWQn6=EH&yWm|4)MZ3_>i zfPDEF;<2JgM2lBoeI`OQetVFuff>JrFM*JKj^D&Jy2h=;EYTcsSFrRE)2Zj7$oN-V zhNp5sDft^754`e3hLOZ7?ls2!{!kX$;_`M*bkXGn z7lFC(T>gj#sqNNvh6hc&cz#4TgNm5YigfCcG5BJ?nH0^vCPh~wDO0wp>xsf<|H5dH z`PgaKS*Qe{IP73iif#;+rjsYBP@JHV2#K--e=J9-f@Tc)Ar=7s)QE?=M^*Yf;?$}a zZex{Edg^}S<_@dtNXEvZcB*^M#!mSc1RYMR-acWgr{iCqljff$=NbvCtsnyiptXl! zQ~>!{32O^Xkf3TmHY4jlm?w+cQ`}>HF$9ooAFn{NWq)E|i#$NaXD3I`b6n}Y?W>^^ zRodsG2hlqZeS_aaA03YSQ*YtD%wul#gi-90!G+E=_&Bl*(uhkU_b0{mg}IzLZryJwzz63*14q{|=H zd?oJZvb)RAN6uw$+u6c1Zpiqeu{E19#yR&1uDSNrk{THH*>YEGuI3YLt|CdcvNVss)T?s4d_tS7P6vjT0MmnD6I4zSMO=h zreHo&PiMVSkkjQdB?;JpS*Ha}|=3sZ4OMrJKes5QbMKf>(i;k^DXnYt&MH z0xuJ-j62^sL7=F(!99U0ieZIM&W);9!qYsUfnJ2HU%(efH(O4~!1x`jPo75> z$@ADI6-rd93Bs7x!om*;XF)bgvbZBZ8xu8CT|)GS(9>854bhm@KM_&H;1j+ffP>}4 z$f+bL>`REFtPo`eodctRMx5Ms&!`DuVk5b!k_Stx(#@BJNGK;#%Q1Vo#vb_M44Q3p zDz!N>sKtc#!AqS6-8u2EqC3zO^wr6kRTz)5z{3Ga{n;ma(uP=`5Jc#ZK{fgVH9M#j zpgW>0h7fc{Xh4TNt3P(TlF=PJdSG>DJIhvSnfP`ku)9aXc)S4TgzV+2O6_7$VYCMEA*pCj)^s}9mWgj5VOS$+xKc;yNoZ67Y}1Wa}U zrT}33Kr*(!!g-C8sJn7n68Dq!P9BBELhmq_Nj*I1%PDbPo+k-S6i;8l4dXpL`5I~H z$%&qiyOXWWsi>Jc_k|Q0R#|VBImBn9Pxvbjo&04)z@M0tgmydX3zT>4t>DfLodgT7 zWJ874j=9p-?&#@6YbRi7?PMNj3i&-5`Bi+p*M(SUHz+IHeZZ&-dc*-4p}yH~6K&li zaQ6k{Khe0jRzy3C<2aB)Vzzr&Zrst8Ju_Q>z~bRfbWKfGwKV@o*)X8OG=@ufmKGIv z76xxa23tEpTFcBy9fv$T19=GEj1Ua@wyzw;17tu5ZpEBk!DUz1$5PVYBG}iDTi)6` z511<+#I5$%Q(_V2U8H=TCIhobuf%i}4{5Q_{7igLL7H;G?A4g@n8&{J@>185?%EQ+ zEE9Jd>+`e2z6?k}Txt1zo}b+>&5%SNzZDOCnaO~Wl6L4vj~^7O@Poq4 z{?RikSK}PWyphr&@bhox9njt2ChSDvKBrRfDZ0R$n_7TSuKC%yIUElRzKBqRNGI$x zm-09>6pD}19oLZ0Q5$~y(cTo-m?<+ALotiH1mLWYyiby4xAMr$bj*%YI z{VecKrOuVE&pYMo3r^+wE@$BS?owa6)R)mGBKiI!ZsW*a-zP8MpI?MTxAql^x$>62 z9JXs03mZ4%kWa=J2R2A&#eqj8bK>xUzh!7^A4I+_3+JZpY{??6rD}Jt{P~_Oizxf84=Ivi(lEnAz`Cir#)_py=-x`85&snUaqi zkdGS*rR`m%?aW1Oom))bAX%xMRLoS@Zte47?6&k}vS4r{^uXt*+pn%Ak6Gbpt>GwZ z3s|_qc+Jez-()wZSH|Dvl(O$|%DHz??r9n4$@@FO-$9dywxWctp+=6J?wQ=36^+{j z&kg=w5#8B{$dk;q;VZa9!MlMQlbn7zDuh?9Y`cE*S!N7Yjd0!IJw%Skwj-0*6M>6$ zIxYJWN?sI5|om6UP{O%E1LrLj1S9Oz#W0HrJ}FTY~mEWuxV8nZAnkRp=YAz5(j#d(ftp zu4kK4)S8hiEnW5x&1?|@jMK>vVO z-ijW`^4m*Y7}lI#hA}=)L$iBxiHKYrweVtkZ}9$z3h;2OxR^O$?QL%S^SN9D8*s_> z_=hmk8|lKHLgY+xgC@QsH`ypRk_#N+S!Gbm6MKtZk_)s0!MhSkqkHThC?XFu`lS_L zUwsT3All6>5XZA2bJJEsF`lI~{k^WgXK$Bht45Yp!?RT*%c|kos*z>Y@NCt{vT8^# z1iAUB7j+?|5AiVa^c*SU7D|j|Jgj9*FU$Cq_|7V00`X2Jez68;3z*(=ySEfcNU_Va z{6nVf2c_tR#NLAxy$Otq-qI{5B;A!YiXzPI9m*aU?5-_0yzWK$CUALpxD6W$aUfUT z+MO#e{}y^E6_n^%Wh~;JsPT)Lj#9;o)p3Y#m5V70DjvKpW)Ik<+@d%BDHOY>?R@X} zdpIl_>C04yp<-~ayw=icmmx^mN;A}#t3AbHRiI;SnvPD5(J{+Gu9!c7p43+Kq;jPd zH?OWi$)I1@F*P`%W)^4tUebQ4G#+Z_s%Ctz%(!!qn9M${4CK({ zNEwabyNP`$47Q$h!d~KJQfu*@kA48+2peeogD*ic1pttRbafGK!n^`VT^=B1yHua; zSa6WO;SA9D=kDTJf%-YhV%gOJC?0zNnHg2FMvBgif$sxSC5IB8u$R6InA zj{@ERSFO*j_fD2x)jk9dzRp6$K$_A;o0Q=icxssWYf@}@9~Hk?qQ<11l!W+^Hid7~ zRtYOA(q%lf91W2>4$Wvk?MBe$`g-U6wOT4v815cq+=)WQU%8DdvQnS|vj;JsgoljJ z`)7ULP+L`oNhZN-+Y#J*+S7=R;F1a4Ov{h*z8}2v{vjo4&)G8ETZK&~6m+3BG_@D{ znq)e78vsk4CdJREK{3h59A!;U&rjYxL>@8t$K6N=&7$UmJhQNLL@(uMN^ifCN8xCh z=^akCa76iK=zm6Brz`9GgKts;+F)sgal+mNBme9JQ8)NEcfGeY_D$dp*Roy34=XO3 zyY`BEB>|<@8}VVaB)(S5Go9dj;6_2F8c;b&LF;T%KN%m->f%@RQ_>YbL_lz?pD`-* zlOEAeI-XoVg*~gEj1udoWJKs${d^K0+VzvjEY1Y4v-LAhBhpVY0sZ7h_46i_3G0@T zr7-I>SpZ{8xzaB*G~;r&G-LWaE=z|uelOc!ak82}Nfwl@p((NS7Ud_1s2OBVS&&9? zwVFOt_?#xmVOnyC`&@*yfgo_g-VahM*-(RI7PF#Fxp#|xlV`hRgr!Y- zb%s&z31Ln;mo^F0I?#3x2*Go%DM`TWwM~&$lY#()%)XtRjPC&C`PMjTS&n0-w!>>6H2&ve`&(|cG) z6Lud>SUWJSK=aaQ^NRF+a{@t9|9*|xFHk- zmYSp#72GhM*fu(hZSzu}K%Oy=HM{MNm`C>qtTEC=S0=miC9JHH6@g`?$gp|nAZ#>v z#X2KrvTT2|Y<~|i=%f@g+$gkJxF5Ht6InQ+)leydclJxz2CI#WnZ^^kNK|c{aI0Am z8%Gji*Bup6@K_O|`**2I= z7;T^h;3T;WX@g(VXK(CuTW=>`y0sS{u}c|wAK?s)A6>n5a@^hd8uS(Q*2#QgS1=wU zMx-*N&dA=>i?FvitdaWU7IgZwYraFV!Xp7!gY!;==>k4-%a}v!d4DHqx#4m~Ki>Fo zf?3W*q8t{XFJSks*wFAPK+fM=2ysb0Zh^(mWf(1B^0XH}`0MRW6>yJ~rL;0}RsLFGE_{-a&|Q@29)e`dfUYAG-?le#3iT z(Jddw$l`;M5QeVC{s>uR==FTZA6ysw5xnR!!qBQ;nK91Qi2q!U+k^i?XfhRd*X8W3 zALs7m7Y94mOTUlosRi@GvjM3;9}8S`$U)%n7`TGpfmG{VWYKi_%Z@u|@Z``822Mc^ zxBE)zXz}4X{>uO#%@1n3{~_?mdYzUF1%&}@1K!A`etN3C-r!d84{pJtlYoXXtu3IT z2(-ehb}6jd6#-AcOrZhxM!@Ic8fpXVkARynhi!nB2#5=-7aQQ>Esc?CVN0R9a9fw3 z-K1si$^OA@S=X+Qu+k-Vedou^^_@h*KuIul%@tagvJW7pUgm1Gh zGq4o6bSS9k(Y6>?k$MigP6rQiGde5|k%E7R4Dx6QsATMl5LgQS0H~=PiVh4WEtZlF zyfk8X;~F{dz33RHp`{|;L_Xsk&*p?CP^z4OJ=3OZMudIrP8Gg*O6kAHKCfOS`!;49 z`*HJu30?3IWqR&dnISevLwt~AXvKHhnT}c;W(@sleps)(6nEROeA#!FOm<3(eP^N% zu}hT5G&(PmX)F2vb(u;2tN<(P2PfS0plNkzmIm=uw5Dj;uni8mGv<_eO5Qn!UM`Qj zyqg$qxB(;Y)_c@_4&DDiH=Z!YN3HDpV*p-MhNq$M55URwaS{s8M%2mcV4R}!WCV*& zVNWLJK&8GY?iS!C%pQB!1+-gCkqgd@h0rj!B#f#`t|ZOs(SeVrzZFSws%IMzdD(@d3{HI&WJ2Fg`oiCGBL02w z;tgT~u{#vuiBx8Dugv1?N1QLET$)Y!y`ag?A#=*+mdZu=95R8noZxCK7EV%z%DpKDW{B4V zM-s&Q)c{HQrpQfUwuuQZj7gM`Dr0$&GH*vi-l^m0dZdO?Z*hjB7%j=A%^IEOjz5YQ zJfr!{{-A(TPeRfP(RmLEG;~9J`8W5xhr4Tui~IX;9zLkYOjeU=!MBE z6P&QCT8AD}4rSjk!c9N%{l6%E4V6hxDm{gy{Tt3V4YQqXQXY8z8oxRo62XcewVFbV z=XzpP)GK;qJVeKnkB3NBr}tz$#7OaYNQy=%M&qG_up#3iM(!975uI&N%}p*WqW zg%Vl~)e6XjZ4}oTbUYL@?KG)rIvx@#DgbHaNkYa$beK6GadOV*Ao<|%k~m6N<*y{| z$mw7ar$&dc9TjCmRSFNK$7I{)ekou}M_>}DHi9u1f`L(JR14Geu?84D*{@t7B~=dF z{wdoc8ktGJz7uV=KFR!G0SL02*ZL|wI;7}teFC1*-#-bSR$f`F_)(+(T1-M`B$H9jzh6|g(*YM+CWQ2c0K(^YmtqX@O7hrdg zgX@yl{uTkBMnG<8Tep(~>G`RRtbMu6`N^hq|y zGA`Dmmz!eb{l^q_*~Mb1*fMjBmB2JM9a-Z5m*lebMN%rFE5$swzNEe(^?g}=)h_jZ z1>Vs&8|juN3$Nwb0}__;v-Wl-tALJf!Mo&um*k|MxXQsGiwX5LlUir$E83>#<0)q# zVzIc}2^O(9ODzJ>x8=bfIwy2XqwDd84$)EpYfs1XvExMX{Dz6S;sd6g*yW=CF8ZKp zEMJi%zzg~a=N2tqz)8}$&U;_9X{&eq5rwLxc0h}XqmtTzPCb1psU5gYgFYjv9lVI- zX82Wuwr{++(V`d7Tk!F#!&|&fP$bTTm|9Vf=iXp}T-M;qxVt%!6oF(sW$Oi9OyaZ|C9 zW>sq=9i>I)GNw6!OZ zIi$dB6aOgC;*&=BY;xnUtm zsdN|7;7A;(8B@O@a~q2p!V;1r%p)uz zBf@;b64D?nOPJ)_s5$9W2e)j(>?#|U9X#t!*y3%Pt7^Z5v6emhfj+a9}{S@a$WlyTMJ3MCVlt%KBDI6k_4D(B2@XO42BEr!@XNS9E9X3i=27_TX zZt>jpH-Lq?>u=&S`rzQz*zAl=){_@N^AE6}$6(n4a$uw~*%TwA(7B2i zgFmjtX>Vu*M+aU7{KU}#=?Zb)0R5ca$y?e3xl8*8Y}dac> zeh)!I+uR-1)mt{T=z;QlA0IiXPlq>zmO4CATWSK#yvEPK=UJ%drF^FPr;R9ChK-$$ zX(Qempy>)diR%sF5VJr2)7oOtH)-;6fjC`m=fv$y_d8f8Zb>>ya$rkW?Wl+(I#OBO z_^?HZWY2|ro8en|%tpCO2|{bZ5{ zX~BY(oaQX)bDBQ@+5i|PdSiPmXXV#veiv|g2V?u@7TrjIiV==VJN+F(nz!S3v!dd2 zhxoKSk9WeQKt%QU9*TWPbtoFMJ5B1rA-m3P?JA?Gxy5QkhGZribWGTgSg zMe;~ia5qn$yW`yRUvW{yjNne4yYm%Www=3kbBl>PrR|!>l1L6+IA&7Qe!7Z@av~60 zVfcYhB1+jCB3dmppH5RVN&zaD+MYNmZXA1|^y!EJ>q2IsZWI+v2C2$!`Lo$G%;p+h zeziNOK_rD7y8Lu>``+e4F1xuKwnG5(CKRf~WW~sc*u1Mh8M4&M*py|jvW-o#~-Cb94f&x<| z{N`&#qPV*l5 zRrinKmMXPzPs4m$5^j-yCdfaPa%7+~~j*0C1UP2X3VkR{+3e20CyDI&lR6T#AFZPLpg7 z677x_oi=+3DWf8GO5Q>!cT)z)Ph3_C%aT3`l}$0+(V|Z`6c4N&dhGGXu^cu%M=4`K zjhcZ1Rw41MR7YV;Vit}4FD7pMvpK=_q_eogDMeX%8%{y#*1il~uWG+cp5(ECclG;` z{v3=I(XUg^%vV$oCl)Pzl|iQ@%u?JQD+tR^M2@2tMzR1)?uiAALzDJ|WVL_obC8AP z3!6^321X8j3Cy?7e>dKI?Wy)l`|hOPjyyEPPH-X<-H;EVZYR1SI)j7x)abtFg1U7U zr*|^*x;A`s;<0rfvfwoNTgS{gzt|}{j=kXO6j872o!rn7TW5e;_cOLIt?h%CIt4~x zg6%^|tN3sV0G;8Yv@qq+qmuG?<03m5f-(LGRw`dUNAaPDt)=Jk&G-#->6Aq=T5r66 zS$Smj^si)ddkRI!ulzld}9TMQX^k7W{E@cxu z6{;fLW$7;yo&95)34Uo>_@z1GmnO_pdx2g5GUG@q2dU#~N4hW}tJQpX{5O)WhoViT zZsop(q%5tQ3EHwr)+}7AldMrsTCX!)fNWuD}JQKKHPInni`5*JenjF9>xKh(?7Qe&uDWi)l=$rCvHD5C01Sca8 zA|wqQ!|@Zz?$7kw|Cp;bH)d2`1%vtQHpwmf}5KIYhxx;QAttplF%%&bkC07$_+heSB4kyWukrM&mq1566&Z z9Rn0{OktI9vyv*$8%+q=(GX4d>22xOkIG$8MP!)G)_8|I{5gztJ8CtSw)gkg6lzgRO3S7A<|^#{iA z!lUT^Bcr*yUPin{?oNKWv|Eet`W0pJ1L*wgGy+P|B*ymh8S_%9vzgZJ3o;XY|LJie z$}@nO?XWyVm7O~U?+|oq9|w90y@utlx8yv3d!xL4!r#9B0*F3Bm+oozpnTY&W;VHA z`bjA{`f$DUIs`jS`VfJiwg`A$ zS$25g_*W^%t1D%>UygIh!I@f~P~8+!Ob?i2RJad?O9N*X{jq+G3)%Q$DF`be-~aE5T3(V(?_7d;=2ZM z!>iCyD0qH&H9KBY(?IaOsh8t3^_3#0X`mOb?DO2fvI?h2!K)wcRkrqJy!6y1KBD0& zrElWPC6C}=^LSV{Gyb!pH#+UPnB8;3NyO>O)_bNi@Mm$r{F6Wi{1U*sb7Q_6?hu#Y zho2=S$UJPqfmD3Im`(>cee7{zMCtqEj})_`XSiXAh^Q8fAMOSI=(4FdAtN))b1alU z(?{FUArr!5nTYQ%k;yu2llTurMdkTVelo59Vgisi_4;Y}o+JG!!D$LglNiAbU~Qzd zH(%Zhi8~5=D_~t%_>j!^PhEtZX!-F>=SI@O!O7d9q&(Ou`@FB)9^8zq9*_YShWq1> zu$ZLnzW_S3iE+vkxENwOXcX#~*^o zz5%T1ho|}xbM87^w}N-NH{e#6LLJw)U@?E| zs-i#r7%-K{>M5u`4k|ZzP`Sv=-(n|qh2HK9)=mJ!7v;&Ga4g-GbUC~Rj6QW4eRIgb zhW8-ct*q?z-O7Z8{TY*1s?@o)zk$0VWie9nuoUDUP`SIZ4s|Z)ienYdixU?wP;#5b0J=(%xKRmeA)(zf4 z2a1KdeE?tnVOt)RxU~&WeZqY$+)EnRvUe{1P5!c9%Wrid4t-WD5;AH)Jp}c(fhx|-^KGr!Qsf52w{W{rD^BbA({YClUJNTyw88< zW*TLe<;Fboe8^_84FrXMhiI5|`yf6}Qy?t4;O|kYn1A~Kz+U(v{QAMW0rIA9qT8GL zC_ZYPNt69ghcu1B%uhR@?Z~efQ&&_F_hQgAd*k=}qf4<3&6rD3#u>&yUwi7-VI==P zD%Bdhn$b!#3~8``@N|6n=LR1I66O)V0r5?){hQP!Q-Nf-)XFh&x0R7k@NuBEJi5~@ zpPx)Ci;tyOftBGO#*i8>yb5_Uk;AL$mdH?Px`hH%nr@PTdhez?Pj{0^4yV$%kz_4#p6>kpSd_NYq=dC9Dh|}} zV@Tb@?fNjh(xu4;p8!OIvsnq|HC_F=BCY=(wAVa0VlU6iVaw}7xsvJbh>^g(|G8?P z?Et}7&Q0xLqk^u4(`0#vZ=&hm0n@A(?6HxNRMBdzehg($>cg6{fhi|N+*dLqK0w5$l2DH_sgt=n^w6@g{JHB;l2;1Jscb+y^GSkD#L_4Q==q z<^-2*sKsZ;Mte7C-lVc>QLK7O5fg4vUh7L8w0y`tdO%X__8lK=GAA_ADc~?PezB_1>&pC)DSoUrr|0^<}9W0r;LyqsQ5Y1s<#__tais z${IK7bR^z4zu28ywXir}xIo{NJyb2e`Ne#3ez8X(>@=Z3yP-ba#U8)W*MoQ~-)l

    8~FZf z3EO<+1ppn-*`qjE(N{!ItmLQ+zL0sguT|vz7CnDip2*i0;Lb9P)C#x)cAr0n+tVlV zUTOIwXgw!i`r6bb!A%hL=X5{{z} zcX#s3@%A0W>;@*>-=(_??$vT&O}ccreCnUU*owiN^uU(YbHn$;&oAN2>b28yl8a@d zcqf*v6TUcwiEnMi^x`599<7=_vX9@|bXEL^O&==XMbo1K@0+g4w=nq>6!O$oFXdh4 z2cJO(yKtyNn9GL046to0d{}-Tk>5w<_gDCxy4iAWJEc9$QIo%81!w9bpxB~E^(-y- zK%OVIhS?2oMRXV(9SC-*Lu1Rh6J2SJFhf;@`+ZMc%YUd{o$UCxobc1&)@cg0uY;N& z-il5TOcc4Vqtna6K;5Bt>JcC)1cNhyJP3&Pv?5HBntC{iDUb&u%)S-#Wbepf91jGi zV!Jx-jP;%1a}Wsjj)+d3iXu9n`3!%Ec=@SsvS${OK_~nve#5T=9ftz%%pXbM7; z;hke(ftfMz)E_}S>L*_y_2N?2i*9tJ>1g#a1s&f^zh@x|A`h_QvGGT9S)*PL ztHlL{E5>cEtzL1lx4`8X!UE) zLf@|35O`lUS1M*p0BAo6W?u0LM2Lasc-t9%uB)uyFBhL-uQHldT-NGeS1m5Tkv3ft z)+w;b378-pir9|A;5~d3GHtN>Jt!#516)__UEh~yN}MU_D`ZQ>LdmAYBLSKP0uf?3 zV3%MlTkI(}@Uzzs{{f^unPw2PQtb^t2#E9o4iF2CeNQnz{w?iPbd~z%*OnB!vc>s( ztG&hf>*7`)UCa4EpO1b+e*B(nDO=3%Js>S7Sv9>IbWJgzw^v%xV%O{d(99c}?6?VE z=yY_K!dv03qvN4%v2;lQxAd3`b`7KsknC{}p-E?Gu{Vx!K(biuC48?at%lK*jxEtZ zAvr6s7YU2i)r4!WLpCNxP#Vk2>?D`=9>}0eSKfOdTiPr0Ls3Vym|pvQuoA&hAF0Ei zvO0_fy+}nX>$b~n%;S%`hX9ZD5h{wtH;GbiY^MruAAdL_9a(U+ z>S8DS5>8KX>J=uEzkAVwF#sbVR_{6NpuH3Ogz;O|4q~i@E8{S#zy;higoUIb#2hXR zA%;D8SMn!FpASqLQ#ky%n@WkzEc$8$am+3TNq1aLYHa>^Ii)p!x!9OtE*OVjG)Hzk zCGn42f@yfbh+tjSLlQcm*6+Wi0&OF;rg=3>~H zHqCIF>=>3$xEu^5+DFdxMeQliC9xODB{VS*%L;U0Y`knC-Xh@x@GvH5iN$a%#T`=u z3T}m3;hEN59RJBoD6CAEhxIEb>j&RJV0RWhHpHGfls(pd{9sTe$$lPPQEqdMJs4d) z5f7M_F+5Olg$IIy+Y&s;wCJ2X0CnoHhzA__c7w|i5eIzA#w@ z%;BU~LVPkw$O^rhVP;x%kBx{-!AV?oNhsfW8K4wJMB^Wo;7FahIR!LK#&+ zXO4Akr^(cGsY4g2Wn&d%%f%2VBqFRlpVIvvxL3+flj&fgnV)E(nX&v5CS1(YH2s(^ zlZ9t)3&va#iLJw)YJPRjg*R23RMwBb-J)ccpZ!-&5zpCZ+U6EL8KAz31Gq)tM0D9p zeSpRua&npk%A^LyW8&uU6Z4DWeg@=>IWcjc0(Wp1*VqZ=!Jg=-Dztg(<`Vl9SEB1HB$rSq$r@z>*nB#X-&y}2q z##E~GM0Lf)NM${S5Pt9@Fx2NKJ=xNBblI_fEwOY`7^4VGeI@~zd&FCfecjcHCBn7M z9zltlF1Dgsvs(M@7&Q;nd?<^Fk8q~4GZxxI8|yYS(L`ngA6|hUCC<1{eFYoJ0_Gwm zkjBbedu|ejAw^>D(zdBGrOhaPMP^lAMDANy>MPgI%oWSAK>I4iVzDB&uy4R*7i-=s zvIWHj#Q_XhX!c^3#_lXGEH2Qy=8I(%M7dbjf>`zUTIvf*eS@`Afi;*&Xi=`syBM?= zA>WI&i=l}~CXt{_&o3wrg7{!@(3J9xrM^iG(i$!olSn1}C**8a2G@Msgrn=iMq)O?hb%(=AP84k1k;1+l;N5SEkgDn z6ix#|2~74HeV%$Is#wCGD;B4o1CUNo;8hvj4?tVTyYpUv?s3$b?E#X{N&*RAo}jjN(C;|-C@$u~DQfe~wmS%b#2iJ$fEahEX>J~K7BFB46h~olho+7&GhN7bFkgF$f z3~}mA6uq`<>D1CBUECYm>pIxV-9g?{ z*P(DrJ~FATNDq@x#SB*P$`j^94HhQ2!eG5vYsgy=PlOC@%OkupQK%i^W&9|P->`S% z5#4VXRJ|vD`44nGbqjhwQ&Qe!LK|uQ6u73@9k?lwOqUl z2WhVQ4%Yf=3o)(5b{GGeUtO@ngcdUVQ_lMhuz!o40W7X{SPc9*v^1LI13#w3R^7>! z*Ht6n3C~KgAepgspqlV$C#QyOPi;s{TW3Jc7`W&i|0kGRfAmFKH_$KrMWS-B?pBg@ z%qgb@AyIjWgKoIg??l}-l$?r*U~4dTZ)pu?JY4t2yIa&QX#Jg)fK$mxk_EqH>apQ< zpq*Fj4x!0JMLrDjP@BTx$7axXnuI0nr2RABrEwBKoY-ypJsNF?HF<)X>L8|PhOp5i+d&cvo4C-}`A_7dZO4w=JTCP^+4 zk^t&XqPdA$I~ZG5^7%YNTgDuJ+Sy9ZVA#-u5kgO4F{$_svuQ&k@LJO| zjqWhn-4~4CC8v+l0FNSHfseL)9tUB0KLooClo&!?V(mXm{S z#zA-geB`E#M`BJIz#}mjs$%`Z&lY{V@dZ17F)%-~n63W|l4U(mbC$)}I`{)^6HWo4 zhh%mD`zt?{6CLkt>;E{1?vBjTUG#HsLoHEfYozue4${`QlaDklYU>$pH3;kMiG7IG zVcmFlv=fX%6eGdoK-IO-*MUF&VV|qqZ~VSUXPjtf5H9+?<4mVoHu5swMeW{dySLwX zhyN4AC3aTLcho&^ zBOagmMU;7zuai0ld|ZgV2kx%dV)R^J>h9#1(+?BSubpq?kUD^d0nh-TbtK$1Ud0@T z=ps7<WCy;OK4Q0EL#Co1c)pL(Lp8(81X9plKU1Yd;MsDs$-6J}9f=$CNh zElzAA!-z+Quag*i>0;UVeHba~Iv}f~0KH|n!3V%Sz(W1~oZW$*Uf!J`Tzj`5$wq|b zoC^2*FcnbrrpL&p>}bavb;75^b`HY%f+eF%sT=L5 z>)>?7g6UCw(z0$BdJUK06c9N%M@T?hG*}})!j$}QByinKjWGV`!k!3dhWyK@e1-`O z&%=_T2G3Bhu%8v<1i5It3#!0$7oqKa8NM%v3^KzraIMQbZco}<7jy#!D=+B4VGn&y zUR~|N?xo;65P&EcZVaeV!Z^dx16+tYEk`wS-u}wfhhm63 zQu485I(r~k05FzA>=?I{I&G7VaraI=ib3fVTip>{?;Ub5iU%}gco$!xUWAo( zj6pNOd}d0P;i0!8c##eU28=iwA8)IE3bhjZd-)AlqMRo`1A7~Qi#%tPC0Oby-|OsSJ=Hd# zFD-3A+yLZjep>83MtY2e8;r-Pe_lv?-FhlO=u_|`6{U3y0dDJPe58#*A2~HF{dQqx z72<*tgX=trU0FZM{t zTG&(KO-%3_jNAmBQnt7|I86|CP&Ov?(px&Y%Q!dw6$Dgr>(C>st<`uq#^!r#mq$b6cm}xb-WKUex=A*H6|lr`7$QmW65@vJ=xEUrKpvl zqZWUhF0tO39JXq%RL#n18;2>pxlqxU_#;)~Dx`lI%*_|jg5`}QAjZYmI6rfh4R4c^ ziv7ETTc?j=PAFD8^)t8?Qe**?q(Ho~nc|7d2q05PFxSu$5j|#d&eaIT?CcnTNtC`E z8c@tK6?2=Fg*x6{99smLcEGWU#;r(LBKvHVgJQNKcleQ8D8ce;x$?e`W#COz%(i=3 zc*mSZG4EBdK>}|*;w^`0UWQW#;}1F*B}nxtM(yM?QMUZ6_L{bh1!E5ov1rUivLm;T zMlC26I0CPVz!WH3MLF})9~{aW$jWG(d~XO9^DwQL9H%~8lQwsUqh=om3fPtQG=4Iz zW5pK_`&(-O=tP)*u4d)vr52*@wOIFpBLIYfjS|(VH_T8{RWlQMK2+W130`Oy8d9MX924V&U3U&K zSKaH&yB*1tA_kI_ZEQ_}FP@jtBe2AaX%e;Dv@Px`JQB!q&`BM&PTB^%8#0;}`^0cq zb+u2Dpp+a-Vfl#B8hWISC}0X*a~!{8=3r+hDxytuUAciHHno>pbK{`js+j|pbz+{+ zWLV_I-d-7_h$uH1$qgQ5<=#Y#i`?*`kJ-f9g$`pejFCY^E0U(jJsROd^mn0)#+m2C ziiSs6r-)mer34e3Fvu`{Et~TAcZ)uTcj>Eb4&$tM*K&St&lq|?C|qQB)$jOQo>=Yy zTwYe1JRFg7GCLG3M?XXjHnD-0)AwQe(p>MCIa|@YqN!Vc>U*d!3s7b~X71c+(j>$N z!A_Qxu=|=eL!Uy(WrI3&QjuBEdVvI^V&i1AXhOf87luZXZ_dIB3t(`hyN4%r){oyP zAwB8kr{QkN|1o9gnb6VB15O!EpNRBJdq$V4!`TPpz0WQejhue@)DL`GlZENnd!j%YK&$>LcCA+$~-I*fK2|TYlBp?k3~NO&)zbH-+wO>QyL1V`~plTg!9(Vrx%AG+%q3(|9L@ zhaq%&fdT2A0#oAF{CYCo&^iU-Xfd9FkMt$6;AiZxaANE*gU4u7tN97-Pj}!M+beh( z!NQ|pPE-79agT!-wM)5%E|$?pkk)*ZQN{_50SwoXy&rj={62o{3BZU6+tVb!^6DiB*r(j&_>Nw>hm^s_ZM{WmF!~Ayjr^qj!?sQ~#Ab^kn1x z+8Xo{USdibdKFx!EzHQg497ktJS$t;Q`w9w?D1MtxiL{ddWSmMJ>5Ax+`I|D75N>+ zua_%tEKh98OUnNE-MH#YZfU&Ha<8BYT?d?|k9PS_ucjjPC-KqHn%xXP2j-Q|5 zXY}>cXCSkVE{{8bgWHCBQ`4sr=7wuo{iT2O3~` zLcm4|`$+`rCyYn7rtgVhCo;eNgxwp#UPRbJ!tRS;+X)*Y?EVNgO<0w%2O`)}F957a z*n<)5nS?DM?57dzY{C{1_Ol3f31P#8;X!mG`^yPCgs`7Su(uI*C}F>dU>_vxFv5Nr z!M;dXA7Kwiu^}*s6ZWeJ)=N2$5%%i{b~s_n2>VS0TTR$< z!u~mey_vFNeuI;#Qv2y8yXt*Ez2rc>pQM)wsrSqDlAe0MO)o{P-n;3gG}QZZdYM7> z{+?duL%omDOLo<$V_dM^qeMxr#1jFyawR#TKsUB`ZX-L2*L0& z5_vwbaKMkivyn*KRNv!&&#v|d0NI8A<3 zT4%w9lejTNuj%3DLeA=Go?SVo$n+EuS?$?_jLW){D-s$p8795i88$hRWSLQ?DR}XX zK&Lsu3s5Cp`JH+RrH!k)V^CTHE?@xrz&+Rp#J|ZGfsdINBGJja-VE1^;F_j)ny%n1 z(42WOL+@i~gD%0FAPT+HbSd6ChCX;5@Yd5McxMxZ-f6lNZv#UgdMohGp-b>K5{2Gr zx)g5{Lx1@4E@dffOkG!g7*@l z&^t|+;$6Vd-+cmj+vyU#3yDJSG+l~!5xo@7%*Avu`!hT6Gx@JyL)?(AKi&e@C3OAy zR=6&OYnlPmgiX^MypSTEglqEIw*h5}uIGLmuAOw9c?Vp(;F@N@G-1>9YP6TaHThMd zyo|0}ehAmg>ALN1xLyI*Gy|pyo2FNzT}Cf?o@vrWo@ZW(pV2qYSsk!~xt*4xMHHwy zzjCBEyannMUW&e$sQRDXotVOM!be3x1xt?kq6doW)bKMB9)n+u+n@7etNh`S4Ez#E zJW1lyCUJh}N<5`=UtB}EoVHR}8PSu+UU-|ZByoi$?&kI6MzSDm7{lr=`j00Z(5A)`Pd#fj8_IT!-kG>nBREL1wYUJ(Wef zf_HR-EeM}_3w|&fAc1T+fiZ(`RtYe-K%n%A!}SPQYAzJf_6rl&X586cQbGPmq>6Q_ z0=@?qcZ+5HYH~g8H2DpW!xGCuW$wuvYOfcWPa`U_6-B~vV;=p+_((v8;n{;LD97Z{d08KqrBPoFRCPI`o!tXh{}xtvq?F6l zvl%I7JT@tZ(9?Pdon;^L8=kS4wxuLxnckSh^U=`f$ z6*HI>ee&f#k3O7op|+XTc9R~DoS9oUu!eq+m^nvO7R&RhspgIqtVEiv?MeYF-}zu8 z7#f92o(~B=iAuf(r3saMEeluM;)G6~i})x!;#i%eJJQMR2)8;(3bS;Qz=P@JVUbQo z$`NZ+yJB93x^p>5fzj9TlWASUPfxmaExx?kBD@kB;0AA?IIco0r^#RDHB+RNlW)3pJ-(yobm%P1%u7MZ=vN4y*dKP9M0T1&ut|ERtex;Oru$Zg z!hkXfQ|3gKqI3k`X$p=|kkS)

    O=qdK+mp`KxlbYi%er(sEU|Zy;7XI|7o3s@rcD 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

    }0gR@jp)UXrZ=f?4HIyA2)a8s9~sfQi8%RUAY4 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%0DF$2WVz=mjRl;|?SBdV;#6V1%@ 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
    P`;jW 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�HRZ}0D(Zo!CX{t}XK&va)-oNert9-s(pWAF3` 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 VEY|klMG^n!Mex68{NH#5{sU-vLLmSE literal 0 HcmV?d00001 diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/BouncyCastle.xml b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/BouncyCastle.xml new file mode 100644 index 00000000..d27354a2 --- /dev/null +++ b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/BouncyCastle.xml @@ -0,0 +1,24206 @@ + + + + BouncyCastle + + + + Base class for both the compress and decompress classes. + Holds common arrays, and static data. + + @author Keiron Liddle + + + An input stream that decompresses from the BZip2 format (with the file + header chars) to be read as any other stream. + + @author Keiron Liddle + + NB: note this class has been modified to read the leading BZ from the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + An output stream that compresses into the BZip2 format (with the file + header chars) into another stream. + + @author Keiron Liddle + + TODO: Update to BZip2 1.0.1 + NB: note this class has been modified to add a leading BZ to the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + + modified by Oliver Merkel, 010128 + + + + A simple class the hold and calculate the CRC for sanity checking + of the data. + + @author Keiron Liddle + + + Return the DER encoding of the object, null if the DER encoding can not be made. + + @return a DER byte array, null otherwise. + + + a general purpose ASN.1 decoder - note: this class differs from the + others in that it returns null after it has read the last object in + the stream. If an ASN.1 Null is encountered a Der/BER Null object is + returned. + + + Create an ASN1InputStream where no DER object will be longer than limit. + + @param input stream containing ASN.1 encoded data. + @param limit maximum size of a DER encoded object. + + + Create an ASN1InputStream based on the input byte array. The length of DER objects in + the stream is automatically limited to the length of the input array. + + @param input array containing ASN.1 encoded data. + + + build an object given its tag and the number of bytes to construct it from. + + + A Null object. + + +

    Create a base ASN.1 object from a byte array. + The byte array to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + Read a base ASN.1 object from a stream. + The stream to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + return an Octet string from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return an Octet string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + @param string the octets making up the octet string. + + + return an Asn1Sequence from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 sequence from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + sequence - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sequences you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged, + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the sequence position indicated by index. + + @param index the sequence number (starting at zero) of the object + @return the object at the sequence position indicated by index. + + + return an ASN1Set from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 set from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + set - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sets you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the set position indicated by index. + + @param index the set number (starting at zero) of the object + @return the object at the set position indicated by index. + + + ASN.1 TaggedObject - in ASN.1 notation this is any object preceded by + a [n] where n is some number - these are assumed to follow the construction + rules (as with sequences). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if the object is explicitly tagged. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + return whether or not the object may be explicitly tagged. +

    + Note: if the object has been read from an input stream, the only + time you can be sure if isExplicit is returning the true state of + affairs is if it returns false. An implicitly tagged object may appear + to be explicitly tagged, so you need to understand the context under + which the reading was done as well, see GetObject below.

    +
    + + return whatever was following the tag. +

    + Note: tagged objects are generally context dependent if you're + trying to extract a tagged object you should be going via the + appropriate GetInstance method.

    +
    + + Return the object held in this tagged object as a parser assuming it has + the type of the passed in tag. If the object doesn't have a parser + associated with it, the base object is returned. + + + A BER Null object. + + + convert a vector of octet strings into a single byte string + + + The octets making up the octet string. + + + return the DER octets that make up this string. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + create an empty sequence + + + create a set containing one object + + + create a set containing a vector of objects. + + + BER TaggedObject - in ASN.1 notation this is any object preceded by + a [n] where n is some number - these are assumed to follow the construction + rules (as with sequences). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + Class representing the DER-type External + + + Creates a new instance of DerExternal + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param externalData The external data in its encoded form. + + + Creates a new instance of DerExternal. + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param encoding The encoding to be used for the external data + @param externalData The external data + + + The encoding of the content. Valid values are +
      +
    • 0 single-ASN1-type
    • +
    • 1 OCTET STRING
    • +
    • 2 BIT STRING
    • +
    +
    + + Base class for an application specific object + + + Return the enclosed object assuming explicit tagging. + + @return the resulting object + @throws IOException if reconstruction fails. + + + Return the enclosed object assuming implicit tagging. + + @param derTagNo the type tag that should be applied to the object's contents. + @return the resulting object + @throws IOException if reconstruction fails. + + + Der BMPString object. + + + return a BMP string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + return a BMP string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a Bit string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Bit string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + @param data the octets making up the bit string. + @param padBits the number of extra bits at the end of the string. + + + Return the octets contained in this BIT STRING, checking that this BIT STRING really + does represent an octet aligned string. Only use this method when the standard you are + following dictates that the BIT STRING will be octet aligned. + + @return a copy of the octet aligned data. + + + @return the value of the bit string as an int (truncating if necessary) + + + return a bool from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a DerBoolean from the passed in bool. + + + return a Boolean from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Enumerated from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + Generalized time object. + + + return a generalized time from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Generalized Time object from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + for local time, or Z+-HHMM on the end, for difference between local + time and UTC time. The fractional second amount f must consist of at + least one number with trailing zeroes removed. + + @param time the time string. + @exception ArgumentException if string is an illegal format. + + + base constructor from a local time object + + + Return the time. + @return The time string as it appeared in the encoded object. + + + return the time - always in the form of + YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +
    + + return a Graphic String from the passed in object + + @param obj a DerGraphicString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DerGraphicString instance, or null. + + + return a Graphic String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DerGraphicString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der IA5String object - this is an ascii string. + + + return a IA5 string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an IA5 string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + basic constructor - with bytes. + + + basic constructor - without validation. + + + Constructor with optional validation. + + @param string the base string to wrap. + @param validate whether or not to check the string. + @throws ArgumentException if validate is true and the string + contains characters that should not be in an IA5String. + + + return true if the passed in String can be represented without + loss as an IA5String, false otherwise. + + @return true if in printable set, false otherwise. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Integer from a tagged object. + + @param obj the tagged object holding the object we want + @param isExplicit true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + in some cases positive values Get crammed into a space, + that's not quite big enough... + + + A Null object. + + + Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + + + return a Numeric string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Numeric string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + basic constructor - with bytes. + + + basic constructor - without validation.. + + + Constructor with optional validation. + + @param string the base string to wrap. + @param validate whether or not to check the string. + @throws ArgumentException if validate is true and the string + contains characters that should not be in a NumericString. + + + Return true if the string can be represented as a NumericString ('0'..'9', ' ') + + @param str string to validate. + @return true if numeric, fale otherwise. + + + return an Oid from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an object Identifier from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + Return true if this oid is an extension of the passed in branch, stem. + @param stem the arc or branch that is a possible parent. + @return true if the branch is on the passed in stem, false otherwise. + + + The octets making up the octet string. + + + Der PrintableString object. + + + return a printable string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a Printable string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + basic constructor - byte encoded string. + + + basic constructor - this does not validate the string + + + Constructor with optional validation. + + @param string the base string to wrap. + @param validate whether or not to check the string. + @throws ArgumentException if validate is true and the string + contains characters that should not be in a PrintableString. + + + return true if the passed in String can be represented without + loss as a PrintableString, false otherwise. + + @return true if in printable set, false otherwise. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + A Der encoded set object + + + create an empty set + + + @param obj - a single object that makes up the set. + + + @param v - a vector of objects making up the set. + + + Der T61String (also the teletex string) - 8-bit characters + + + return a T61 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return an T61 string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + basic constructor - with bytes. + + + basic constructor - with string. + + + DER TaggedObject - in ASN.1 notation this is any object preceded by + a [n] where n is some number - these are assumed to follow the construction + rules (as with sequences). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + UTC time object. + + + return an UTC Time from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return an UTC Time from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + The correct format for this is YYMMDDHHMMSSZ (it used to be that seconds were + never encoded. When you're creating one of these objects from scratch, that's + what you want to use, otherwise we'll try to deal with whatever Gets read from + the input stream... (this is why the input format is different from the GetTime() + method output). +

    + @param time the time string.

    +
    + + base constructor from a DateTime object + + + return the time as a date based on whatever a 2 digit year will return. For + standardised processing use ToAdjustedDateTime(). + + @return the resulting date + @exception ParseException if the date string cannot be parsed. + + + return the time as an adjusted date + in the range of 1950 - 2049. + + @return a date in the range of 1950 to 2049. + @exception ParseException if the date string cannot be parsed. + + + return the time - always in the form of + YYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +

    + Note: In some cases, due to the local date processing, this + may lead to unexpected results. If you want to stick the normal + convention of 1950 to 2049 use the GetAdjustedTime() method.

    +
    + + + Return a time string as an adjusted date with a 4 digit year. + This goes in the range of 1950 - 2049. + + + + Der UTF8String object. + + + return an UTF8 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return an UTF8 string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + basic constructor - byte encoded string. + + + basic constructor + + + Der UniversalString object. + + + return a Universal string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a Universal string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + basic constructor - byte encoded string. + + + return a Videotex String from the passed in object + + @param obj a DERVideotexString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DERVideotexString instance, or null. + + + return a Videotex String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DERVideotexString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der VisibleString object. + + + return a Visible string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a Visible string from a tagged object. + + @param obj the tagged object holding the object we want + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + basic constructor - byte encoded string. + + + basic constructor + + + Marker interface for CHOICE objects - if you implement this in a roll-your-own + object, any attempt to tag the object implicitly will convert the tag to an + explicit one as the encoding rules require. +

    + If you use this interface your class should also implement the getInstance + pattern which takes a tag object and the tagging mode used. +

    +
    + + basic interface for Der string objects. + + + class for breaking up an Oid into it's component tokens, ala + java.util.StringTokenizer. We need this class as some of the + lightweight Java environment don't support classes like + StringTokenizer. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
    +            CAKeyUpdAnnContent ::= SEQUENCE {
    +                                        oldWithNew   CmpCertificate, -- old pub signed with new priv
    +                                        newWithOld   CmpCertificate, -- new pub signed with old priv
    +                                        newWithNew   CmpCertificate  -- new pub signed with new priv
    +             }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertConfirmContent ::= SEQUENCE OF CertStatus
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertOrEncCert ::= CHOICE {
    +                                 certificate     [0] CMPCertificate,
    +                                 encryptedCert   [1] EncryptedValue
    +                      }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertRepMessage ::= SEQUENCE {
    +                                     caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                        OPTIONAL,
    +                                     response         SEQUENCE OF CertResponse
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertResponse ::= SEQUENCE {
    +                                       certReqId           INTEGER,
    +                                       -- to match this response with corresponding request (a value
    +                                       -- of -1 is to be used if certReqId is not specified in the
    +                                       -- corresponding request)
    +                                       status              PKIStatusInfo,
    +                                       certifiedKeyPair    CertifiedKeyPair    OPTIONAL,
    +                                       rspInfo             OCTET STRING        OPTIONAL
    +                                       -- analogous to the id-regInfo-utf8Pairs string defined
    +                                       -- for regInfo in CertReqMsg [CRMF]
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertStatus ::= SEQUENCE {
    +                              certHash    OCTET STRING,
    +                              -- the hash of the certificate, using the same hash algorithm
    +                              -- as is used to create and verify the certificate signature
    +                              certReqId   INTEGER,
    +                              -- to match this confirmation with the corresponding req/rep
    +                              statusInfo  PKIStatusInfo OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertifiedKeyPair ::= SEQUENCE {
    +                                             certOrEncCert       CertOrEncCert,
    +                                             privateKey      [0] EncryptedValue      OPTIONAL,
    +                                             -- see [CRMF] for comment on encoding
    +                                             publicationInfo [1] PKIPublicationInfo  OPTIONAL
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             Challenge ::= SEQUENCE {
    +                             owf                 AlgorithmIdentifier  OPTIONAL,
    +            
    +                             -- MUST be present in the first Challenge; MAY be omitted in
    +                             -- any subsequent Challenge in POPODecKeyChallContent (if
    +                             -- omitted, then the owf used in the immediately preceding
    +                             -- Challenge is to be used).
    +            
    +                             witness             OCTET STRING,
    +                             -- the result of applying the one-way function (owf) to a
    +                             -- randomly-generated INTEGER, A.  [Note that a different
    +                             -- INTEGER MUST be used for each Challenge.]
    +                             challenge           OCTET STRING
    +                             -- the encryption (under the public key for which the cert.
    +                             -- request is being made) of Rand, where Rand is specified as
    +                             --   Rand ::= SEQUENCE {
    +                             --      int      INTEGER,
    +                             --       - the randomly-generated INTEGER A (above)
    +                             --      sender   GeneralName
    +                             --       - the sender's name (as included in PKIHeader)
    +                             --   }
    +                  }
    +             
    + @return a basic ASN.1 object representation. +
    + + Note: the addition of attribute certificates is a BC extension. + + +
    +             CMPCertificate ::= CHOICE {
    +                        x509v3PKCert        Certificate
    +                        x509v2AttrCert      [1] AttributeCertificate
    +              }
    +             
    + Note: the addition of attribute certificates is a BC extension. + + @return a basic ASN.1 object representation. +
    + +
    +            CrlAnnContent ::= SEQUENCE OF CertificateList
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ErrorMsgContent ::= SEQUENCE {
    +                                   pKIStatusInfo          PKIStatusInfo,
    +                                   errorCode              INTEGER           OPTIONAL,
    +                                   -- implementation-specific error codes
    +                                   errorDetails           PKIFreeText       OPTIONAL
    +                                   -- implementation-specific error details
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenRepContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + + Example InfoTypeAndValue contents include, but are not limited + to, the following (un-comment in this ASN.1 module and use as + appropriate for a given environment): +
    +               id-it-caProtEncCert    OBJECT IDENTIFIER ::= {id-it 1}
    +                  CAProtEncCertValue      ::= CMPCertificate
    +               id-it-signKeyPairTypes OBJECT IDENTIFIER ::= {id-it 2}
    +                 SignKeyPairTypesValue   ::= SEQUENCE OF AlgorithmIdentifier
    +               id-it-encKeyPairTypes  OBJECT IDENTIFIER ::= {id-it 3}
    +                 EncKeyPairTypesValue    ::= SEQUENCE OF AlgorithmIdentifier
    +               id-it-preferredSymmAlg OBJECT IDENTIFIER ::= {id-it 4}
    +                  PreferredSymmAlgValue   ::= AlgorithmIdentifier
    +               id-it-caKeyUpdateInfo  OBJECT IDENTIFIER ::= {id-it 5}
    +                  CAKeyUpdateInfoValue    ::= CAKeyUpdAnnContent
    +               id-it-currentCRL       OBJECT IDENTIFIER ::= {id-it 6}
    +                  CurrentCRLValue         ::= CertificateList
    +               id-it-unsupportedOIDs  OBJECT IDENTIFIER ::= {id-it 7}
    +                  UnsupportedOIDsValue    ::= SEQUENCE OF OBJECT IDENTIFIER
    +               id-it-keyPairParamReq  OBJECT IDENTIFIER ::= {id-it 10}
    +                  KeyPairParamReqValue    ::= OBJECT IDENTIFIER
    +               id-it-keyPairParamRep  OBJECT IDENTIFIER ::= {id-it 11}
    +                  KeyPairParamRepValue    ::= AlgorithmIdentifer
    +               id-it-revPassphrase    OBJECT IDENTIFIER ::= {id-it 12}
    +                  RevPassphraseValue      ::= EncryptedValue
    +               id-it-implicitConfirm  OBJECT IDENTIFIER ::= {id-it 13}
    +                  ImplicitConfirmValue    ::= NULL
    +               id-it-confirmWaitTime  OBJECT IDENTIFIER ::= {id-it 14}
    +                  ConfirmWaitTimeValue    ::= GeneralizedTime
    +               id-it-origPKIMessage   OBJECT IDENTIFIER ::= {id-it 15}
    +                  OrigPKIMessageValue     ::= PKIMessages
    +               id-it-suppLangTags     OBJECT IDENTIFIER ::= {id-it 16}
    +                  SuppLangTagsValue       ::= SEQUENCE OF UTF8String
    +            
    +             where
    +            
    +               id-pkix OBJECT IDENTIFIER ::= {
    +                  iso(1) identified-organization(3)
    +                  dod(6) internet(1) security(5) mechanisms(5) pkix(7)}
    +             and
    +                  id-it   OBJECT IDENTIFIER ::= {id-pkix 4}
    +             
    +
    + +
    +            InfoTypeAndValue ::= SEQUENCE {
    +                                    infoType               OBJECT IDENTIFIER,
    +                                    infoValue              ANY DEFINED BY infoType  OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            KeyRecRepContent ::= SEQUENCE {
    +                                    status                  PKIStatusInfo,
    +                                    newSigCert          [0] CMPCertificate OPTIONAL,
    +                                    caCerts             [1] SEQUENCE SIZE (1..MAX) OF
    +                                                                      CMPCertificate OPTIONAL,
    +                                    keyPairHist         [2] SEQUENCE SIZE (1..MAX) OF
    +                                                                      CertifiedKeyPair OPTIONAL
    +                         }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            OobCertHash ::= SEQUENCE {
    +                                 hashAlg     [0] AlgorithmIdentifier     OPTIONAL,
    +                                 certId      [1] CertId                  OPTIONAL,
    +                                 hashVal         BIT STRING
    +                                 -- hashVal is calculated over the Der encoding of the
    +                                 -- self-signed certificate with the identifier certID.
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PkiBody. + @param type one of the TYPE_* constants + @param content message content + + +
    +            PkiBody ::= CHOICE {       -- message-specific body elements
    +                   ir       [0]  CertReqMessages,        --Initialization Request
    +                   ip       [1]  CertRepMessage,         --Initialization Response
    +                   cr       [2]  CertReqMessages,        --Certification Request
    +                   cp       [3]  CertRepMessage,         --Certification Response
    +                   p10cr    [4]  CertificationRequest,   --imported from [PKCS10]
    +                   popdecc  [5]  POPODecKeyChallContent, --pop Challenge
    +                   popdecr  [6]  POPODecKeyRespContent,  --pop Response
    +                   kur      [7]  CertReqMessages,        --Key Update Request
    +                   kup      [8]  CertRepMessage,         --Key Update Response
    +                   krr      [9]  CertReqMessages,        --Key Recovery Request
    +                   krp      [10] KeyRecRepContent,       --Key Recovery Response
    +                   rr       [11] RevReqContent,          --Revocation Request
    +                   rp       [12] RevRepContent,          --Revocation Response
    +                   ccr      [13] CertReqMessages,        --Cross-Cert. Request
    +                   ccp      [14] CertRepMessage,         --Cross-Cert. Response
    +                   ckuann   [15] CAKeyUpdAnnContent,     --CA Key Update Ann.
    +                   cann     [16] CertAnnContent,         --Certificate Ann.
    +                   rann     [17] RevAnnContent,          --Revocation Ann.
    +                   crlann   [18] CRLAnnContent,          --CRL Announcement
    +                   pkiconf  [19] PKIConfirmContent,      --Confirmation
    +                   nested   [20] NestedMessageContent,   --Nested Message
    +                   genm     [21] GenMsgContent,          --General Message
    +                   genp     [22] GenRepContent,          --General Response
    +                   error    [23] ErrorMsgContent,        --Error Message
    +                   certConf [24] CertConfirmContent,     --Certificate confirm
    +                   pollReq  [25] PollReqContent,         --Polling request
    +                   pollRep  [26] PollRepContent          --Polling response
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiConfirmContent ::= NULL
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PKIFailureInfo ::= BIT STRING {
    +            badAlg               (0),
    +              -- unrecognized or unsupported Algorithm Identifier
    +            badMessageCheck      (1), -- integrity check failed (e.g., signature did not verify)
    +            badRequest           (2),
    +              -- transaction not permitted or supported
    +            badTime              (3), -- messageTime was not sufficiently close to the system time, as defined by local policy
    +            badCertId            (4), -- no certificate could be found matching the provided criteria
    +            badDataFormat        (5),
    +              -- the data submitted has the wrong format
    +            wrongAuthority       (6), -- the authority indicated in the request is different from the one creating the response token
    +            incorrectData        (7), -- the requester's data is incorrect (for notary services)
    +            missingTimeStamp     (8), -- when the timestamp is missing but should be there (by policy)
    +            badPOP               (9)  -- the proof-of-possession failed
    +            certRevoked         (10),
    +            certConfirmed       (11),
    +            wrongIntegrity      (12),
    +            badRecipientNonce   (13), 
    +            timeNotAvailable    (14),
    +              -- the TSA's time source is not available
    +            unacceptedPolicy    (15),
    +              -- the requested TSA policy is not supported by the TSA
    +            unacceptedExtension (16),
    +              -- the requested extension is not supported by the TSA
    +            addInfoNotAvailable (17)
    +              -- the additional information requested could not be understood
    +              -- or is not available
    +            badSenderNonce      (18),
    +            badCertTemplate     (19),
    +            signerNotTrusted    (20),
    +            transactionIdInUse  (21),
    +            unsupportedVersion  (22),
    +            notAuthorized       (23),
    +            systemUnavail       (24),    
    +            systemFailure       (25),
    +              -- the request cannot be handled due to system failure
    +            duplicateCertReq    (26) 
    +            
    +
    + + Basic constructor. + + + Return the number of string elements present. + + @return number of elements present. + + + Return the UTF8STRING at index. + + @param index index of the string of interest + @return the string at index. + + +
    +            PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
    +            
    +
    + + Value for a "null" recipient or sender. + + +
    +             PkiHeader ::= SEQUENCE {
    +                       pvno                INTEGER     { cmp1999(1), cmp2000(2) },
    +                       sender              GeneralName,
    +                       -- identifies the sender
    +                       recipient           GeneralName,
    +                       -- identifies the intended recipient
    +                       messageTime     [0] GeneralizedTime         OPTIONAL,
    +                       -- time of production of this message (used when sender
    +                       -- believes that the transport will be "suitable"; i.e.,
    +                       -- that the time will still be meaningful upon receipt)
    +                       protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,
    +                       -- algorithm used for calculation of protection bits
    +                       senderKID       [2] KeyIdentifier           OPTIONAL,
    +                       recipKID        [3] KeyIdentifier           OPTIONAL,
    +                       -- to identify specific keys used for protection
    +                       transactionID   [4] OCTET STRING            OPTIONAL,
    +                       -- identifies the transaction; i.e., this will be the same in
    +                       -- corresponding request, response, certConf, and PKIConf
    +                       -- messages
    +                       senderNonce     [5] OCTET STRING            OPTIONAL,
    +                       recipNonce      [6] OCTET STRING            OPTIONAL,
    +                       -- nonces used to provide replay protection, senderNonce
    +                       -- is inserted by the creator of this message; recipNonce
    +                       -- is a nonce previously inserted in a related message by
    +                       -- the intended recipient of this message
    +                       freeText        [7] PKIFreeText             OPTIONAL,
    +                       -- this may be used to indicate context-specific instructions
    +                       -- (this field is intended for human consumption)
    +                       generalInfo     [8] SEQUENCE SIZE (1..MAX) OF
    +                                            InfoTypeAndValue     OPTIONAL
    +                       -- this may be used to convey context-specific information
    +                       -- (this field not primarily intended for human consumption)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             PKIHeader ::= SEQUENCE {
    +                       pvno                INTEGER     { cmp1999(1), cmp2000(2) },
    +                       sender              GeneralName,
    +                       -- identifies the sender
    +                       recipient           GeneralName,
    +                       -- identifies the intended recipient
    +                       messageTime     [0] GeneralizedTime         OPTIONAL,
    +                       -- time of production of this message (used when sender
    +                       -- believes that the transport will be "suitable"; i.e.,
    +                       -- that the time will still be meaningful upon receipt)
    +                       protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,
    +                       -- algorithm used for calculation of protection bits
    +                       senderKID       [2] KeyIdentifier           OPTIONAL,
    +                       recipKID        [3] KeyIdentifier           OPTIONAL,
    +                       -- to identify specific keys used for protection
    +                       transactionID   [4] OCTET STRING            OPTIONAL,
    +                       -- identifies the transaction; i.e., this will be the same in
    +                       -- corresponding request, response, certConf, and PKIConf
    +                       -- messages
    +                       senderNonce     [5] OCTET STRING            OPTIONAL,
    +                       recipNonce      [6] OCTET STRING            OPTIONAL,
    +                       -- nonces used to provide replay protection, senderNonce
    +                       -- is inserted by the creator of this message; recipNonce
    +                       -- is a nonce previously inserted in a related message by
    +                       -- the intended recipient of this message
    +                       freeText        [7] PKIFreeText             OPTIONAL,
    +                       -- this may be used to indicate context-specific instructions
    +                       -- (this field is intended for human consumption)
    +                       generalInfo     [8] SEQUENCE SIZE (1..MAX) OF
    +                                            InfoTypeAndValue     OPTIONAL
    +                       -- this may be used to convey context-specific information
    +                       -- (this field not primarily intended for human consumption)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PkiMessage. + + @param header message header + @param body message body + @param protection message protection (may be null) + @param extraCerts extra certificates (may be null) + + +
    +            PkiMessage ::= SEQUENCE {
    +                             header           PKIHeader,
    +                             body             PKIBody,
    +                             protection   [0] PKIProtection OPTIONAL,
    +                             extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
    +            
    + @return a basic ASN.1 object representation. +
    + + @param status + + + @param status + @param statusString + + +
    +             PkiStatusInfo ::= SEQUENCE {
    +                 status        PKIStatus,                (INTEGER)
    +                 statusString  PkiFreeText     OPTIONAL,
    +                 failInfo      PkiFailureInfo  OPTIONAL  (BIT STRING)
    +             }
    +            
    +             PKIStatus:
    +               granted                (0), -- you got exactly what you asked for
    +               grantedWithMods        (1), -- you got something like what you asked for
    +               rejection              (2), -- you don't get it, more information elsewhere in the message
    +               waiting                (3), -- the request body part has not yet been processed, expect to hear more later
    +               revocationWarning      (4), -- this message contains a warning that a revocation is imminent
    +               revocationNotification (5), -- notification that a revocation has occurred
    +               keyUpdateWarning       (6)  -- update already done for the oldCertId specified in CertReqMsg
    +            
    +             PkiFailureInfo:
    +               badAlg           (0), -- unrecognized or unsupported Algorithm Identifier
    +               badMessageCheck  (1), -- integrity check failed (e.g., signature did not verify)
    +               badRequest       (2), -- transaction not permitted or supported
    +               badTime          (3), -- messageTime was not sufficiently close to the system time, as defined by local policy
    +               badCertId        (4), -- no certificate could be found matching the provided criteria
    +               badDataFormat    (5), -- the data submitted has the wrong format
    +               wrongAuthority   (6), -- the authority indicated in the request is different from the one creating the response token
    +               incorrectData    (7), -- the requester's data is incorrect (for notary services)
    +               missingTimeStamp (8), -- when the timestamp is missing but should be there (by policy)
    +               badPOP           (9)  -- the proof-of-possession failed
    +            
    +             
    +
    + +
    +             PbmParameter ::= SEQUENCE {
    +                                   salt                OCTET STRING,
    +                                   -- note:  implementations MAY wish to limit acceptable sizes
    +                                   -- of this string to values appropriate for their environment
    +                                   -- in order to reduce the risk of denial-of-service attacks
    +                                   owf                 AlgorithmIdentifier,
    +                                   -- AlgId for a One-Way Function (SHA-1 recommended)
    +                                   iterationCount      INTEGER,
    +                                   -- number of times the OWF is applied
    +                                   -- note:  implementations MAY wish to limit acceptable sizes
    +                                   -- of this integer to values appropriate for their environment
    +                                   -- in order to reduce the risk of denial-of-service attacks
    +                                   mac                 AlgorithmIdentifier
    +                                   -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11],
    +               }   -- or HMAC [RFC2104, RFC2202])
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PollRepContent ::= SEQUENCE OF SEQUENCE {
    +                    certReqId              INTEGER,
    +                    checkAfter             INTEGER,  -- time in seconds
    +                    reason                 PKIFreeText OPTIONAL
    +                }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PollReqContent ::= SEQUENCE OF SEQUENCE {
    +                                   certReqId              INTEGER
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyChallContent ::= SEQUENCE OF Challenge
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ProtectedPart ::= SEQUENCE {
    +                               header    PKIHeader,
    +                               body      PKIBody
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevAnnContent ::= SEQUENCE {
    +                  status              PKIStatus,
    +                  certId              CertId,
    +                  willBeRevokedAt     GeneralizedTime,
    +                  badSinceDate        GeneralizedTime,
    +                  crlDetails          Extensions  OPTIONAL
    +                   -- extra CRL details (e.g., crl number, reason, location, etc.)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevDetails ::= SEQUENCE {
    +                             certDetails         CertTemplate,
    +                              -- allows requester to specify as much as they can about
    +                              -- the cert. for which revocation is requested
    +                              -- (e.g., for cases in which serialNumber is not available)
    +                              crlEntryDetails     Extensions       OPTIONAL
    +                              -- requested crlEntryExtensions
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevRepContent ::= SEQUENCE {
    +                   status       SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
    +                   -- in same order as was sent in RevReqContent
    +                   revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId OPTIONAL,
    +                   -- IDs for which revocation was requested
    +                   -- (same order as status)
    +                   crls     [1] SEQUENCE SIZE (1..MAX) OF CertificateList OPTIONAL
    +                   -- the resulting CRLs (there may be more than one)
    +              }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevReqContent ::= SEQUENCE OF RevDetails
    +            
    + @return a basic ASN.1 object representation. +
    + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attribute ::= SEQUENCE {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues SET OF AttributeValue
    +            }
    +            
    +
    + + Return the first attribute matching the given OBJECT IDENTIFIER + + + Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + empty if there are no attributes of the required type present. + + @param oid type of attribute required. + @return a vector of all the attributes found of type oid. + + + Return a new table with the passed in attribute added. + + @param attrType + @param attrValue + @return + + +
    +            Attributes ::=
    +              SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
    +            
    + @return +
    + + return an AuthEnvelopedData object from a tagged object. + + @param obj the tagged object holding the object we want. + @param isExplicit true if the object is meant to be explicitly + tagged false otherwise. + @throws ArgumentException if the object held by the + tagged object cannot be converted. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            AuthEnvelopedData ::= SEQUENCE {
    +              version CMSVersion,
    +              originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +              recipientInfos RecipientInfos,
    +              authEncryptedContentInfo EncryptedContentInfo,
    +              authAttrs [1] IMPLICIT AuthAttributes OPTIONAL,
    +              mac MessageAuthenticationCode,
    +              unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +            AuthEnvelopedData ::= SEQUENCE {
    +              version CMSVersion,
    +              originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +              recipientInfos RecipientInfos,
    +              authEncryptedContentInfo EncryptedContentInfo,
    +              authAttrs [1] IMPLICIT AuthAttributes OPTIONAL,
    +              mac MessageAuthenticationCode,
    +              unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL }
    +            
    +
    + + return an AuthenticatedData object from a tagged object. + + @param obj the tagged object holding the object we want. + @param isExplicit true if the object is meant to be explicitly + tagged false otherwise. + @throws ArgumentException if the object held by the + tagged object cannot be converted. + + + return an AuthenticatedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             AuthenticatedData ::= SEQUENCE {
    +                   version CMSVersion,
    +                   originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                   recipientInfos RecipientInfos,
    +                   macAlgorithm MessageAuthenticationCodeAlgorithm,
    +                   digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
    +                   encapContentInfo EncapsulatedContentInfo,
    +                   authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
    +                   mac MessageAuthenticationCode,
    +                   unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }
    +            
    +             AuthAttributes ::= SET SIZE (1..MAX) OF Attribute
    +            
    +             UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute
    +            
    +             MessageAuthenticationCode ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             AuthenticatedData ::= SEQUENCE {
    +                   version CMSVersion,
    +                   originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                   recipientInfos RecipientInfos,
    +                   macAlgorithm MessageAuthenticationCodeAlgorithm,
    +                   digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
    +                   encapContentInfo EncapsulatedContentInfo,
    +                   authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
    +                   mac MessageAuthenticationCode,
    +                   unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }
    +            
    +             AuthAttributes ::= SET SIZE (1..MAX) OF Attribute
    +            
    +             UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute
    +            
    +             MessageAuthenticationCode ::= OCTET STRING
    +             
    +
    + + The other Revocation Info arc + id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= Sequence {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + return a CompressedData object from a tagged object. + + @param ato the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return a CompressedData object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= SEQUENCE {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= SEQUENCE {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + return an EncryptedContentInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EncryptedContentInfo ::= Sequence {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +            EncryptedContentInfo ::= SEQUENCE {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +                  EncryptedData ::= SEQUENCE {
    +                                version CMSVersion,
    +                                encryptedContentInfo EncryptedContentInfo,
    +                                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + return an EnvelopedData object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return an EnvelopedData object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= Sequence {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= SEQUENCE {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + return a KekIdentifier object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return a KekIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekIdentifier ::= Sequence {
    +                keyIdentifier OCTET STRING,
    +                date GeneralizedTime OPTIONAL,
    +                other OtherKeyAttribute OPTIONAL
    +            }
    +            
    +
    + + return a KekRecipientInfo object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return a KekRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 4
    +                kekID KekIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + return an KeyAgreeRecipientIdentifier object from a tagged object. + + @param obj the tagged object holding the object we want. + @param isExplicit true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return an KeyAgreeRecipientIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyAgreeRecipientIdentifier ::= CHOICE {
    +                issuerAndSerialNumber IssuerAndSerialNumber,
    +                rKeyId [0] IMPLICIT RecipientKeyIdentifier
    +            }
    +            
    +
    + + return a KeyAgreeRecipientInfo object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return a KeyAgreeRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + * Produce an object suitable for an Asn1OutputStream. + *
    +                     * KeyAgreeRecipientInfo ::= Sequence {
    +                     *     version CMSVersion,  -- always set to 3
    +                     *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
    +                     *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
    +                     *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                     *     recipientEncryptedKeys RecipientEncryptedKeys
    +                     * }
    +            		 *
    +            		 * UserKeyingMaterial ::= OCTET STRING
    +                     * 
    +
    + + return a KeyTransRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyTransRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 0 or 2
    +                rid RecipientIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + +
    +            MetaData ::= SEQUENCE {
    +              hashProtected        BOOLEAN,
    +              fileName             UTF8String OPTIONAL,
    +              mediaType            IA5String OPTIONAL,
    +              otherMetaData        Attributes OPTIONAL
    +            }
    +            
    + @return +
    + + return an OriginatorIdentifierOrKey object from a tagged object. + + @param o the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return an OriginatorIdentifierOrKey object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OriginatorIdentifierOrKey ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier,
    +                 originatorKey [1] OriginatorPublicKey
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + return an OriginatorInfo object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return an OriginatorInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorInfo ::= Sequence {
    +                certs [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
    +            }
    +            
    +
    + + return an OriginatorPublicKey object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return an OriginatorPublicKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorPublicKey ::= Sequence {
    +                algorithm AlgorithmIdentifier,
    +                publicKey BIT STRING
    +            }
    +            
    +
    + + return an OtherKeyAttribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherKeyAttribute ::= Sequence {
    +                keyAttrId OBJECT IDENTIFIER,
    +                keyAttr ANY DEFINED BY keyAttrId OPTIONAL
    +            }
    +            
    +
    + + return a OtherRecipientInfo object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherRecipientInfo ::= Sequence {
    +               oriType OBJECT IDENTIFIER,
    +               oriValue ANY DEFINED BY oriType }
    +            
    +
    + + return a OtherRevocationInfoFormat object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRevocationInfoFormat object from the given object. + + @param obj the object we want converted. + @exception IllegalArgumentException if the object cannot be converted. + + + Produce an object suitable for an ASN1OutputStream. +
    +            OtherRevocationInfoFormat ::= SEQUENCE {
    +                 otherRevInfoFormat OBJECT IDENTIFIER,
    +                 otherRevInfo ANY DEFINED BY otherRevInfoFormat }
    +            
    +
    + + return a PasswordRecipientInfo object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicitly true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return a PasswordRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            PasswordRecipientInfo ::= Sequence {
    +              version CMSVersion,   -- Always set to 0
    +              keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
    +                                        OPTIONAL,
    +             keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +             encryptedKey EncryptedKey }
    +            
    +
    + + return an RecipientEncryptedKey object from a tagged object. + + @param obj the tagged object holding the object we want. + @param isExplicit true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return a RecipientEncryptedKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientEncryptedKey ::= SEQUENCE {
    +                rid KeyAgreeRecipientIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + return a RecipientIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientInfo ::= CHOICE {
    +                ktri KeyTransRecipientInfo,
    +                kari [1] KeyAgreeRecipientInfo,
    +                kekri [2] KekRecipientInfo,
    +                pwri [3] PasswordRecipientInfo,
    +                ori [4] OtherRecipientInfo }
    +            
    +
    + + return a RecipientKeyIdentifier object from a tagged object. + + @param _ato the tagged object holding the object we want. + @param _explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception ArgumentException if the object held by the + tagged object cannot be converted. + + + return a RecipientKeyIdentifier object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientKeyIdentifier ::= Sequence {
    +                 subjectKeyIdentifier SubjectKeyIdentifier,
    +                 date GeneralizedTime OPTIONAL,
    +                 other OtherKeyAttribute OPTIONAL
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + +
    +               ScvpReqRes ::= SEQUENCE {
    +               request  [0] EXPLICIT ContentInfo OPTIONAL,
    +               response     ContentInfo }
    +            
    + @return the ASN.1 primitive representation. +
    + + a signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SignedData ::= Sequence {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + +
    +            SignedData ::= SEQUENCE {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + + return a SignerIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignerIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              SignerInfo ::= Sequence {
    +                  version Version,
    +                  SignerIdentifier sid,
    +                  digestAlgorithm DigestAlgorithmIdentifier,
    +                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
    +                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
    +                  encryptedDigest EncryptedDigest,
    +                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
    +              }
    +            
    +              EncryptedDigest ::= OCTET STRING
    +            
    +              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
    +            
    +              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    +             
    +
    + + creates a time object from a given date - if the date is between 1950 + and 2049 a UTCTime object is Generated, otherwise a GeneralizedTime + is used. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + +
    +            TimeStampAndCRL ::= SEQUENCE {
    +                timeStamp   TimeStampToken,          -- according to RFC 3161
    +                crl         CertificateList OPTIONAL -- according to RFC 5280
    +             }
    +            
    + @return +
    + +
    +            TimeStampTokenEvidence ::=
    +               SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
    +            
    + @return +
    + +
    +            TimeStampedData ::= SEQUENCE {
    +              version              INTEGER { v1(1) },
    +              dataUri              IA5String OPTIONAL,
    +              metaData             MetaData OPTIONAL,
    +              content              OCTET STRING OPTIONAL,
    +              temporalEvidence     Evidence
    +            }
    +            
    + @return +
    + + return an AuthEnvelopedData object from a tagged object. + + @param obj the tagged object holding the object we want. + @param isExplicit true if the object is meant to be explicitly + tagged false otherwise. + @throws ArgumentException if the object held by the + tagged object cannot be converted. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            MQVuserKeyingMaterial ::= SEQUENCE {
    +              ephemeralPublicKey OriginatorPublicKey,
    +              addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
    +            
    +
    + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertId ::= SEQUENCE {
    +                            issuer           GeneralName,
    +                            serialNumber     INTEGER }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new CertReqMsg. + @param certReq CertRequest + @param popo may be null + @param regInfo may be null + + +
    +            CertReqMsg ::= SEQUENCE {
    +                               certReq   CertRequest,
    +                               pop       ProofOfPossession  OPTIONAL,
    +                               -- content depends upon key type
    +                               regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertRequest ::= SEQUENCE {
    +                                 certReqId     INTEGER,          -- ID for matching request and reply
    +                                 certTemplate  CertTemplate,  -- Selected fields of cert to be issued
    +                                 controls      Controls OPTIONAL }   -- Attributes affecting issuance
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             CertTemplate ::= SEQUENCE {
    +                 version      [0] Version               OPTIONAL,
    +                 serialNumber [1] INTEGER               OPTIONAL,
    +                 signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
    +                 issuer       [3] Name                  OPTIONAL,
    +                 validity     [4] OptionalValidity      OPTIONAL,
    +                 subject      [5] Name                  OPTIONAL,
    +                 publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
    +                 issuerUID    [7] UniqueIdentifier      OPTIONAL,
    +                 subjectUID   [8] UniqueIdentifier      OPTIONAL,
    +                 extensions   [9] Extensions            OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + Sets the X.509 version. Note: for X509v3, use 2 here. + + + Sets the issuer unique ID (deprecated in X.509v3) + + + Sets the subject unique ID (deprecated in X.509v3) + + +
    +             CertTemplate ::= SEQUENCE {
    +                 version      [0] Version               OPTIONAL,
    +                 serialNumber [1] INTEGER               OPTIONAL,
    +                 signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
    +                 issuer       [3] Name                  OPTIONAL,
    +                 validity     [4] OptionalValidity      OPTIONAL,
    +                 subject      [5] Name                  OPTIONAL,
    +                 publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
    +                 issuerUID    [7] UniqueIdentifier      OPTIONAL,
    +                 subjectUID   [8] UniqueIdentifier      OPTIONAL,
    +                 extensions   [9] Extensions            OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            EncKeyWithID ::= SEQUENCE {
    +                 privateKey           PrivateKeyInfo,
    +                 identifier CHOICE {
    +                    string               UTF8String,
    +                    generalName          GeneralName
    +                } OPTIONAL
    +            }
    +            
    + @return +
    + +
    +               EncryptedKey ::= CHOICE {
    +                   encryptedValue        EncryptedValue, -- deprecated
    +                   envelopedData     [0] EnvelopedData }
    +                   -- The encrypted private key MUST be placed in the envelopedData
    +                   -- encryptedContentInfo encryptedContent OCTET STRING.
    +            
    +
    + +
    +            EncryptedValue ::= SEQUENCE {
    +                                intendedAlg   [0] AlgorithmIdentifier  OPTIONAL,
    +                                -- the intended algorithm for which the value will be used
    +                                symmAlg       [1] AlgorithmIdentifier  OPTIONAL,
    +                                -- the symmetric algorithm used to encrypt the value
    +                                encSymmKey    [2] BIT STRING           OPTIONAL,
    +                                -- the (encrypted) symmetric key used to encrypt the value
    +                                keyAlg        [3] AlgorithmIdentifier  OPTIONAL,
    +                                -- algorithm used to encrypt the symmetric key
    +                                valueHint     [4] OCTET STRING         OPTIONAL,
    +                                -- a brief description or identifier of the encValue content
    +                                -- (may be meaningful only to the sending entity, and used only
    +                                -- if EncryptedValue might be re-examined by the sending entity
    +                                -- in the future)
    +                                encValue       BIT STRING }
    +                                -- the encrypted value itself
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            OptionalValidity ::= SEQUENCE {
    +                                   notBefore  [0] Time OPTIONAL,
    +                                   notAfter   [1] Time OPTIONAL } --at least one MUST be present
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             PkiArchiveOptions ::= CHOICE {
    +                 encryptedPrivKey     [0] EncryptedKey,
    +                 -- the actual value of the private key
    +                 keyGenParameters     [1] KeyGenParameters,
    +                 -- parameters which allow the private key to be re-generated
    +                 archiveRemGenPrivKey [2] BOOLEAN }
    +                 -- set to TRUE if sender wishes receiver to archive the private
    +                 -- key of a key pair that the receiver generates in response to
    +                 -- this request; set to FALSE if no archival is desired.
    +            
    +
    + +
    +            PkiPublicationInfo ::= SEQUENCE {
    +                             action     INTEGER {
    +                                            dontPublish (0),
    +                                            pleasePublish (1) },
    +                             pubInfos  SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
    +            -- pubInfos MUST NOT be present if action is "dontPublish"
    +            -- (if action is "pleasePublish" and pubInfos is omitted,
    +            -- "dontCare" is assumed)
    +            
    + @return a basic ASN.1 object representation. +
    + + Password-based MAC value for use with POPOSigningKeyInput. + + + Creates a new PKMACValue. + @param params parameters for password-based MAC + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + + Creates a new PKMACValue. + @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + +
    +            PKMACValue ::= SEQUENCE {
    +                 algId  AlgorithmIdentifier,
    +                 -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
    +                 -- parameter value is PBMParameter
    +                 value  BIT STRING }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoPrivKey ::= CHOICE {
    +                   thisMessage       [0] BIT STRING,         -- Deprecated
    +                    -- possession is proven in this message (which contains the private
    +                    -- key itself (encrypted for the CA))
    +                   subsequentMessage [1] SubsequentMessage,
    +                    -- possession will be proven in a subsequent message
    +                   dhMAC             [2] BIT STRING,         -- Deprecated
    +                   agreeMAC          [3] PKMACValue,
    +                   encryptedKey      [4] EnvelopedData }
    +            
    +
    + + Creates a new Proof of Possession object for a signing key. + @param poposkIn the PopoSigningKeyInput structure, or null if the + CertTemplate includes both subject and publicKey values. + @param aid the AlgorithmIdentifier used to sign the proof of possession. + @param signature a signature over the DER-encoded value of poposkIn, + or the DER-encoded value of certReq if poposkIn is null. + + +
    +            PopoSigningKey ::= SEQUENCE {
    +                                 poposkInput           [0] PopoSigningKeyInput OPTIONAL,
    +                                 algorithmIdentifier   AlgorithmIdentifier,
    +                                 signature             BIT STRING }
    +             -- The signature (using "algorithmIdentifier") is on the
    +             -- DER-encoded value of poposkInput.  NOTE: If the CertReqMsg
    +             -- certReq CertTemplate contains the subject and publicKey values,
    +             -- then poposkInput MUST be omitted and the signature MUST be
    +             -- computed on the DER-encoded value of CertReqMsg certReq.  If
    +             -- the CertReqMsg certReq CertTemplate does not contain the public
    +             -- key and subject values, then poposkInput MUST be present and
    +             -- MUST be signed.  This strategy ensures that the public key is
    +             -- not present in both the poposkInput and CertReqMsg certReq
    +             -- CertTemplate fields.
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PopoSigningKeyInput with sender name as authInfo. + + + Creates a new PopoSigningKeyInput using password-based MAC. + + + Returns the sender field, or null if authInfo is publicKeyMac + + + Returns the publicKeyMac field, or null if authInfo is sender + + +
    +            PopoSigningKeyInput ::= SEQUENCE {
    +                   authInfo             CHOICE {
    +                                            sender              [0] GeneralName,
    +                                            -- used only if an authenticated identity has been
    +                                            -- established for the sender (e.g., a DN from a
    +                                            -- previously-issued and currently-valid certificate
    +                                            publicKeyMac        PKMacValue },
    +                                            -- used if no authenticated GeneralName currently exists for
    +                                            -- the sender; publicKeyMac contains a password-based MAC
    +                                            -- on the DER-encoded value of publicKey
    +                   publicKey           SubjectPublicKeyInfo }  -- from CertTemplate
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a ProofOfPossession with type raVerified. + + + Creates a ProofOfPossession for a signing key. + + + Creates a ProofOfPossession for key encipherment or agreement. + @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + + +
    +            ProofOfPossession ::= CHOICE {
    +                                      raVerified        [0] NULL,
    +                                      -- used if the RA has already verified that the requester is in
    +                                      -- possession of the private key
    +                                      signature         [1] PopoSigningKey,
    +                                      keyEncipherment   [2] PopoPrivKey,
    +                                      keyAgreement      [3] PopoPrivKey }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            SinglePubInfo ::= SEQUENCE {
    +                   pubMethod    INTEGER {
    +                      dontCare    (0),
    +                      x500        (1),
    +                      web         (2),
    +                      ldap        (3) },
    +                  pubLocation  GeneralName OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + table of the available named parameters for GOST 3410-2001. + + + return the ECDomainParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + return the named curve name represented by the given object identifier. + + +
    +             Gost28147-89-Parameters ::=
    +                           SEQUENCE {
    +                                   iv                   Gost28147-89-IV,
    +                                   encryptionParamSet   OBJECT IDENTIFIER
    +                            }
    +            
    +               Gost28147-89-IV ::= OCTET STRING (SIZE (8))
    +             
    +
    + + table of the available named parameters for GOST 3410-94. + + + return the GOST3410ParamSetParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for parameters + contained in this structure. + + + + RFC 3126: 4.3.1 Certificate Values Attribute Definition + + CertificateValues ::= SEQUENCE OF Certificate + + + + +
    +            CommitmentTypeIndication ::= SEQUENCE {
    +                 commitmentTypeId   CommitmentTypeIdentifier,
    +                 commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
    +                         CommitmentTypeQualifier OPTIONAL }
    +            
    +
    + + Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + +
    +               CommitmentTypeQualifier ::= SEQUENCE {
    +                   commitmentTypeIdentifier  CommitmentTypeIdentifier,
    +                   qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
    +             
    +
    + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + @param qualifier the qualifier, defined by the above field. + + + Creates a new CommitmentTypeQualifier instance. + + @param as CommitmentTypeQualifier structure + encoded as an Asn1Sequence. + + + Returns a DER-encodable representation of this instance. + + @return a Asn1Object value + + + + RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + + CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlIdentifier ::= SEQUENCE + { + crlissuer Name, + crlIssuedTime UTCTime, + crlNumber INTEGER OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CRLListID ::= SEQUENCE + { + crls SEQUENCE OF CrlValidatedID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlOcspRef ::= SEQUENCE { + crlids [0] CRLListID OPTIONAL, + ocspids [1] OcspListID OPTIONAL, + otherRev [2] OtherRevRefs OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlValidatedID ::= SEQUENCE { + crlHash OtherHash, + crlIdentifier CrlIdentifier OPTIONAL} + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspIdentifier ::= SEQUENCE { + ocspResponderID ResponderID, + -- As in OCSP response data + producedAt GeneralizedTime + -- As in OCSP response data + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspListID ::= SEQUENCE { + ocspResponses SEQUENCE OF OcspResponsesID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspResponsesID ::= SEQUENCE { + ocspIdentifier OcspIdentifier, + ocspRepHash OtherHash OPTIONAL + } + + + + + + + OtherCertID ::= SEQUENCE { + otherCertHash OtherHash, + issuerSerial IssuerSerial OPTIONAL + } + + + + + + + OtherHash ::= CHOICE { + sha1Hash OtherHashValue, -- This contains a SHA-1 hash + otherHash OtherHashAlgAndValue + } + + OtherHashValue ::= OCTET STRING + + + + + + Summary description for OtherHashAlgAndValue. + + + + OtherHashAlgAndValue ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashValue OtherHashValue + } + + OtherHashValue ::= OCTET STRING + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OtherRevRefs ::= SEQUENCE + { + otherRevRefType OtherRevRefType, + otherRevRefs ANY DEFINED BY otherRevRefType + } + + OtherRevRefType ::= OBJECT IDENTIFIER + + + + + + RFC 3126: 4.3.2 Revocation Values Attribute Definition + + OtherRevVals ::= SEQUENCE + { + otherRevValType OtherRevValType, + otherRevVals ANY DEFINED BY otherRevValType + } + + OtherRevValType ::= OBJECT IDENTIFIER + + + + + + + OtherSigningCertificate ::= SEQUENCE { + certs SEQUENCE OF OtherCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL + } + + + + + + RFC 5126: 6.3.4. revocation-values Attribute Definition + + RevocationValues ::= SEQUENCE { + crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + otherRevVals [2] OtherRevVals OPTIONAL + } + + + + + + + SigPolicyQualifierInfo ::= SEQUENCE { + sigPolicyQualifierId SigPolicyQualifierId, + sigQualifier ANY DEFINED BY sigPolicyQualifierId + } + + SigPolicyQualifierId ::= OBJECT IDENTIFIER + + + + + + + SignaturePolicyId ::= SEQUENCE { + sigPolicyIdentifier SigPolicyId, + sigPolicyHash SigPolicyHash, + sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + } + + SigPolicyId ::= OBJECT IDENTIFIER + + SigPolicyHash ::= OtherHashAlgAndValue + + + + + + + SignaturePolicyIdentifier ::= CHOICE { + SignaturePolicyId SignaturePolicyId, + SignaturePolicyImplied SignaturePolicyImplied + } + + SignaturePolicyImplied ::= NULL + + + + + +
    +              SignerAttribute ::= SEQUENCE OF CHOICE {
    +                  claimedAttributes   [0] ClaimedAttributes,
    +                  certifiedAttributes [1] CertifiedAttributes }
    +            
    +              ClaimedAttributes ::= SEQUENCE OF Attribute
    +              CertifiedAttributes ::= AttributeCertificate -- as defined in RFC 3281: see clause 4.1.
    +             
    +
    + + Signer-Location attribute (RFC3126). + +
    +               SignerLocation ::= SEQUENCE {
    +                   countryName        [0] DirectoryString OPTIONAL,
    +                   localityName       [1] DirectoryString OPTIONAL,
    +                   postalAddress      [2] PostalAddress OPTIONAL }
    +            
    +               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
    +             
    +
    + +
    +               SignerLocation ::= SEQUENCE {
    +                   countryName        [0] DirectoryString OPTIONAL,
    +                   localityName       [1] DirectoryString OPTIONAL,
    +                   postalAddress      [2] PostalAddress OPTIONAL }
    +            
    +               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
    +            
    +               DirectoryString ::= CHOICE {
    +                     teletexString           TeletexString (SIZE (1..MAX)),
    +                     printableString         PrintableString (SIZE (1..MAX)),
    +                     universalString         UniversalString (SIZE (1..MAX)),
    +                     utf8String              UTF8String (SIZE (1.. MAX)),
    +                     bmpString               BMPString (SIZE (1..MAX)) }
    +             
    +
    + + constructor + + +
    +            ContentHints ::= SEQUENCE {
    +              contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
    +              contentType ContentType }
    +            
    +
    + + Create from OCTET STRING whose octets represent the identifier. + + + Create from byte array representing the identifier. + + + The definition of ContentIdentifier is +
    +            ContentIdentifier ::=  OCTET STRING
    +            
    + id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 7 } +
    + + constructor + + +
    +            EssCertID ::= SEQUENCE {
    +                certHash Hash,
    +                issuerSerial IssuerSerial OPTIONAL }
    +            
    +
    + +
    +             EssCertIDv2 ::=  SEQUENCE {
    +                 hashAlgorithm     AlgorithmIdentifier
    +                          DEFAULT {algorithm id-sha256},
    +                 certHash          Hash,
    +                 issuerSerial      IssuerSerial OPTIONAL
    +             }
    +            
    +             Hash ::= OCTET STRING
    +            
    +             IssuerSerial ::= SEQUENCE {
    +                 issuer         GeneralNames,
    +                 serialNumber   CertificateSerialNumber
    +             }
    +             
    +
    + + constructor + + +
    +             OtherCertID ::= SEQUENCE {
    +                 otherCertHash    OtherHash,
    +                 issuerSerial     IssuerSerial OPTIONAL }
    +            
    +             OtherHash ::= CHOICE {
    +                 sha1Hash     OCTET STRING,
    +                 otherHash    OtherHashAlgAndValue }
    +            
    +             OtherHashAlgAndValue ::= SEQUENCE {
    +                 hashAlgorithm    AlgorithmIdentifier,
    +                 hashValue        OCTET STRING }
    +            
    +             
    +
    + + constructors + + + The definition of OtherSigningCertificate is +
    +            OtherSigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF OtherCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-ets-otherSigCert OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 19 } +
    + + constructors + + + The definition of SigningCertificate is +
    +            SigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 12 } +
    + + The definition of SigningCertificateV2 is +
    +            SigningCertificateV2 ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertIDv2,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 47 } +
    + + The CscaMasterList object. This object can be wrapped in a + CMSSignedData to be published in LDAP. + +
    +             CscaMasterList ::= SEQUENCE {
    +               version                CscaMasterListVersion,
    +               certList               SET OF Certificate }
    +               
    +             CscaMasterListVersion :: INTEGER {v0(0)}
    +             
    +
    + + The DataGroupHash object. +
    +             DataGroupHash  ::=  SEQUENCE {
    +                  dataGroupNumber         DataGroupNumber,
    +                  dataGroupHashValue     OCTET STRING }
    +            
    +             DataGroupNumber ::= INTEGER {
    +                     dataGroup1    (1),
    +                     dataGroup1    (2),
    +                     dataGroup1    (3),
    +                     dataGroup1    (4),
    +                     dataGroup1    (5),
    +                     dataGroup1    (6),
    +                     dataGroup1    (7),
    +                     dataGroup1    (8),
    +                     dataGroup1    (9),
    +                     dataGroup1    (10),
    +                     dataGroup1    (11),
    +                     dataGroup1    (12),
    +                     dataGroup1    (13),
    +                     dataGroup1    (14),
    +                     dataGroup1    (15),
    +                     dataGroup1    (16) }
    +            
    +             
    +
    + + The LDSSecurityObject object (V1.8). +
    +             LDSSecurityObject ::= SEQUENCE {
    +               version                LDSSecurityObjectVersion,
    +               hashAlgorithm          DigestAlgorithmIdentifier,
    +               dataGroupHashValues    SEQUENCE SIZE (2..ub-DataGroups) OF DataHashGroup,
    +               ldsVersionInfo         LDSVersionInfo OPTIONAL
    +                 -- if present, version MUST be v1 }
    +            
    +             DigestAlgorithmIdentifier ::= AlgorithmIdentifier,
    +            
    +             LDSSecurityObjectVersion :: INTEGER {V0(0)}
    +             
    +
    + +
    +            LDSVersionInfo ::= SEQUENCE {
    +               ldsVersion PRINTABLE STRING
    +               unicodeVersion PRINTABLE STRING
    +             }
    +            
    + @return +
    + + The id-isismtt-cp-accredited OID indicates that the certificate is a + qualified certificate according to Directive 1999/93/EC of the European + Parliament and of the Council of 13 December 1999 on a Community + Framework for Electronic Signatures, which additionally conforms the + special requirements of the SigG and has been issued by an accredited CA. + + + Certificate extensionDate of certificate generation + +
    +            		DateOfCertGenSyntax ::= GeneralizedTime
    +             
    +
    + + Attribute to indicate that the certificate holder may sign in the name of + a third person. May also be used as extension in a certificate. + + + Attribute to indicate admissions to certain professions. May be used as + attribute in attribute certificate or as extension in a certificate + + + Monetary limit for transactions. The QcEuMonetaryLimit QC statement MUST + be used in new certificates in place of the extension/attribute + MonetaryLimit since January 1, 2004. For the sake of backward + compatibility with certificates already in use, SigG conforming + components MUST support MonetaryLimit (as well as QcEuLimitValue). + + + A declaration of majority. May be used as attribute in attribute + certificate or as extension in a certificate + + + + Serial number of the smart card containing the corresponding private key + +
    +            		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
    +             
    +
    + + + Reference for a file of a smartcard that stores the public key of this + certificate and that is used as �security anchor�. + +
    +            		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
    +             
    +
    + + Some other restriction regarding the usage of this certificate. May be + used as attribute in attribute certificate or as extension in a + certificate. + +
    +            		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction +
    + + + (Single)Request extension: Clients may include this extension in a + (single) Request to request the responder to send the certificate in the + response message along with the status information. Besides the LDAP + service, this extension provides another mechanism for the distribution + of certificates, which MAY optionally be provided by certificate + repositories. + +
    +            		RetrieveIfAllowed ::= BOOLEAN
    +             
    +
    + + SingleOCSPResponse extension: The certificate requested by the client by + inserting the RetrieveIfAllowed extension in the request, will be + returned in this extension. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.RequestedCertificate + + + Base ObjectIdentifier for naming authorities + + + SingleOCSPResponse extension: Date, when certificate has been published + in the directory and status information has become available. Currently, + accrediting authorities enforce that SigG-conforming OCSP servers include + this extension in the responses. + +
    +            		CertInDirSince ::= GeneralizedTime
    +             
    +
    + + Hash of a certificate in OCSP. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + + +
    +            		NameAtBirth ::= DirectoryString(SIZE(1..64)
    +             
    + + Used in + {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} +
    + + Some other information of non-restrictive nature regarding the usage of + this certificate. May be used as attribute in atribute certificate or as + extension in a certificate. + +
    +                          AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax +
    + + Indicates that an attribute certificate exists, which limits the + usability of this public key certificate. Whenever verifying a signature + with the help of this certificate, the content of the corresponding + attribute certificate should be concerned. This extension MUST be + included in a PKC, if a corresponding attribute certificate (having the + PKC as base certificate) contains some attribute that restricts the + usability of the PKC too. Attribute certificates with restricting content + MUST always be included in the signed document. + +
    +            		LiabilityLimitationFlagSyntax ::= BOOLEAN
    +             
    +
    + + ISIS-MTT PROFILE: The responder may include this extension in a response to + send the hash of the requested certificate to the responder. This hash is + cryptographically bound to the certificate and serves as evidence that the + certificate is known to the responder (i.e. it has been issued and is present + in the directory). Hence, this extension is a means to provide a positive + statement of availability as described in T8.[8]. As explained in T13.[1], + clients may rely on this information to be able to validate signatures after + the expiry of the corresponding certificate. Hence, clients MUST support this + extension. If a positive statement of availability is to be delivered, this + extension syntax and OID MUST be used. +

    +

    +

    +                CertHash ::= SEQUENCE {
    +                  hashAlgorithm AlgorithmIdentifier,
    +                  certificateHash OCTET STRING
    +                }
    +            
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertHash: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param hashAlgorithm The hash algorithm identifier. + @param certificateHash The hash of the whole DER encoding of the certificate. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @return an Asn1Object +
    + + ISIS-MTT-Optional: The certificate requested by the client by inserting the + RetrieveIfAllowed extension in the request, will be returned in this + extension. +

    + ISIS-MTT-SigG: The signature act allows publishing certificates only then, + when the certificate owner gives his isExplicit permission. Accordingly, there + may be �nondownloadable� certificates, about which the responder must provide + status information, but MUST NOT include them in the response. Clients may + get therefore the following three kind of answers on a single request + including the RetrieveIfAllowed extension: +

      +
    • a) the responder supports the extension and is allowed to publish the + certificate: RequestedCertificate returned including the requested + certificate
    • +
    • b) the responder supports the extension but is NOT allowed to publish + the certificate: RequestedCertificate returned including an empty OCTET + STRING
    • +
    • c) the responder does not support the extension: RequestedCertificate is + not included in the response
    • +
    + Clients requesting RetrieveIfAllowed MUST be able to handle these cases. If + any of the OCTET STRING options is used, it MUST contain the DER encoding of + the requested certificate. +

    +

    +                       RequestedCertificate ::= CHOICE {
    +                         Certificate Certificate,
    +                         publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                         attributeCertificate [1] EXPLICIT OCTET STRING
    +                       }
    +            
    +
    + + Constructor from a given details. +

    + Only one parameter can be given. All other must be null. + + @param certificate Given as Certificate + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                        RequestedCertificate ::= CHOICE {
    +                          Certificate Certificate,
    +                          publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                          attributeCertificate [1] EXPLICIT OCTET STRING
    +                        }
    +             
    + + @return an Asn1Object +
    + + Some other information of non-restrictive nature regarding the usage of this + certificate. + +
    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    +
    + + Constructor from a given details. + + @param information The describtion of the information. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +             
    + + @return an Asn1Object +
    + + Attribute to indicate admissions to certain professions. +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + ProfessionInfo ::= SEQUENCE + { + namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL, + professionItems SEQUENCE OF DirectoryString (SIZE(1..128)), + professionOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, + registrationNumber PrintableString(SIZE(1..128)) OPTIONAL, + addProfessionInfo OCTET STRING OPTIONAL + } +

    +

    +

    + ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + supports the following concepts and requirements: +

      +
    • External institutions (e.g. professional associations, chambers, unions, + administrative bodies, companies, etc.), which are responsible for granting + and verifying professional admissions, are indicated by means of the data + field admissionAuthority. An admission authority is indicated by a + GeneralName object. Here an X.501 directory name (distinguished name) can be + indicated in the field directoryName, a URL address can be indicated in the + field uniformResourceIdentifier, and an object identifier can be indicated in + the field registeredId.
    • +
    • The names of authorities which are responsible for the administration of + title registers are indicated in the data field namingAuthority. The name of + the authority can be identified by an object identifier in the field + namingAuthorityId, by means of a text string in the field + namingAuthorityText, by means of a URL address in the field + namingAuthorityUrl, or by a combination of them. For example, the text string + can contain the name of the authority, the country and the name of the title + register. The URL-option refers to a web page which contains lists with + officially registered professions (text and possibly OID) as well as + further information on these professions. Object identifiers for the + component namingAuthorityId are grouped under the OID-branch + id-isis-at-namingAuthorities and must be applied for.
    • +
    • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + for an application form and http://www.teletrust.de/links.asp?id=30220,11 + for an overview of registered naming authorities.
    • +
    • By means of the data type ProfessionInfo certain professions, + specializations, disciplines, fields of activity, etc. are identified. A + profession is represented by one or more text strings, resp. profession OIDs + in the fields professionItems and professionOIDs and by a registration number + in the field registrationNumber. An indication in text form must always be + present, whereas the other indications are optional. The component + addProfessionInfo may contain additional applicationspecific information in + DER-encoded form.
    • +
    +

    + By means of different namingAuthority-OIDs or profession OIDs hierarchies of + professions, specializations, disciplines, fields of activity, etc. can be + expressed. The issuing admission authority should always be indicated (field + admissionAuthority), whenever a registration number is presented. Still, + information on admissions can be given without indicating an admission or a + naming authority by the exclusive use of the component professionItems. In + this case the certification authority is responsible for the verification of + the admission information. +

    +

    +

    + This attribute is single-valued. Still, several admissions can be captured in + the sequence structure of the component contentsOfAdmissions of + AdmissionSyntax or in the component professionInfos of Admissions. The + component admissionAuthority of AdmissionSyntax serves as default value for + the component admissionAuthority of Admissions. Within the latter component + the default value can be overwritten, in case that another authority is + responsible. The component namingAuthority of Admissions serves as a default + value for the component namingAuthority of ProfessionInfo. Within the latter + component the default value can be overwritten, in case that another naming + authority needs to be recorded. +

    + The length of the string objects is limited to 128 characters. It is + recommended to indicate a namingAuthorityURL in all issued attribute + certificates. If a namingAuthorityURL is indicated, the field professionItems + of ProfessionInfo should contain only registered titles. If the field + professionOIDs exists, it has to contain the OIDs of the professions listed + in professionItems in the same order. In general, the field professionInfos + should contain only one entry, unless the admissions that are to be listed + are logically connected (e.g. they have been issued under the same admission + number). + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + ProfessionInfo ::= SEQUENCE + { + namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL, + professionItems SEQUENCE OF DirectoryString (SIZE(1..128)), + professionOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, + registrationNumber PrintableString(SIZE(1..128)) OPTIONAL, + addProfessionInfo OCTET STRING OPTIONAL + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. + + @param admissionAuthority The admission authority. + @param contentsOfAdmissions The admissions. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + ProfessionInfo ::= SEQUENCE + { + namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL, + professionItems SEQUENCE OF DirectoryString (SIZE(1..128)), + professionOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, + registrationNumber PrintableString(SIZE(1..128)) OPTIONAL, + addProfessionInfo OCTET STRING OPTIONAL + } +

    + + @return an Asn1Object +
    + + @return Returns the admissionAuthority if present, null otherwise. + + + @return Returns the contentsOfAdmissions. + + + An Admissions structure. +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             

    +

    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    + Parameter professionInfos is mandatory. + + @param admissionAuthority The admission authority. + @param namingAuthority The naming authority. + @param professionInfos The profession infos. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   Admissions ::= SEQUENCE
    +                   {
    +                     admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                     namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                     professionInfos SEQUENCE OF ProfessionInfo
    +                   }
    +             

    +

    + + @return an Asn1Object +
    + + A declaration of majority. +

    +

    +                      DeclarationOfMajoritySyntax ::= CHOICE
    +                      {
    +                        notYoungerThan [0] IMPLICIT INTEGER,
    +                        fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                        {
    +                          fullAge BOOLEAN DEFAULT TRUE,
    +                          country PrintableString (SIZE(2))
    +                        }
    +                        dateOfBirth [2] IMPLICIT GeneralizedTime
    +                      }
    +            
    +

    + fullAgeAtCountry indicates the majority of the owner with respect to the laws + of a specific country. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                       DeclarationOfMajoritySyntax ::= CHOICE
    +                       {
    +                         notYoungerThan [0] IMPLICIT INTEGER,
    +                         fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                         {
    +                           fullAge BOOLEAN DEFAULT TRUE,
    +                           country PrintableString (SIZE(2))
    +                         }
    +                         dateOfBirth [2] IMPLICIT GeneralizedTime
    +                       }
    +             
    + + @return an Asn1Object +
    + + @return notYoungerThan if that's what we are, -1 otherwise + + + Monetary limit for transactions. The QcEuMonetaryLimit QC statement MUST be + used in new certificates in place of the extension/attribute MonetaryLimit + since January 1, 2004. For the sake of backward compatibility with + certificates already in use, components SHOULD support MonetaryLimit (as well + as QcEuLimitValue). +

    + Indicates a monetary limit within which the certificate holder is authorized + to act. (This value DOES NOT express a limit on the liability of the + certification authority). +

    +

    +               MonetaryLimitSyntax ::= SEQUENCE
    +               {
    +                 currency PrintableString (SIZE(3)),
    +                 amount INTEGER,
    +                 exponent INTEGER
    +               }
    +            
    +

    + currency must be the ISO code. +

    + value = amount�10*exponent + + + Constructor from a given details. +

    +

    + value = amount�10^exponent + + @param currency The currency. Must be the ISO code. + @param amount The amount + @param exponent The exponent + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                MonetaryLimitSyntax ::= SEQUENCE
    +                {
    +                  currency PrintableString (SIZE(3)),
    +                  amount INTEGER,
    +                  exponent INTEGER
    +                }
    +             
    + + @return an Asn1Object +
    + + Names of authorities which are responsible for the administration of title + registers. + +
    +                        NamingAuthority ::= SEQUENCE 
    +                        {
    +                          namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                          namingAuthorityUrl IA5String OPTIONAL,
    +                          namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                        }
    +            
    + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + +
    + + Profession OIDs should always be defined under the OID branch of the + responsible naming authority. At the time of this writing, the work group + �Recht, Wirtschaft, Steuern� (�Law, Economy, Taxes�) is registered as the + first naming authority under the OID id-isismtt-at-namingAuthorities. + + + Constructor from Asn1Sequence. +

    +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @param seq The ASN.1 sequence. +
    + + @return Returns the namingAuthorityID. + + + @return Returns the namingAuthorityText. + + + @return Returns the namingAuthorityUrl. + + + Constructor from given details. +

    + All parameters can be combined. + + @param namingAuthorityID ObjectIdentifier for naming authority. + @param namingAuthorityUrl URL for naming authority. + @param namingAuthorityText Textual representation of naming authority. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @return an Asn1Object +
    + + Attribute to indicate that the certificate holder may sign in the name of a + third person. +

    + ISIS-MTT PROFILE: The corresponding ProcurationSyntax contains either the + name of the person who is represented (subcomponent thirdPerson) or a + reference to his/her base certificate (in the component signingFor, + subcomponent certRef), furthermore the optional components country and + typeSubstitution to indicate the country whose laws apply, and respectively + the type of procuration (e.g. manager, procuration, custody). +

    +

    + ISIS-MTT PROFILE: The GeneralName MUST be of type directoryName and MAY only + contain: - RFC3039 attributes, except pseudonym (countryName, commonName, + surname, givenName, serialNumber, organizationName, organizationalUnitName, + stateOrProvincename, localityName, postalAddress) and - SubjectDirectoryName + attributes (title, dateOfBirth, placeOfBirth, gender, countryOfCitizenship, + countryOfResidence and NameAtBirth). +

    +
    +                          ProcurationSyntax ::= SEQUENCE {
    +                            country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
    +                            typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
    +                            signingFor [3] EXPLICIT SigningFor 
    +                          }
    +                          
    +                          SigningFor ::= CHOICE 
    +                          { 
    +                            thirdPerson GeneralName,
    +                            certRef IssuerSerial 
    +                          }
    +            
    + +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                           ProcurationSyntax ::= SEQUENCE {
    +                             country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
    +                             typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
    +                             signingFor [3] EXPLICIT SigningFor
    +                           }
    +             

    + SigningFor ::= CHOICE + { + thirdPerson GeneralName, + certRef IssuerSerial + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param certRef Reference to certificate of the person who is represented. + + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param thirdPerson The GeneralName of the person who is represented. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           ProcurationSyntax ::= SEQUENCE {
    +                             country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
    +                             typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
    +                             signingFor [3] EXPLICIT SigningFor
    +                           }
    +             

    + SigningFor ::= CHOICE + { + thirdPerson GeneralName, + certRef IssuerSerial + } +

    + + @return an Asn1Object +
    + + Professions, specializations, disciplines, fields of activity, etc. + +
    +                          ProfessionInfo ::= SEQUENCE 
    +                          {
    +                            namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
    +                            professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
    +                            professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
    +                            registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
    +                            addProfessionInfo OCTET STRING OPTIONAL 
    +                          }
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax +
    + + Rechtsanw�ltin + + + Rechtsanwalt + + + Rechtsbeistand + + + Steuerberaterin + + + Steuerberater + + + Steuerbevollm�chtigte + + + Steuerbevollm�chtigter + + + Notarin + + + Notar + + + Notarvertreterin + + + Notarvertreter + + + Notariatsverwalterin + + + Notariatsverwalter + + + Wirtschaftspr�ferin + + + Wirtschaftspr�fer + + + Vereidigte Buchpr�ferin + + + Vereidigter Buchpr�fer + + + Patentanw�ltin + + + Patentanwalt + + + Constructor from Asn1Sequence. +

    +

    +

    +                           ProfessionInfo ::= SEQUENCE
    +                           {
    +                             namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
    +                             professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
    +                             professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
    +                             registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
    +                             addProfessionInfo OCTET STRING OPTIONAL
    +                           }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. +

    + professionItems is mandatory, all other parameters are + optional. + + @param namingAuthority The naming authority. + @param professionItems Directory strings of the profession. + @param professionOids DERObjectIdentfier objects for the + profession. + @param registrationNumber Registration number. + @param addProfessionInfo Additional infos in encoded form. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           ProfessionInfo ::= SEQUENCE
    +                           {
    +                             namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
    +                             professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
    +                             professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
    +                             registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
    +                             addProfessionInfo OCTET STRING OPTIONAL
    +                           }
    +             
    + + @return an Asn1Object +
    + + @return Returns the addProfessionInfo. + + + @return Returns the namingAuthority. + + + @return Returns the professionItems. + + + @return Returns the professionOids. + + + @return Returns the registrationNumber. + + + Some other restriction regarding the usage of this certificate. +

    +

    +             RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +            
    +
    + + Constructor from DirectoryString. +

    + The DirectoryString is of type RestrictionSyntax: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @param restriction A IAsn1String. +
    + + Constructor from a given details. + + @param restriction The description of the restriction. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             

    +

    + + @return an Asn1Object +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            cast5CBCParameters ::= Sequence {
    +                                      iv         OCTET STRING DEFAULT 0,
    +                                             -- Initialization vector
    +                                      keyLength  Integer
    +                                             -- Key length, in bits
    +                                 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            IDEA-CBCPar ::= Sequence {
    +                                 iv    OCTET STRING OPTIONAL -- exactly 8 octets
    +                             }
    +            
    +
    + + The NetscapeCertType object. +
    +               NetscapeCertType ::= BIT STRING {
    +                    SSLClient               (0),
    +                    SSLServer               (1),
    +                    S/MIME                  (2),
    +                    Object Signing          (3),
    +                    Reserved                (4),
    +                    SSL CA                  (5),
    +                    S/MIME CA               (6),
    +                    Object Signing CA       (7) }
    +            
    +
    + + Basic constructor. + + @param usage - the bitwise OR of the Key Usage flags giving the + allowed uses for the key. + e.g. (X509NetscapeCertType.sslCA | X509NetscapeCertType.smimeCA) + + + This is designed to parse + the PublicKeyAndChallenge created by the KEYGEN tag included by + Mozilla based browsers. +
    +              PublicKeyAndChallenge ::= SEQUENCE {
    +                spki SubjectPublicKeyInfo,
    +                challenge IA5STRING
    +              }
    +            
    +              
    +
    + + Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3 + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + From RFC 3657 + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicOcspResponse       ::= Sequence {
    +                 tbsResponseData      ResponseData,
    +                 signatureAlgorithm   AlgorithmIdentifier,
    +                 signature            BIT STRING,
    +                 certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CertID          ::=     Sequence {
    +                hashAlgorithm       AlgorithmIdentifier,
    +                issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +                issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +                serialNumber        CertificateSerialNumber }
    +            
    +
    + + create a CertStatus object with a tag of zero. + + + Produce an object suitable for an Asn1OutputStream. +
    +             CertStatus ::= CHOICE {
    +                             good        [0]     IMPLICIT Null,
    +                             revoked     [1]     IMPLICIT RevokedInfo,
    +                             unknown     [2]     IMPLICIT UnknownInfo }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlID ::= Sequence {
    +                crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
    +                crlNum               [1]     EXPLICIT Integer OPTIONAL,
    +                crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspRequest     ::=     Sequence {
    +                tbsRequest                  TBSRequest,
    +                optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspResponse ::= Sequence {
    +                responseStatus         OcspResponseStatus,
    +                responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
    +            
    +
    + + The OcspResponseStatus enumeration. +
    +            OcspResponseStatus ::= Enumerated {
    +                successful            (0),  --Response has valid confirmations
    +                malformedRequest      (1),  --Illegal confirmation request
    +                internalError         (2),  --Internal error in issuer
    +                tryLater              (3),  --Try again later
    +                                            --(4) is not used
    +                sigRequired           (5),  --Must sign the request
    +                unauthorized          (6)   --Request unauthorized
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Request         ::=     Sequence {
    +                reqCert                     CertID,
    +                singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponderID ::= CHOICE {
    +                 byName          [1] Name,
    +                 byKey           [2] KeyHash }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseBytes ::=       Sequence {
    +                responseType   OBJECT IDENTIFIER,
    +                response       OCTET STRING }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseData ::= Sequence {
    +                version              [0] EXPLICIT Version DEFAULT v1,
    +                responderID              ResponderID,
    +                producedAt               GeneralizedTime,
    +                responses                Sequence OF SingleResponse,
    +                responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RevokedInfo ::= Sequence {
    +                 revocationTime              GeneralizedTime,
    +                 revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ServiceLocator ::= Sequence {
    +                issuer    Name,
    +                locator   AuthorityInfoAccessSyntax OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Signature       ::=     Sequence {
    +                signatureAlgorithm      AlgorithmIdentifier,
    +                signature               BIT STRING,
    +                certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             SingleResponse ::= Sequence {
    +                     certID                       CertID,
    +                     certStatus                   CertStatus,
    +                     thisUpdate                   GeneralizedTime,
    +                     nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
    +                     singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            TBSRequest      ::=     Sequence {
    +                version             [0]     EXPLICIT Version DEFAULT v1,
    +                requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +                requestList                 Sequence OF Request,
    +                requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + Pkcs10 Certfication request object. +
    +            CertificationRequest ::= Sequence {
    +              certificationRequestInfo  CertificationRequestInfo,
    +              signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
    +              signature                 BIT STRING
    +            }
    +            
    +
    + + Pkcs10 CertificationRequestInfo object. +
    +              CertificationRequestInfo ::= Sequence {
    +               version             Integer { v1(0) } (v1,...),
    +               subject             Name,
    +               subjectPKInfo   SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
    +               attributes          [0] Attributes{{ CRIAttributes }}
    +              }
    +            
    +              Attributes { ATTRIBUTE:IOSet } ::= Set OF Attr{{ IOSet }}
    +            
    +              Attr { ATTRIBUTE:IOSet } ::= Sequence {
    +                type    ATTRIBUTE.&id({IOSet}),
    +                values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
    +              }
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + The EncryptedData object. +
    +                  EncryptedData ::= Sequence {
    +                       version Version,
    +                       encryptedContentInfo EncryptedContentInfo
    +                  }
    +            
    +            
    +                  EncryptedContentInfo ::= Sequence {
    +                      contentType ContentType,
    +                      contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
    +                      encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +                }
    +            
    +                EncryptedContent ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             EncryptedPrivateKeyInfo ::= Sequence {
    +                  encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
    +                  encryptedData EncryptedData
    +             }
    +            
    +             EncryptedData ::= OCTET STRING
    +            
    +             KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
    +                      ... -- For local profiles
    +             }
    +             
    +
    + +
    +            MacData ::= SEQUENCE {
    +                mac      DigestInfo,
    +                macSalt  OCTET STRING,
    +                iterations INTEGER DEFAULT 1
    +                -- Note: The default is for historic reasons and its use is deprecated. A
    +                -- higher value, like 1024 is recommended.
    +            
    + @return the basic DERObject construction. +
    + + the infamous Pfx from Pkcs12 + + + write out an RSA private key with its associated information + as described in Pkcs8. +
    +                  PrivateKeyInfo ::= Sequence {
    +                                          version Version,
    +                                          privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},
    +                                          privateKey PrivateKey,
    +                                          attributes [0] IMPLICIT Attributes OPTIONAL
    +                                      }
    +                  Version ::= Integer {v1(0)} (v1,...)
    +            
    +                  PrivateKey ::= OCTET STRING
    +            
    +                  Attributes ::= Set OF Attr
    +             
    +
    + + The default version + + +
    +              RSAES-OAEP-params ::= SEQUENCE {
    +                 hashAlgorithm      [0] OAEP-PSSDigestAlgorithms     DEFAULT sha1,
    +                 maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
    +                 pSourceAlgorithm   [2] PKCS1PSourceAlgorithms  DEFAULT pSpecifiedEmpty
    +               }
    +            
    +               OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
    +                 { OID id-sha1 PARAMETERS NULL   }|
    +                 { OID id-sha256 PARAMETERS NULL }|
    +                 { OID id-sha384 PARAMETERS NULL }|
    +                 { OID id-sha512 PARAMETERS NULL },
    +                 ...  -- Allows for future expansion --
    +               }
    +               PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
    +                 { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
    +                ...  -- Allows for future expansion --
    +               }
    +               PKCS1PSourceAlgorithms    ALGORITHM-IDENTIFIER ::= {
    +                 { OID id-pSpecified PARAMETERS OCTET STRING },
    +                 ...  -- Allows for future expansion --
    +              }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + This outputs the key in Pkcs1v2 format. +
    +                  RsaPrivateKey ::= Sequence {
    +                                      version Version,
    +                                      modulus Integer, -- n
    +                                      publicExponent Integer, -- e
    +                                      privateExponent Integer, -- d
    +                                      prime1 Integer, -- p
    +                                      prime2 Integer, -- q
    +                                      exponent1 Integer, -- d mod (p-1)
    +                                      exponent2 Integer, -- d mod (q-1)
    +                                      coefficient Integer -- (inverse of q) mod p
    +                                  }
    +            
    +                  Version ::= Integer
    +             
    +

    This routine is written to output Pkcs1 version 0, private keys.

    +
    + + The default version + + +
    +             RSASSA-PSS-params ::= SEQUENCE {
    +               hashAlgorithm      [0] OAEP-PSSDigestAlgorithms  DEFAULT sha1,
    +                maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
    +                saltLength         [2] INTEGER  DEFAULT 20,
    +                trailerField       [3] TrailerField  DEFAULT trailerFieldBC
    +              }
    +            
    +             OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
    +                { OID id-sha1 PARAMETERS NULL   }|
    +                { OID id-sha256 PARAMETERS NULL }|
    +                { OID id-sha384 PARAMETERS NULL }|
    +                { OID id-sha512 PARAMETERS NULL },
    +                ...  -- Allows for future expansion --
    +             }
    +            
    +             PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
    +               { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
    +                ...  -- Allows for future expansion --
    +             }
    +            
    +             TrailerField ::= INTEGER { trailerFieldBC(1) }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + a Pkcs#7 signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignedData ::= Sequence {
    +                 version Version,
    +                 digestAlgorithms DigestAlgorithmIdentifiers,
    +                 contentInfo ContentInfo,
    +                 certificates
    +                     [0] IMPLICIT ExtendedCertificatesAndCertificates
    +                              OPTIONAL,
    +                 crls
    +                     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                 signerInfos SignerInfos }
    +            
    +
    + + a Pkcs#7 signer info object. + + + Produce an object suitable for an Asn1OutputStream. +
    +              SignerInfo ::= Sequence {
    +                  version Version,
    +                  issuerAndSerialNumber IssuerAndSerialNumber,
    +                  digestAlgorithm DigestAlgorithmIdentifier,
    +                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
    +                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
    +                  encryptedDigest EncryptedDigest,
    +                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
    +              }
    +            
    +              EncryptedDigest ::= OCTET STRING
    +            
    +              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
    +            
    +              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    +             
    +
    + + the elliptic curve private key object from SEC 1 + + + ECPrivateKey ::= SEQUENCE { + version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + privateKey OCTET STRING, + parameters [0] Parameters OPTIONAL, + publicKey [1] BIT STRING OPTIONAL } + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + EllipticCurve OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) certicom(132) curve(0) + } + + + Handler class for dealing with S/MIME Capabilities + + + general preferences + + + encryption algorithms preferences + + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + returns an ArrayList with 0 or more objects of all the capabilities + matching the passed in capability Oid. If the Oid passed is null the + entire set is returned. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapabilities ::= Sequence OF SMIMECapability
    +            
    +
    + + general preferences + + + encryption algorithms preferences + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapability ::= Sequence {
    +                capabilityID OBJECT IDENTIFIER,
    +                parameters ANY DEFINED BY capabilityID OPTIONAL
    +            }
    +            
    +
    + + Handler for creating a vector S/MIME Capabilities + + + The SmimeEncryptionKeyPreference object. +
    +            SmimeEncryptionKeyPreference ::= CHOICE {
    +                issuerAndSerialNumber   [0] IssuerAndSerialNumber,
    +                receipentKeyId          [1] RecipientKeyIdentifier,
    +                subjectAltKeyIdentifier [2] SubjectKeyIdentifier
    +            }
    +            
    +
    + + @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + + + elliptic curves defined in "ECC Brainpool Standard Curves and Curve Generation" + http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
    +            Accuracy ::= SEQUENCE {
    +                        seconds        INTEGER              OPTIONAL,
    +                        millis     [0] INTEGER  (1..999)    OPTIONAL,
    +                        micros     [1] INTEGER  (1..999)    OPTIONAL
    +                        }
    +            
    +
    + + @param o + @return a MessageImprint object. + + +
    +               MessageImprint ::= SEQUENCE  {
    +                  hashAlgorithm                AlgorithmIdentifier,
    +                  hashedMessage                OCTET STRING  }
    +            
    +
    + +
    +            
    +                 TstInfo ::= SEQUENCE  {
    +                    version                      INTEGER  { v1(1) },
    +                    policy                       TSAPolicyId,
    +                    messageImprint               MessageImprint,
    +                      -- MUST have the same value as the similar field in
    +                      -- TimeStampReq
    +                    serialNumber                 INTEGER,
    +                     -- Time-Stamping users MUST be ready to accommodate integers
    +                     -- up to 160 bits.
    +                    genTime                      GeneralizedTime,
    +                    accuracy                     Accuracy                 OPTIONAL,
    +                    ordering                     BOOLEAN             DEFAULT FALSE,
    +                    nonce                        INTEGER                  OPTIONAL,
    +                      -- MUST be present if the similar field was present
    +                      -- in TimeStampReq.  In that case it MUST have the same value.
    +                    tsa                          [0] GeneralName          OPTIONAL,
    +                    extensions                   [1] IMPLICIT Extensions   OPTIONAL  }
    +            
    +             
    +
    + +
    +            TimeStampReq ::= SEQUENCE  {
    +             version                      INTEGER  { v1(1) },
    +             messageImprint               MessageImprint,
    +               --a hash algorithm OID and the hash value of the data to be
    +               --time-stamped
    +             reqPolicy             TSAPolicyId              OPTIONAL,
    +             nonce                 INTEGER                  OPTIONAL,
    +             certReq               BOOLEAN                  DEFAULT FALSE,
    +             extensions            [0] IMPLICIT Extensions  OPTIONAL
    +            }
    +            
    +
    + +
    +            TimeStampResp ::= SEQUENCE  {
    +              status                  PkiStatusInfo,
    +              timeStampToken          TimeStampToken     OPTIONAL  }
    +            
    +
    + + dump a Der object as a formatted string with indentation + + @param obj the Asn1Object to be dumped out. + + + dump out a DER object as a formatted string, in non-verbose mode + + @param obj the Asn1Encodable to be dumped out. + @return the resulting string. + + + Dump out the object as a string + + @param obj the Asn1Encodable to be dumped out. + @param verbose if true, dump out the contents of octet and bit strings. + @return the resulting string. + + +
    +             DirectoryString ::= CHOICE {
    +               teletexString               TeletexString (SIZE (1..MAX)),
    +               printableString             PrintableString (SIZE (1..MAX)),
    +               universalString             UniversalString (SIZE (1..MAX)),
    +               utf8String                  UTF8String (SIZE (1..MAX)),
    +               bmpString                   BMPString (SIZE (1..MAX))  }
    +            
    +
    + + The AccessDescription object. +
    +            AccessDescription  ::=  SEQUENCE {
    +                  accessMethod          OBJECT IDENTIFIER,
    +                  accessLocation        GeneralName  }
    +            
    +
    + + create an AccessDescription with the oid and location provided. + + + + @return the access method. + + + + @return the access location + + + + Return the OID in the Algorithm entry of this identifier. + + + + + Return the parameters structure in the Parameters entry of this identifier. + + + + Produce an object suitable for an Asn1OutputStream. +
    +                 AlgorithmIdentifier ::= Sequence {
    +                                       algorithm OBJECT IDENTIFIER,
    +                                       parameters ANY DEFINED BY algorithm OPTIONAL }
    +            
    +
    + + + Don't use this one if you are trying to be RFC 3281 compliant. + Use it for v1 attribute certificates only. + + Our GeneralNames structure + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertIssuer ::= CHOICE {
    +                  v1Form   GeneralNames,  -- MUST NOT be used in this
    +                                          -- profile
    +                  v2Form   [0] V2Form     -- v2 only
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertValidityPeriod  ::= Sequence {
    +                  notBeforeTime  GeneralizedTime,
    +                  notAfterTime   GeneralizedTime
    +             }
    +            
    +
    + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + @param obj + @return + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttributeCertificate ::= Sequence {
    +                  acinfo               AttributeCertificateInfo,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              AttributeCertificateInfo ::= Sequence {
    +                   version              AttCertVersion -- version is v2,
    +                   holder               Holder,
    +                   issuer               AttCertIssuer,
    +                   signature            AlgorithmIdentifier,
    +                   serialNumber         CertificateSerialNumber,
    +                   attrCertValidityPeriod   AttCertValidityPeriod,
    +                   attributes           Sequence OF Attr,
    +                   issuerUniqueID       UniqueIdentifier OPTIONAL,
    +                   extensions           Extensions OPTIONAL
    +              }
    +            
    +              AttCertVersion ::= Integer { v2(1) }
    +             
    +
    + + The AuthorityInformationAccess object. +
    +             id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
    +            
    +             AuthorityInfoAccessSyntax  ::=
    +                  Sequence SIZE (1..MAX) OF AccessDescription
    +             AccessDescription  ::=  Sequence {
    +                   accessMethod          OBJECT IDENTIFIER,
    +                   accessLocation        GeneralName  }
    +            
    +             id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
    +             id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
    +             id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
    +             
    +
    + + create an AuthorityInformationAccess with the oid and location provided. + + + The AuthorityKeyIdentifier object. +
    +             id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
    +            
    +               AuthorityKeyIdentifier ::= Sequence {
    +                  keyIdentifier             [0] IMPLICIT KeyIdentifier           OPTIONAL,
    +                  authorityCertIssuer       [1] IMPLICIT GeneralNames            OPTIONAL,
    +                  authorityCertSerialNumber [2] IMPLICIT CertificateSerialNumber OPTIONAL  }
    +            
    +               KeyIdentifier ::= OCTET STRING
    +             
    + +
    + + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
    +            	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
    +            		 *       publicKey.getEncoded()).readObject());
    +                     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
    +                     * 
    + * + * +
    + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided as well. + + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided. + + + create an AuthorityKeyIdentifier with a precomputed key identifier + + + create an AuthorityKeyIdentifier with a precomupted key identifier + and the GeneralNames tag and the serial number provided as well. + + + Produce an object suitable for an Asn1OutputStream. + + + create a cA=true object for the given path length constraint. + + @param pathLenConstraint + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicConstraints := Sequence {
    +               cA                  Boolean DEFAULT FALSE,
    +               pathLenConstraint   Integer (0..MAX) OPTIONAL
    +            }
    +            
    +
    + + Return the distribution points making up the sequence. + + @return DistributionPoint[] + + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
    +            
    +
    + + The CRLNumber object. +
    +            CRLNumber::= Integer(0..MAX)
    +            
    +
    + + The CRLReason enumeration. +
    +            CRLReason ::= Enumerated {
    +             unspecified             (0),
    +             keyCompromise           (1),
    +             cACompromise            (2),
    +             affiliationChanged      (3),
    +             superseded              (4),
    +             cessationOfOperation    (5),
    +             certificateHold         (6),
    +             removeFromCRL           (8),
    +             privilegeWithdrawn      (9),
    +             aACompromise           (10)
    +            }
    +            
    +
    + + CertPolicyId, used in the CertificatePolicies and PolicyMappings + X509V3 Extensions. + +
    +                 CertPolicyId ::= OBJECT IDENTIFIER
    +             
    +
    + + PKIX RFC-2459 + + The X.509 v2 CRL syntax is as follows. For signature calculation, + the data that is to be signed is ASN.1 Der encoded. + +
    +             CertificateList  ::=  Sequence  {
    +                  tbsCertList          TbsCertList,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING  }
    +             
    +
    + + This class helps to support crossCerfificatePairs in a LDAP directory + according RFC 2587 + +
    +                 crossCertificatePairATTRIBUTE::={
    +                   WITH SYNTAX   CertificatePair
    +                   EQUALITY MATCHING RULE certificatePairExactMatch
    +                   ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
    +             
    + +
    The forward elements of the crossCertificatePair attribute of a + CA's directory entry shall be used to store all, except self-issued + certificates issued to this CA. Optionally, the reverse elements of the + crossCertificatePair attribute, of a CA's directory entry may contain a + subset of certificates issued by this CA to other CAs. When both the forward + and the reverse elements are present in a single attribute value, issuer name + in one certificate shall match the subject name in the other and vice versa, + and the subject public key in one certificate shall be capable of verifying + the digital signature on the other certificate and vice versa. + + When a reverse element is present, the forward element value and the reverse + element value need not be stored in the same attribute value; in other words, + they can be stored in either a single attribute value or two attribute + values.
    + +
    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertificatePair: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param forward Certificates issued to this CA. + @param reverse Certificates issued by this CA to other CAs. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @return a DERObject +
    + + @return Returns the forward. + + + @return Returns the reverse. + + + Construct a CertificatePolicies object containing one PolicyInformation. + + @param name the name to be contained. + + + Produce an object suitable for an ASN1OutputStream. +
    +            CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
    +            
    +
    + + The DigestInfo object. +
    +            DigestInfo::=Sequence{
    +                     digestAlgorithm  AlgorithmIdentifier,
    +                     digest OCTET STRING }
    +            
    +
    + + DisplayText class, used in + CertificatePolicies X509 V3 extensions (in policy qualifiers). + +

    It stores a string in a chosen encoding. +

    +             DisplayText ::= CHOICE {
    +                  ia5String        IA5String      (SIZE (1..200)),
    +                  visibleString    VisibleString  (SIZE (1..200)),
    +                  bmpString        BMPString      (SIZE (1..200)),
    +                  utf8String       UTF8String     (SIZE (1..200)) }
    +             

    + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Constant corresponding to ia5String encoding. + + + + Constant corresponding to bmpString encoding. + + + + Constant corresponding to utf8String encoding. + + + + Constant corresponding to visibleString encoding. + + + + Describe constant DisplayTextMaximumSize here. + + + + Creates a new DisplayText instance. + + @param type the desired encoding type for the text. + @param text the text to store. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. + + @param text the text to encapsulate. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. +

    Useful when reading back a DisplayText class + from it's Asn1Encodable form.

    + + @param contents an Asn1Encodable instance. +
    + + Returns the stored string object. + + @return the stored text as a string. + + + The DistributionPoint object. +
    +            DistributionPoint ::= Sequence {
    +                 distributionPoint [0] DistributionPointName OPTIONAL,
    +                 reasons           [1] ReasonFlags OPTIONAL,
    +                 cRLIssuer         [2] GeneralNames OPTIONAL
    +            }
    +            
    +
    + + The DistributionPointName object. +
    +            DistributionPointName ::= CHOICE {
    +                fullName                 [0] GeneralNames,
    +                nameRelativeToCRLIssuer  [1] RDN
    +            }
    +            
    +
    + + The extendedKeyUsage object. +
    +                 extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
    +            
    +
    + + Returns all extended key usages. + The returned ArrayList contains DerObjectIdentifier instances. + @return An ArrayList with all key purposes. + + + The GeneralName object. +
    +             GeneralName ::= CHOICE {
    +                  otherName                       [0]     OtherName,
    +                  rfc822Name                      [1]     IA5String,
    +                  dNSName                         [2]     IA5String,
    +                  x400Address                     [3]     ORAddress,
    +                  directoryName                   [4]     Name,
    +                  ediPartyName                    [5]     EDIPartyName,
    +                  uniformResourceIdentifier       [6]     IA5String,
    +                  iPAddress                       [7]     OCTET STRING,
    +                  registeredID                    [8]     OBJECT IDENTIFIER}
    +            
    +             OtherName ::= Sequence {
    +                  type-id    OBJECT IDENTIFIER,
    +                  value      [0] EXPLICIT ANY DEFINED BY type-id }
    +            
    +             EDIPartyName ::= Sequence {
    +                  nameAssigner            [0]     DirectoryString OPTIONAL,
    +                  partyName               [1]     DirectoryString }
    +             
    +
    + + When the subjectAltName extension contains an Internet mail address, + the address MUST be included as an rfc822Name. The format of an + rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822]. + + When the subjectAltName extension contains a domain name service + label, the domain name MUST be stored in the dNSName (an IA5String). + The name MUST be in the "preferred name syntax," as specified by RFC + 1034 [RFC 1034]. + + When the subjectAltName extension contains a URI, the name MUST be + stored in the uniformResourceIdentifier (an IA5String). The name MUST + be a non-relative URL, and MUST follow the URL syntax and encoding + rules specified in [RFC 1738]. The name must include both a scheme + (e.g., "http" or "ftp") and a scheme-specific-part. The scheme- + specific-part must include a fully qualified domain name or IP + address as the host. + + When the subjectAltName extension contains a iPAddress, the address + MUST be stored in the octet string in "network byte order," as + specified in RFC 791 [RFC 791]. The least significant bit (LSB) of + each octet is the LSB of the corresponding byte in the network + address. For IP Version 4, as specified in RFC 791, the octet string + MUST contain exactly four octets. For IP Version 6, as specified in + RFC 1883, the octet string MUST contain exactly sixteen octets [RFC + 1883]. + + + Create a GeneralName for the given tag from the passed in string. +

    + This constructor can handle: +

      +
    • rfc822Name
    • +
    • iPAddress
    • +
    • directoryName
    • +
    • dNSName
    • +
    • uniformResourceIdentifier
    • +
    • registeredID
    • +
    + For x400Address, otherName and ediPartyName there is no common string + format defined. +

    + Note: A directory name can be encoded in different ways into a byte + representation. Be aware of this if the byte representation is used for + comparing results. +

    + + @param tag tag number + @param name string representation of name + @throws ArgumentException if the string encoding is not correct or + not supported. +
    + + Construct a GeneralNames object containing one GeneralName. + The name to be contained. + + + Produce an object suitable for an Asn1OutputStream. +
    +            GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
    +            
    +
    + + Class for containing a restriction object subtrees in NameConstraints. See + RFC 3280. + +
    +            
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.NameConstraints + +
    + + Constructor from a given details. + + According RFC 3280, the minimum and maximum fields are not used with any + name forms, thus minimum MUST be zero, and maximum MUST be absent. +

    + If minimum is null, zero is assumed, if + maximum is null, maximum is absent.

    + + @param baseName + A restriction. + @param minimum + Minimum + + @param maximum + Maximum +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @return a DERObject +
    + + The Holder object. +

    + For an v2 attribute certificate this is: + +

    +                       Holder ::= SEQUENCE {
    +                             baseCertificateID   [0] IssuerSerial OPTIONAL,
    +                                      -- the issuer and serial number of
    +                                      -- the holder's Public Key Certificate
    +                             entityName          [1] GeneralNames OPTIONAL,
    +                                      -- the name of the claimant or role
    +                             objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
    +                                      -- used to directly authenticate the holder,
    +                                      -- for example, an executable
    +                       }
    +            
    +

    +

    + For an v1 attribute certificate this is: + +

    +                    subject CHOICE {
    +                     baseCertificateID [0] IssuerSerial,
    +                     -- associated with a Public Key Certificate
    +                     subjectName [1] GeneralNames },
    +                     -- associated with a name
    +            
    +

    +
    + + Constructor for a holder for an v1 attribute certificate. + + @param tagObj The ASN.1 tagged holder object. + + + Constructor for a holder for an v2 attribute certificate. * + + @param seq The ASN.1 sequence. + + + Constructs a holder from a IssuerSerial. + @param baseCertificateID The IssuerSerial. + @param version The version of the attribute certificate. + + + Returns 1 for v2 attribute certificates or 0 for v1 attribute + certificates. + @return The version of the attribute certificate. + + + Constructs a holder with an entityName for v2 attribute certificates or + with a subjectName for v1 attribute certificates. + + @param entityName The entity or subject name. + + + Constructs a holder with an entityName for v2 attribute certificates or + with a subjectName for v1 attribute certificates. + + @param entityName The entity or subject name. + @param version The version of the attribute certificate. + + + Constructs a holder from an object digest info. + + @param objectDigestInfo The object digest info object. + + + Returns the entityName for an v2 attribute certificate or the subjectName + for an v1 attribute certificate. + + @return The entityname or subjectname. + + + The Holder object. +
    +             Holder ::= Sequence {
    +                   baseCertificateID   [0] IssuerSerial OPTIONAL,
    +                            -- the issuer and serial number of
    +                            -- the holder's Public Key Certificate
    +                   entityName          [1] GeneralNames OPTIONAL,
    +                            -- the name of the claimant or role
    +                   objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
    +                            -- used to directly authenticate the holder,
    +                            -- for example, an executable
    +             }
    +            
    +
    + + Implementation of IetfAttrSyntax as specified by RFC3281. + + + + + + +
    +            
    +              IetfAttrSyntax ::= Sequence {
    +                policyAuthority [0] GeneralNames OPTIONAL,
    +                values Sequence OF CHOICE {
    +                  octets OCTET STRING,
    +                  oid OBJECT IDENTIFIER,
    +                  string UTF8String
    +                }
    +              }
    +            
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             IssuerSerial  ::=  Sequence {
    +                  issuer         GeneralNames,
    +                  serial         CertificateSerialNumber,
    +                  issuerUid      UniqueIdentifier OPTIONAL
    +             }
    +            
    +
    + +
    +            IssuingDistributionPoint ::= SEQUENCE { 
    +              distributionPoint          [0] DistributionPointName OPTIONAL, 
    +              onlyContainsUserCerts      [1] BOOLEAN DEFAULT FALSE, 
    +              onlyContainsCACerts        [2] BOOLEAN DEFAULT FALSE, 
    +              onlySomeReasons            [3] ReasonFlags OPTIONAL, 
    +              indirectCRL                [4] BOOLEAN DEFAULT FALSE,
    +              onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
    +            
    +
    + + Constructor from given details. + + @param distributionPoint + May contain an URI as pointer to most current CRL. + @param onlyContainsUserCerts Covers revocation information for end certificates. + @param onlyContainsCACerts Covers revocation information for CA certificates. + + @param onlySomeReasons + Which revocation reasons does this point cover. + @param indirectCRL + If true then the CRL contains revocation + information about certificates ssued by other CAs. + @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + + + Constructor from Asn1Sequence + + + @return Returns the distributionPoint. + + + @return Returns the onlySomeReasons. + + + The KeyPurposeID object. +
    +                KeyPurposeID ::= OBJECT IDENTIFIER
    +            
    +
    + + The KeyUsage object. +
    +                id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
    +            
    +                KeyUsage ::= BIT STRING {
    +                     digitalSignature        (0),
    +                     nonRepudiation          (1),
    +                     keyEncipherment         (2),
    +                     dataEncipherment        (3),
    +                     keyAgreement            (4),
    +                     keyCertSign             (5),
    +                     cRLSign                 (6),
    +                     encipherOnly            (7),
    +                     decipherOnly            (8) }
    +             
    +
    + + Basic constructor. + + @param usage - the bitwise OR of the Key Usage flags giving the + allowed uses for the key. + e.g. (KeyUsage.keyEncipherment | KeyUsage.dataEncipherment) + + + Constructor from a given details. + +

    permitted and excluded are Vectors of GeneralSubtree objects.

    + + @param permitted Permitted subtrees + @param excluded Excluded subtrees +
    + + NoticeReference class, used in + CertificatePolicies X509 V3 extensions + (in policy qualifiers). + +
    +              NoticeReference ::= Sequence {
    +                  organization     DisplayText,
    +                  noticeNumbers    Sequence OF Integer }
    +            
    +             
    + + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Creates a new NoticeReference instance. + + @param organization a String value + @param numbers a Vector value + + + Creates a new NoticeReference instance. + + @param organization a String value + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. + + @param organization displayText + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. +

    Useful for reconstructing a NoticeReference + instance from its encodable/encoded form.

    + + @param as an Asn1Sequence value obtained from either + calling @{link ToAsn1Object()} for a NoticeReference + instance or from parsing it from a Der-encoded stream. +
    + + Describe ToAsn1Object method here. + + @return a Asn1Object value + + + ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + +
    +             
    +               ObjectDigestInfo ::= SEQUENCE {
    +                    digestedObjectType  ENUMERATED {
    +                            publicKey            (0),
    +                            publicKeyCert        (1),
    +                            otherObjectTypes     (2) },
    +                                    -- otherObjectTypes MUST NOT
    +                                    -- be used in this profile
    +                    otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
    +                    digestAlgorithm     AlgorithmIdentifier,
    +                    objectDigest        BIT STRING
    +               }
    +              
    +            
    + +
    + + The public key is hashed. + + + The public key certificate is hashed. + + + An other object is hashed. + + + Constructor from given details. +

    + If digestedObjectType is not {@link #publicKeyCert} or + {@link #publicKey} otherObjectTypeID must be given, + otherwise it is ignored.

    + + @param digestedObjectType The digest object type. + @param otherObjectTypeID The object type ID for + otherObjectDigest. + @param digestAlgorithm The algorithm identifier for the hash. + @param objectDigest The hash value. +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +             
    +               ObjectDigestInfo ::= SEQUENCE {
    +                    digestedObjectType  ENUMERATED {
    +                            publicKey            (0),
    +                            publicKeyCert        (1),
    +                            otherObjectTypes     (2) },
    +                                    -- otherObjectTypes MUST NOT
    +                                    -- be used in this profile
    +                    otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
    +                    digestAlgorithm     AlgorithmIdentifier,
    +                    objectDigest        BIT STRING
    +               }
    +              
    +            
    +
    + + PolicyMappings V3 extension, described in RFC3280. +
    +                PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
    +                  issuerDomainPolicy      CertPolicyId,
    +                  subjectDomainPolicy     CertPolicyId }
    +             
    + + @see RFC 3280, section 4.2.1.6 +
    + + Creates a new PolicyMappings instance. + + @param seq an Asn1Sequence constructed as specified + in RFC 3280 + + + Creates a new PolicyMappings instance. + + @param mappings a HashMap value that maps + string oids + to other string oids. + + + PolicyQualifierId, used in the CertificatePolicies + X509V3 extension. + +
    +                id-qt          OBJECT IDENTIFIER ::=  { id-pkix 2 }
    +                id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
    +                id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
    +              PolicyQualifierId ::=
    +                   OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
    +             
    +
    + + Policy qualifiers, used in the X509V3 CertificatePolicies + extension. + +
    +               PolicyQualifierInfo ::= Sequence {
    +                   policyQualifierId  PolicyQualifierId,
    +                   qualifier          ANY DEFINED BY policyQualifierId }
    +             
    +
    + + Creates a new PolicyQualifierInfo instance. + + @param policyQualifierId a PolicyQualifierId value + @param qualifier the qualifier, defined by the above field. + + + Creates a new PolicyQualifierInfo containing a + cPSuri qualifier. + + @param cps the CPS (certification practice statement) uri as a + string. + + + Creates a new PolicyQualifierInfo instance. + + @param as PolicyQualifierInfo X509 structure + encoded as an Asn1Sequence. + + + Returns a Der-encodable representation of this instance. + + @return a Asn1Object value + + + +
    +            PrivateKeyUsagePeriod ::= SEQUENCE
    +            {
    +            notBefore       [0]     GeneralizedTime OPTIONAL,
    +            notAfter        [1]     GeneralizedTime OPTIONAL }
    +            
    +
    +
    + + This outputs the key in Pkcs1v2 format. +
    +                 RSAPublicKey ::= Sequence {
    +                                     modulus Integer, -- n
    +                                     publicExponent Integer, -- e
    +                                 }
    +            
    +
    + + The ReasonFlags object. +
    +            ReasonFlags ::= BIT STRING {
    +               unused(0),
    +               keyCompromise(1),
    +               cACompromise(2),
    +               affiliationChanged(3),
    +               superseded(4),
    +               cessationOfOperation(5),
    +               certficateHold(6)
    +            }
    +            
    +
    + + @param reasons - the bitwise OR of the Key Reason flags giving the + allowed uses for the key. + + + Implementation of the RoleSyntax object as specified by the RFC3281. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + RoleSyntax factory method. + @param obj the object used to construct an instance of + RoleSyntax. It must be an instance of RoleSyntax + or Asn1Sequence. + @return the instance of RoleSyntax built from the + supplied object. + @throws java.lang.ArgumentException if the object passed + to the factory is not an instance of RoleSyntax or + Asn1Sequence. + + + Constructor. + @param roleAuthority the role authority of this RoleSyntax. + @param roleName the role name of this RoleSyntax. + + + Constructor. Invoking this constructor is the same as invoking + new RoleSyntax(null, roleName). + @param roleName the role name of this RoleSyntax. + + + Utility constructor. Takes a string argument representing + the role name, builds a GeneralName to hold the role name + and calls the constructor that takes a GeneralName. + @param roleName + + + Constructor that builds an instance of RoleSyntax by + extracting the encoded elements from the Asn1Sequence + object supplied. + @param seq an instance of Asn1Sequence that holds + the encoded elements used to build this RoleSyntax. + + + Gets the role authority of this RoleSyntax. + @return an instance of GeneralNames holding the + role authority of this RoleSyntax. + + + Gets the role name of this RoleSyntax. + @return an instance of GeneralName holding the + role name of this RoleSyntax. + + + Gets the role name as a java.lang.string object. + @return the role name of this RoleSyntax represented as a + string object. + + + Gets the role authority as a string[] object. + @return the role authority of this RoleSyntax represented as a + string[] array. + + + Implementation of the method ToAsn1Object as + required by the superclass ASN1Encodable. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + This extension may contain further X.500 attributes of the subject. See also + RFC 3039. + +
    +                 SubjectDirectoryAttributes ::= Attributes
    +                 Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                 Attribute ::= SEQUENCE
    +                 {
    +                   type AttributeType
    +                   values SET OF AttributeValue
    +                 }
    +            
    +                 AttributeType ::= OBJECT IDENTIFIER
    +                 AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. +
    + + Constructor from Asn1Sequence. + + The sequence is of type SubjectDirectoryAttributes: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @param seq + The ASN.1 sequence. +
    + + Constructor from an ArrayList of attributes. + + The ArrayList consists of attributes of type {@link Attribute Attribute} + + @param attributes The attributes. + + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @return a DERObject +
    + + @return Returns the attributes. + + + The SubjectKeyIdentifier object. +
    +            SubjectKeyIdentifier::= OCTET STRING
    +            
    +
    + + Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + from SubjectPublicKeyInfo as defined in RFC3280. + + @param spki the subject public key info. + + + Return a RFC 3280 type 1 key identifier. As in: +
    +            (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
    +            value of the BIT STRING subjectPublicKey (excluding the tag,
    +            length, and number of unused bits).
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + Return a RFC 3280 type 2 key identifier. As in: +
    +            (2) The keyIdentifier is composed of a four bit type field with
    +            the value 0100 followed by the least significant 60 bits of the
    +            SHA-1 hash of the value of the BIT STRING subjectPublicKey.
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + The object that contains the public key stored in a certficate. +

    + The GetEncoded() method in the public keys in the JCE produces a DER + encoded one of these.

    +
    + + for when the public key is an encoded object - if the bitstring + can't be decoded this routine raises an IOException. + + @exception IOException - if the bit string doesn't represent a Der + encoded object. + + + for when the public key is raw bits... + + + Produce an object suitable for an Asn1OutputStream. +
    +            SubjectPublicKeyInfo ::= Sequence {
    +                                     algorithm AlgorithmIdentifier,
    +                                     publicKey BIT STRING }
    +            
    +
    + + PKIX RFC-2459 - TbsCertList object. +
    +            TbsCertList  ::=  Sequence  {
    +                 version                 Version OPTIONAL,
    +                                              -- if present, shall be v2
    +                 signature               AlgorithmIdentifier,
    +                 issuer                  Name,
    +                 thisUpdate              Time,
    +                 nextUpdate              Time OPTIONAL,
    +                 revokedCertificates     Sequence OF Sequence  {
    +                      userCertificate         CertificateSerialNumber,
    +                      revocationDate          Time,
    +                      crlEntryExtensions      Extensions OPTIONAL
    +                                                    -- if present, shall be v2
    +                                           }  OPTIONAL,
    +                 crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
    +                                                    -- if present, shall be v2
    +                                           }
    +            
    +
    + + The TbsCertificate object. +
    +            TbsCertificate ::= Sequence {
    +                 version          [ 0 ]  Version DEFAULT v1(0),
    +                 serialNumber            CertificateSerialNumber,
    +                 signature               AlgorithmIdentifier,
    +                 issuer                  Name,
    +                 validity                Validity,
    +                 subject                 Name,
    +                 subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                 issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
    +                 subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
    +                 extensions        [ 3 ] Extensions OPTIONAL
    +                 }
    +            
    +

    + Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + will parse them, but you really shouldn't be creating new ones.

    +
    + + Target structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + +

    + The targetCert field is currently not supported and must not be used + according to RFC 3281.

    +
    + + Creates an instance of a Target from the given object. +

    + obj can be a Target or a {@link Asn1TaggedObject}

    + + @param obj The object. + @return A Target instance. + @throws ArgumentException if the given object cannot be + interpreted as Target. +
    + + Constructor from Asn1TaggedObject. + + @param tagObj The tagged object. + @throws ArgumentException if the encoding is wrong. + + + Constructor from given details. +

    + Exactly one of the parameters must be not null.

    + + @param type the choice type to apply to the name. + @param name the general name. + @throws ArgumentException if type is invalid. +
    + + @return Returns the targetGroup. + + + @return Returns the targetName. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + + @return an Asn1Object +
    + + Target information extension for attributes certificates according to RFC + 3281. + +
    +                      SEQUENCE OF Targets
    +            
    + +
    + + Creates an instance of a TargetInformation from the given object. +

    + obj can be a TargetInformation or a {@link Asn1Sequence}

    + + @param obj The object. + @return A TargetInformation instance. + @throws ArgumentException if the given object cannot be interpreted as TargetInformation. +
    + + Constructor from a Asn1Sequence. + + @param seq The Asn1Sequence. + @throws ArgumentException if the sequence does not contain + correctly encoded Targets elements. + + + Returns the targets in this target information extension. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + Constructs a target information from a single targets element. + According to RFC 3281 only one targets element must be produced. + + @param targets A Targets instance. + + + According to RFC 3281 only one targets element must be produced. If + multiple targets are given they must be merged in + into one targets element. + + @param targets An array with {@link Targets}. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                     SEQUENCE OF Targets
    +            
    + +

    + According to RFC 3281 only one targets element must be produced. If + multiple targets are given in the constructor they are merged into one + targets element. If this was produced from a + {@link Org.BouncyCastle.Asn1.Asn1Sequence} the encoding is kept.

    + + @return an Asn1Object +
    + + Targets structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                       Targets ::= SEQUENCE OF Target
    +                      
    +                       Target  ::= CHOICE {
    +                         targetName          [0] GeneralName,
    +                         targetGroup         [1] GeneralName,
    +                         targetCert          [2] TargetCert
    +                       }
    +                      
    +                       TargetCert  ::= SEQUENCE {
    +                         targetCertificate    IssuerSerial,
    +                         targetName           GeneralName OPTIONAL,
    +                         certDigestInfo       ObjectDigestInfo OPTIONAL
    +                       }
    +            
    + + @see org.bouncycastle.asn1.x509.Target + @see org.bouncycastle.asn1.x509.TargetInformation +
    + + Creates an instance of a Targets from the given object. +

    + obj can be a Targets or a {@link Asn1Sequence}

    + + @param obj The object. + @return A Targets instance. + @throws ArgumentException if the given object cannot be interpreted as Target. +
    + + Constructor from Asn1Sequence. + + @param targets The ASN.1 SEQUENCE. + @throws ArgumentException if the contents of the sequence are + invalid. + + + Constructor from given targets. +

    + The ArrayList is copied.

    + + @param targets An ArrayList of {@link Target}s. + @see Target + @throws ArgumentException if the ArrayList contains not only Targets. +
    + + Returns the targets in an ArrayList. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                       Targets ::= SEQUENCE OF Target
    +            
    + + @return an Asn1Object +
    + + creates a time object from a given date - if the date is between 1950 + and 2049 a UTCTime object is Generated, otherwise a GeneralizedTime + is used. + + + + Return our time as DateTime. + + A date time. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + + UserNotice class, used in + CertificatePolicies X509 extensions (in policy + qualifiers). +
    +             UserNotice ::= Sequence {
    +                  noticeRef        NoticeReference OPTIONAL,
    +                  explicitText     DisplayText OPTIONAL}
    +            
    +             
    + + @see PolicyQualifierId + @see PolicyInformation +
    + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param explicitText a DisplayText value + + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param str the explicitText field as a string. + + + Creates a new UserNotice instance. +

    Useful from reconstructing a UserNotice instance + from its encodable/encoded form. + + @param as an ASN1Sequence value obtained from either + calling @{link toASN1Object()} for a UserNotice + instance or from parsing it from a DER-encoded stream.

    +
    + + Generator for Version 1 TbsCertificateStructures. +
    +             TbsCertificate ::= Sequence {
    +                  version          [ 0 ]  Version DEFAULT v1(0),
    +                  serialNumber            CertificateSerialNumber,
    +                  signature               AlgorithmIdentifier,
    +                  issuer                  Name,
    +                  validity                Validity,
    +                  subject                 Name,
    +                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                  }
    +             
    + +
    + + Generator for Version 2 AttributeCertificateInfo +
    +             AttributeCertificateInfo ::= Sequence {
    +                   version              AttCertVersion -- version is v2,
    +                   holder               Holder,
    +                   issuer               AttCertIssuer,
    +                   signature            AlgorithmIdentifier,
    +                   serialNumber         CertificateSerialNumber,
    +                   attrCertValidityPeriod   AttCertValidityPeriod,
    +                   attributes           Sequence OF Attr,
    +                   issuerUniqueID       UniqueIdentifier OPTIONAL,
    +                   extensions           Extensions OPTIONAL
    +             }
    +             
    + +
    + + @param attribute + + + Produce an object suitable for an Asn1OutputStream. +
    +             V2Form ::= Sequence {
    +                  issuerName            GeneralNames  OPTIONAL,
    +                  baseCertificateID     [0] IssuerSerial  OPTIONAL,
    +                  objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    +                    -- issuerName MUST be present in this profile
    +                    -- baseCertificateID and objectDigestInfo MUST NOT
    +                    -- be present in this profile
    +             }
    +            
    +
    + + Generator for Version 2 TbsCertList structures. +
    +              TbsCertList  ::=  Sequence  {
    +                   version                 Version OPTIONAL,
    +                                                -- if present, shall be v2
    +                   signature               AlgorithmIdentifier,
    +                   issuer                  Name,
    +                   thisUpdate              Time,
    +                   nextUpdate              Time OPTIONAL,
    +                   revokedCertificates     Sequence OF Sequence  {
    +                        userCertificate         CertificateSerialNumber,
    +                        revocationDate          Time,
    +                        crlEntryExtensions      Extensions OPTIONAL
    +                                                      -- if present, shall be v2
    +                                             }  OPTIONAL,
    +                   crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
    +                                                      -- if present, shall be v2
    +                                             }
    +             
    + + Note: This class may be subject to change +
    + + Generator for Version 3 TbsCertificateStructures. +
    +             TbsCertificate ::= Sequence {
    +                  version          [ 0 ]  Version DEFAULT v1(0),
    +                  serialNumber            CertificateSerialNumber,
    +                  signature               AlgorithmIdentifier,
    +                  issuer                  Name,
    +                  validity                Validity,
    +                  subject                 Name,
    +                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                  issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
    +                  subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
    +                  extensions        [ 3 ] Extensions OPTIONAL
    +                  }
    +             
    + +
    + + an X509Certificate structure. +
    +             Certificate ::= Sequence {
    +                 tbsCertificate          TbsCertificate,
    +                 signatureAlgorithm      AlgorithmIdentifier,
    +                 signature               BIT STRING
    +             }
    +            
    +
    + + The default converter for X509 DN entries when going from their + string value to ASN.1 strings. + + + Apply default conversion for the given value depending on the oid + and the character range of the value. + + @param oid the object identifier for the DN entry + @param value the value associated with it + @return the ASN.1 equivalent for the string value. + + + an object for the elements in the X.509 V3 extension block. + + + Convert the value of the passed in extension to an object. + The extension to parse. + The object the value string contains. + If conversion is not possible. + + + Subject Directory Attributes + + + Subject Key Identifier + + + Key Usage + + + Private Key Usage Period + + + Subject Alternative Name + + + Issuer Alternative Name + + + Basic Constraints + + + CRL Number + + + Reason code + + + Hold Instruction Code + + + Invalidity Date + + + Delta CRL indicator + + + Issuing Distribution Point + + + Certificate Issuer + + + Name Constraints + + + CRL Distribution Points + + + Certificate Policies + + + Policy Mappings + + + Authority Key Identifier + + + Policy Constraints + + + Extended Key Usage + + + Freshest CRL + + + Inhibit Any Policy + + + Authority Info Access + + + Subject Info Access + + + Logo Type + + + BiometricInfo + + + QCStatements + + + Audit identity extension in attribute certificates. + + + NoRevAvail extension in attribute certificates. + + + TargetInformation extension in attribute certificates. + + + Constructor from Asn1Sequence. + + the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + return an Enumeration of the extension field's object ids. + + + return the extension represented by the object identifier + passed in. + + @return the extension if it's present, null otherwise. + + +
    +                 Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
    +            
    +                 Extension         ::=   SEQUENCE {
    +                    extnId            EXTENSION.&id ({ExtensionSet}),
    +                    critical          BOOLEAN DEFAULT FALSE,
    +                    extnValue         OCTET STRING }
    +             
    +
    + + Generator for X.509 extensions + + + Reset the generator + + + + Add an extension with the given oid and the passed in value to be included + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The ASN.1 object to be included in the extension. + + + + Add an extension with the given oid and the passed in byte array to be wrapped + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The byte array to be wrapped. + + + Return true if there are no extension present in this generator. + True if empty, false otherwise + + + Generate an X509Extensions object based on the current state of the generator. + An X509Extensions object + + +
    +                 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
    +            
    +                 RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
    +            
    +                 AttributeTypeAndValue ::= SEQUENCE {
    +                                               type  OBJECT IDENTIFIER,
    +                                               value ANY }
    +             
    +
    + + country code - StringType(SIZE(2)) + + + organization - StringType(SIZE(1..64)) + + + organizational unit name - StringType(SIZE(1..64)) + + + Title + + + common name - StringType(SIZE(1..64)) + + + street - StringType(SIZE(1..64)) + + + device serial number name - StringType(SIZE(1..64)) + + + locality name - StringType(SIZE(1..64)) + + + state, or province name - StringType(SIZE(1..64)) + + + Naming attributes of type X520name + + + businessCategory - DirectoryString(SIZE(1..128) + + + postalCode - DirectoryString(SIZE(1..40) + + + dnQualifier - DirectoryString(SIZE(1..64) + + + RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + + + RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + + + RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + + + RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + + + RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + DirectoryString(SIZE(1..30)) + + + RFC 2256 dmdName + + + id-at-telephoneNumber + + + id-at-name + + + Email address (RSA PKCS#9 extension) - IA5String. +

    Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

    +
    + + more from PKCS#9 + + + email address in Verisign certificates + + + LDAP User id. + + + determines whether or not strings should be processed and printed + from back to front. + + + default look up table translating OID values into their common symbols following + the convention in RFC 2253 with a few extras + + + look up table translating OID values into their common symbols following the convention in RFC 2253 + + + look up table translating OID values into their common symbols following the convention in RFC 1779 + + + + look up table translating common symbols into their OIDS. + + + Return a X509Name based on the passed in tagged object. + + @param obj tag object holding name. + @param explicitly true if explicitly tagged false otherwise. + @return the X509Name + + + Constructor from Asn1Sequence + + the principal will be a list of constructed sets, each containing an (OID, string) pair. + + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +
    + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes two vectors one of the oids and the other of the values. + + + Takes two vectors one of the oids and the other of the values. +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. If reverse + is true, create the encoded version of the sequence starting from the + last element in the string. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. If reverse is true the ASN.1 sequence representing the DN will + be built by starting at the end of the string, rather than the start. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. +
    + If reverse is true, create the encoded version of the sequence + starting from the last element in the string. + @param reverse true if we should start scanning from the end (RFC 2553). + @param lookUp table of names and their oids. + @param dirName the X.500 string to be parsed. +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. The passed in converter is used to convert the + string values to the right of each equals sign to their ASN.1 counterparts. +
    + @param reverse true if we should start scanning from the end, false otherwise. + @param lookUp table of names and oids. + @param dirName the string dirName + @param converter the converter to convert string values into their ASN.1 equivalents +
    + + return an IList of the oids in the name, in the order they were found. + + + return an IList of the values found in the name, in the order they + were found. + + + return an IList of the values found in the name, in the order they + were found, with the DN label corresponding to passed in oid. + + + The X509Name object to test equivalency against. + If true, the order of elements must be the same, + as well as the values associated with each element. + + + test for equivalence - note: case is ignored. + + + convert the structure to a string - if reverse is true the + oids and values are listed out starting with the last element + in the sequence (ala RFC 2253), otherwise the string will begin + with the first element of the structure. If no string definition + for the oid is found in oidSymbols the string value of the oid is + added. Two standard symbol tables are provided DefaultSymbols, and + RFC2253Symbols as part of this class. + + @param reverse if true start at the end of the sequence and work back. + @param oidSymbols look up table strings for oids. + + + * It turns out that the number of standard ways the fields in a DN should be + * encoded into their ASN.1 counterparts is rapidly approaching the + * number of machines on the internet. By default the X509Name class + * will produce UTF8Strings in line with the current recommendations (RFC 3280). + *

    + * An example of an encoder look like below: + *

    +                 * public class X509DirEntryConverter
    +                 *     : X509NameEntryConverter
    +                 * {
    +                 *     public Asn1Object GetConvertedValue(
    +                 *         DerObjectIdentifier  oid,
    +                 *         string               value)
    +                 *     {
    +                 *         if (str.Length() != 0 && str.charAt(0) == '#')
    +                 *         {
    +                 *             return ConvertHexEncoded(str, 1);
    +                 *         }
    +                 *         if (oid.Equals(EmailAddress))
    +                 *         {
    +                 *             return new DerIA5String(str);
    +                 *         }
    +                 *         else if (CanBePrintable(str))
    +                 *         {
    +                 *             return new DerPrintableString(str);
    +                 *         }
    +                 *         else if (CanBeUTF8(str))
    +                 *         {
    +                 *             return new DerUtf8String(str);
    +                 *         }
    +                 *         else
    +                 *         {
    +                 *             return new DerBmpString(str);
    +                 *         }
    +                 *     }
    +                 * }
    +            	 * 
    + *

    +
    + + Convert an inline encoded hex string rendition of an ASN.1 + object back into its corresponding ASN.1 object. + + @param str the hex encoded object + @param off the index at which the encoding starts + @return the decoded object + + + return true if the passed in string can be represented without + loss as a PrintableString, false otherwise. + + + Convert the passed in string value into the appropriate ASN.1 + encoded object. + + @param oid the oid associated with the value in the DN. + @param value the value of the particular DN component. + @return the ASN.1 equivalent for the value. + + + class for breaking up an X500 Name into it's component tokens, ala + java.util.StringTokenizer. We need this class as some of the + lightweight Java environment don't support classes like + StringTokenizer. + + + The BiometricData object. +
    +            BiometricData  ::=  SEQUENCE {
    +                  typeOfBiometricData  TypeOfBiometricData,
    +                  hashAlgorithm        AlgorithmIdentifier,
    +                  biometricDataHash    OCTET STRING,
    +                  sourceDataUri        IA5String OPTIONAL  }
    +            
    +
    + + The Iso4217CurrencyCode object. +
    +            Iso4217CurrencyCode  ::=  CHOICE {
    +                  alphabetic              PrintableString (SIZE 3), --Recommended
    +                  numeric              INTEGER (1..999) }
    +            -- Alphabetic or numeric currency code as defined in ISO 4217
    +            -- It is recommended that the Alphabetic form is used
    +            
    +
    + + The MonetaryValue object. +
    +            MonetaryValue  ::=  SEQUENCE {
    +                  currency              Iso4217CurrencyCode,
    +                  amount               INTEGER,
    +                  exponent             INTEGER }
    +            -- value = amount * 10^exponent
    +            
    +
    + + The QCStatement object. +
    +            QCStatement ::= SEQUENCE {
    +              statementId        OBJECT IDENTIFIER,
    +              statementInfo      ANY DEFINED BY statementId OPTIONAL}
    +            
    +
    + + The SemanticsInformation object. +
    +                   SemanticsInformation ::= SEQUENCE {
    +                     semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
    +                     nameRegistrationAuthorities NameRegistrationAuthorities
    +                                                                     OPTIONAL }
    +                     (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
    +                      WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
    +            
    +                 NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
    +                     GeneralName
    +             
    +
    + + The TypeOfBiometricData object. +
    +             TypeOfBiometricData ::= CHOICE {
    +               predefinedBiometricType   PredefinedBiometricType,
    +               biometricDataOid          OBJECT IDENTIFIER }
    +            
    +             PredefinedBiometricType ::= INTEGER {
    +               picture(0),handwritten-signature(1)}
    +               (picture|handwritten-signature)
    +             
    +
    + + Structure for a name or pseudonym. + +
    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString 
    +                    },
    +                	   pseudonym DirectoryString 
    +                  }
    +            
    + + @see org.bouncycastle.asn1.x509.sigi.PersonalData + +
    + + Constructor from DERString. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString
    +                    },
    +                	   pseudonym DirectoryString
    +                  }
    +            
    + @param pseudonym pseudonym value to use. +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param pseudonym The pseudonym. + + + Constructor from a given details. + + @param surname The surname. + @param givenName A sequence of directory strings making up the givenName + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @return an Asn1Object +
    + + Contains personal data for the otherName field in the subjectAltNames + extension. +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param nameOrPseudonym Name or pseudonym. + @param nameDistinguisher Name distinguisher. + @param dateOfBirth Date of birth. + @param placeOfBirth Place of birth. + @param gender Gender. + @param postalAddress Postal Address. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @return an Asn1Object +
    + + Object Identifiers of SigI specifciation (German Signature Law + Interoperability specification). + + + Key purpose IDs for German SigI (Signature Interoperability + Specification) + + + Certificate policy IDs for German SigI (Signature Interoperability + Specification) + + + Other Name IDs for German SigI (Signature Interoperability Specification) + + + To be used for for the generation of directory service certificates. + + + ID for PersonalData + + + Certificate is conform to german signature law. + + + A general class that reads all X9.62 style EC curve tables. + + + return a X9ECParameters object representing the passed in named + curve. The routine returns null if the curve is not present. + + @param name the name of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return a X9ECParameters object representing the passed in named + curve. + + @param oid the object id of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return an enumeration of the names of the available curves. + + @return an enumeration of the names of the available curves. + + + ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             KeySpecificInfo ::= Sequence {
    +                 algorithm OBJECT IDENTIFIER,
    +                 counter OCTET STRING SIZE (4..4)
    +             }
    +            
    +
    + + ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OtherInfo ::= Sequence {
    +                 keyInfo KeySpecificInfo,
    +                 partyAInfo [0] OCTET STRING OPTIONAL,
    +                 suppPubInfo [2] OCTET STRING
    +             }
    +            
    +
    + + table of the current named curves defined in X.962 EC-DSA. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Parameters ::= CHOICE {
    +               ecParameters ECParameters,
    +               namedCurve   CURVES.&id({CurveNames}),
    +               implicitlyCA Null
    +            }
    +            
    +
    + + ASN.1 def for Elliptic-Curve Curve structure. See + X9.62, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             Curve ::= Sequence {
    +                 a               FieldElement,
    +                 b               FieldElement,
    +                 seed            BIT STRING      OPTIONAL
    +             }
    +            
    +
    + + ASN.1 def for Elliptic-Curve ECParameters structure. See + X9.62, for further details. + + + Return the ASN.1 entry representing the Curve. + + @return the X9Curve for the curve in these parameters. + + + Return the ASN.1 entry representing the FieldID. + + @return the X9FieldID for the FieldID in these parameters. + + + Return the ASN.1 entry representing the base point G. + + @return the X9ECPoint for the base point in these parameters. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECParameters ::= Sequence {
    +                 version         Integer { ecpVer1(1) } (ecpVer1),
    +                 fieldID         FieldID {{FieldTypes}},
    +                 curve           X9Curve,
    +                 base            X9ECPoint,
    +                 order           Integer,
    +                 cofactor        Integer OPTIONAL
    +             }
    +            
    +
    + + class for describing an ECPoint as a Der object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECPoint ::= OCTET STRING
    +            
    +

    + Octet string produced using ECPoint.GetEncoded().

    +
    + + Class for processing an ECFieldElement as a DER object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             FieldElement ::= OCTET STRING
    +            
    +

    +

      +
    1. if q is an odd prime then the field element is + processed as an Integer and converted to an octet string + according to x 9.62 4.3.1.
    2. +
    3. if q is 2m then the bit string + contained in the field element is converted into an octet + string with the same ordering padded at the front if necessary. +
    4. +
    +

    +
    + + ASN.1 def for Elliptic-Curve Field ID structure. See + X9.62, for further details. + + + Constructor for elliptic curves over prime fields + F2. + @param primeP The prime p defining the prime field. + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk1 + 1 + represents the reduction polynomial f(z). + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).. + + + Produce a Der encoding of the following structure. +
    +             FieldID ::= Sequence {
    +                 fieldType       FIELD-ID.&id({IOSet}),
    +                 parameters      FIELD-ID.&Type({IOSet}{@fieldType})
    +             }
    +            
    +
    + + id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + us(840) x9-57 (10040) x9cm(4) 3 } + + + X9.63 + + + X9.42 + + + reader for Base64 armored objects - read the headers and then start returning + bytes when the data is reached. An IOException is thrown if the CRC check + fails. + + + decode the base 64 encoded input data. + + @return the offset the data starts in out. + + + Create a stream for reading a PGP armoured message, parsing up to a header + and then reading the data that follows. + + @param input + + + Create an armoured input stream which will assume the data starts + straight away, or parse for headers first depending on the value of + hasHeaders. + + @param input + @param hasHeaders true if headers are to be looked for, false otherwise. + + + @return true if we are inside the clear text section of a PGP + signed message. + + + @return true if the stream is actually at end of file. + + + Return the armor header line (if there is one) + @return the armor header line, null if none present. + + + Return the armor headers (the lines after the armor header line), + @return an array of armor headers, null if there aren't any. + + + Basic output stream. + + + encode the input data producing a base 64 encoded byte array. + + + Set an additional header entry. + + @param name the name of the header entry. + @param v the value of the header entry. + + + Reset the headers to only contain a Version string. + + + Start a clear text signed message. + @param hashAlgorithm + + + Note: Close() does not close the underlying stream. So it is possible to write + multiple objects using armoring to a single stream. + + + Reader for PGP objects. + + + Returns the next packet tag in the stream. + + + + A stream that overlays our input stream, allowing the user to only read a segment of it. + NB: dataLength will be negative if the segment length is in the upper range above 2**31. + + + + Base class for a PGP object. + + + Basic output stream. + + + Create a stream representing a general packet. + Output stream to write to. + + + Create a stream representing an old style partial object. + Output stream to write to. + The packet tag for the object. + + + Create a stream representing a general packet. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + If true, the header is written out in old format. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Buffer to use for collecting chunks. + + + Flush the underlying stream. + + + Finish writing out the current packet without closing the underlying stream. + + + Generic compressed data object. + + + The algorithm tag value. + + + Basic tags for compression algorithms. + + + Basic type for a PGP packet. + + + Base class for a DSA public key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for a DSA secret key. + + + @param in + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + @return x + + + Base class for an ECDH Public Key. + + + The stream to read the packet from. + + + Base class for an ECDSA Public Key. + + + The stream to read the packet from. + + + Base class for an EC Public Key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an EC Secret Key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal public key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal secret key. + + + @param in + + + @param x + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Basic packet for an experimental packet. + + + Basic tags for hash algorithms. + + + Base interface for a PGP key. + + + + The base format for this key - in the case of the symmetric keys it will generally + be raw indicating that the key is just a straight byte representation, for an asymmetric + key the format will be PGP, indicating the key is a string of MPIs encoded in PGP format. + + "RAW" or "PGP". + + + Note: you can only read from this once... + + + Generic literal data packet. + + + The format tag value. + + + The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + + + A multiple precision integer + + + Basic type for a marker packet. + + + Basic packet for a modification detection code packet. + + + Generic signature object + + + The encryption algorithm tag. + + + The hash algorithm tag. + + + Basic PGP packet tag types. + + + Public Key Algorithm tag numbers. + + + Basic packet for a PGP public key. + + + Basic packet for a PGP public key. + + + Construct a version 4 public key packet. + + + Basic packet for a PGP public subkey + + + Construct a version 4 public subkey packet. + + + Base class for an RSA public key. + + + Construct an RSA public key from the passed in stream. + + + The modulus. + The public exponent. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an RSA secret (or priate) key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + The string to key specifier class. + + + The hash algorithm. + + + The IV for the key generation algorithm. + + + The iteration count + + + The protection mode - only if GnuDummyS2K + + + Basic packet for a PGP secret key. + + + Basic packet for a PGP secret key. + + + Generic signature packet. + + + Generate a version 4 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param hashedData + @param unhashedData + @param fingerprint + @param signature + + + Generate a version 2/3 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param fingerprint + @param signature + + + return the keyId + @return the keyId that created the signature. + + + return the signature trailer that must be included with the data + to reconstruct the signature + + @return byte[] + + + * return the signature as a set of integers - note this is normalised to be the + * ASN.1 encoding of what appears in the signature packet. + + + Return the byte encoding of the signature section. + @return uninterpreted signature bytes. + + + Return the creation time in milliseconds since 1 Jan., 1970 UTC. + + + Basic type for a PGP Signature sub-packet. + + + Return the generic data making up the packet. + + + Basic PGP signature sub-packet tag types. + + + reader for signature sub-packets + + + Basic type for a symmetric key encrypted packet. + + + Basic tags for symmetric key algorithms + + + Basic type for a symmetric encrypted session key packet + + + @return int + + + @return S2k + + + @return byte[] + + + @return int + + + Basic type for a trust packet. + + + Basic type for a user attribute packet. + + + Basic type for a user attribute sub-packet. + + + return the generic data making up the packet. + + + Basic PGP user attribute sub-packet tag types. + + + reader for user attribute sub-packets + + + Basic type for a user ID packet. + + + Basic type for a image attribute packet. + + + Packet embedded signature + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + Identifier for the modification detection feature + + + Returns if modification detection is supported. + + + Returns if a particular feature is supported. + + + Sets support for a particular feature. + + + packet giving signature creation time. + + + packet giving time after creation at which the key expires. + + + Return the number of seconds after creation time a key is valid for. + + @return second count for key validity. + + + Packet holding the key flag values. + + + + Return the flag values contained in the first 4 octets (note: at the moment + the standard only uses the first one). + + + + Class provided a NotationData object according to + RFC2440, Chapter 5.2.3.15. Notation Data + + + packet giving signature creation time. + + + packet giving whether or not the signature is signed using the primary user ID for the key. + + + packet giving whether or not is revocable. + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + return time in seconds before signature expires after creation time. + + + packet giving the User ID of the signer. + + + packet giving trust. + + + + Represents revocation key OpenPGP signature sub packet. + + + + + Represents revocation reason OpenPGP signature sub packet. + + + + Compressed data objects + + + The algorithm used for compression + + + Get the raw input stream contained in the object. + + + Return an uncompressed input stream which allows reading of the compressed data. + + + Class for producing compressed data packets. + + + +

    + Return an output stream which will save the data being written to + the compressed object. +

    +

    + The stream created can be closed off by either calling Close() + on the stream or Close() on the generator. Closing the returned + stream does not close off the Stream parameter outStr. +

    +
    + Stream to be used for output. + A Stream for output of the compressed data. + + + +
    + + +

    + Return an output stream which will compress the data as it is written to it. + The stream will be written out in chunks according to the size of the passed in buffer. +

    +

    + The stream created can be closed off by either calling Close() + on the stream or Close() on the generator. Closing the returned + stream does not close off the Stream parameter outStr. +

    +

    + Note: if the buffer is not a power of 2 in length only the largest power of 2 + bytes worth of the buffer will be used. +

    +

    + Note: using this may break compatibility with RFC 1991 compliant tools. + Only recent OpenPGP implementations are capable of accepting these streams. +

    +
    + Stream to be used for output. + The buffer to use. + A Stream for output of the compressed data. + + + + +
    + + Close the compressed object.summary> + + + + Thrown if the IV at the start of a data stream indicates the wrong key is being used. + + + + Return the raw input stream for the data stream. + + + Return true if the message is integrity protected. + True, if there is a modification detection code namespace associated + with this stream. + + + Note: This can only be called after the message has been read. + True, if the message verifies, false otherwise + + + Generator for encrypted objects. + + + Existing SecureRandom constructor. + The symmetric algorithm to use. + Source of randomness. + + + Creates a cipher stream which will have an integrity packet associated with it. + + + Base constructor. + The symmetric algorithm to use. + Source of randomness. + PGP 2.6.x compatibility required. + + + + Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1). + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Add a PBE encryption method to the encrypted object. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Add a public key encrypted session key to the encrypted object. + + + +

    + If buffer is non null stream assumed to be partial, otherwise the length will be used + to output a fixed length packet. +

    +

    + The stream created can be closed off by either calling Close() + on the stream or Close() on the generator. Closing the returned + stream does not close off the Stream parameter outStr. +

    +
    +
    + + +

    + Return an output stream which will encrypt the data as it is written to it. +

    +

    + The stream created can be closed off by either calling Close() + on the stream or Close() on the generator. Closing the returned + stream does not close off the Stream parameter outStr. +

    +
    +
    + + +

    + Return an output stream which will encrypt the data as it is written to it. + The stream will be written out in chunks according to the size of the passed in buffer. +

    +

    + The stream created can be closed off by either calling Close() + on the stream or Close() on the generator. Closing the returned + stream does not close off the Stream parameter outStr. +

    +

    + Note: if the buffer is not a power of 2 in length only the largest power of 2 + bytes worth of the buffer will be used. +

    +
    +
    + + +

    + Close off the encrypted object - this is equivalent to calling Close() on the stream + returned by the Open() method. +

    +

    + Note: This does not close the underlying output stream, only the stream on top of + it created by the Open() method. +

    +
    +
    + + A holder for a list of PGP encryption method packets. + + + Generic exception class for PGP encoding/decoding problems. + + + Key flag values for the KeyFlags subpacket. + + + + General class to handle JCA key pairs and convert them into OpenPGP ones. +

    + A word for the unwary, the KeyId for an OpenPGP public key is calculated from + a hash that includes the time of creation, if you pass a different date to the + constructor below with the same public private key pair the KeyIs will not be the + same as for previous generations of the key, so ideally you only want to do + this once. +

    +
    +
    + + Create a key pair from a PgpPrivateKey and a PgpPublicKey. + The public key. + The private key. + + + The keyId associated with this key pair. + + + + Generator for a PGP master and subkey ring. + This class will generate both the secret and public key rings + + + + + Create a new key ring generator using old style checksumming. It is recommended to use + SHA1 checksumming where possible. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + Add a subkey to the key ring to be generated with default certification. + + + + Add a subkey to the key ring to be generated with default certification. + + The key pair. + The hash algorithm. + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + The hash algorithm. + exception adding subkey: + + + + Return the secret key ring. + + + Return the public key ring that corresponds to the secret key ring. + + + + Thrown if the key checksum is invalid. + + + + Class for processing literal data objects. + + + The special name indicating a "for your eyes only" packet. + + + The format of the data stream - Binary or Text + + + The file name that's associated with the data stream. + + + Return the file name as an unintrepreted byte array. + + + The modification time for the file. + + + The raw input stream for the data stream. + + + The input stream representing the data stream. + + + Class for producing literal data packets. + + + The special name indicating a "for your eyes only" packet. + + + + Generates literal data objects in the old format. + This is important if you need compatibility with PGP 2.6.x. + + If true, uses old format. + + + +

    + Open a literal data packet, returning a stream to store the data inside the packet. +

    +

    + The stream created can be closed off by either calling Close() + on the stream or Close() on the generator. Closing the returned + stream does not close off the Stream parameter outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The length of the data we will write. + The time of last modification we want stored. +
    + + +

    + Open a literal data packet, returning a stream to store the data inside the packet, + as an indefinite length stream. The stream is written out as a series of partial + packets with a chunk size determined by the size of the passed in buffer. +

    +

    + The stream created can be closed off by either calling Close() + on the stream or Close() on the generator. Closing the returned + stream does not close off the Stream parameter outStr. +

    +

    + Note: if the buffer is not a power of 2 in length only the largest power of 2 + bytes worth of the buffer will be used.

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The time of last modification we want stored. + The buffer to use for collecting data to put into chunks. +
    + + +

    + Open a literal data packet for the passed in FileInfo object, returning + an output stream for saving the file contents. +

    +

    + The stream created can be closed off by either calling Close() + on the stream or Close() on the generator. Closing the returned + stream does not close off the Stream parameter outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The FileInfo object containg the packet details. +
    + + + Close the literal data packet - this is equivalent to calling Close() + on the stream returned by the Open() method. + + + + + A PGP marker packet - in general these should be ignored other than where + the idea is to preserve the original input stream. + + + + + General class for reading a PGP object stream. +

    + Note: if this class finds a PgpPublicKey or a PgpSecretKey it + will create a PgpPublicKeyRing, or a PgpSecretKeyRing for each + key found. If all you are trying to do is read a key ring file use + either PgpPublicKeyRingBundle or PgpSecretKeyRingBundle.

    +
    +
    + + Return the next object in the stream, or null if the end is reached. + On a parse error + + + + Return all available objects in a list. + + An IList containing all objects from this factory, in order. + + + A one pass signature object. + + + Initialise the signature object for verification. + + + Verify the calculated signature against the passed in PgpSignature. + + + Holder for a list of PgpOnePassSignature objects. + + + Padding functions. + + + A password based encryption object. + + + Return the raw input stream for the data stream. + + + Return the decrypted input stream, using the passed in passphrase. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Return the decrypted input stream, using the passed in passphrase. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Return the decrypted input stream, using the passed in passphrase. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + General class to contain a private key for use with other OpenPGP objects. + + + + Create a PgpPrivateKey from a keyID, the associated public data packet, and a regular private key. + + ID of the corresponding public key. + the public key data packet to be associated with this private key. + the private key data packet to be associated with this private key. + + + The keyId associated with the contained private key. + + + The public key packet associated with this private key, if available. + + + The contained private key. + + + General class to handle a PGP public key object. + + + + Create a PgpPublicKey from the passed in lightweight one. + + + Note: the time passed in affects the value of the key's keyId, so you probably only want + to do this once for a lightweight key, or make sure you keep track of the time you used. + + Asymmetric algorithm type representing the public key. + Actual public key to associate. + Date of creation. + If pubKey is not public. + On key creation problem. + + + Constructor for a sub-key. + + + Copy constructor. + The public key to copy. + + + The version of this key. + + + The creation time of this key. + + + The number of valid days from creation time - zero means no expiry. + WARNING: This method will return 1 for keys with version > 3 that expire in less than 1 day + + + Return the trust data associated with the public key, if present. + A byte array with trust data, null otherwise. + + + The number of valid seconds from creation time - zero means no expiry. + + + The keyId associated with the public key. + + + The fingerprint of the key + + + + Check if this key has an algorithm type that makes it suitable to use for encryption. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for encryption. + + + + True, if this is a master key. + + + The algorithm code associated with the public key. + + + The strength of the key in bits. + + + The public key contained in the object. + A lightweight public key. + If the key algorithm is not recognised. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of PgpUserAttributeSubpacketVector objects. + + + Allows enumeration of any signatures associated with the passed in id. + The ID to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures associated with the passed in user attributes. + The vector of user attributes to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures of the passed in type that are on this key. + The type of the signature to be returned. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of all signatures/certifications associated with this key. + An IEnumerable with all signatures/certifications. + + + Return all signatures/certifications directly associated with this key (ie, not to a user id). + + @return an iterator (possibly empty) with all signatures/certifications. + + + Check whether this (sub)key has a revocation signature on it. + True, if this (sub)key has been revoked. + + + Add a certification for an id to the given public key. + The key the certification is to be added to. + The ID the certification is associated with. + The new certification. + The re-certified key. + + + Add a certification for the given UserAttributeSubpackets to the given public key. + The key the certification is to be added to. + The attributes the certification is associated with. + The new certification. + The re-certified key. + + + + Remove any certifications associated with a user attribute subpacket on a key. + + The key the certifications are to be removed from. + The attributes to be removed. + + The re-certified key, or null if the user attribute subpacket was not found on the key. + + + + Remove any certifications associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that is to be removed. + The re-certified key, or null if the ID was not found on the key. + + + Remove a certification associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that the certfication is to be removed from. + The certfication to be removed. + The re-certified key, or null if the certification was not found. + + + Remove a certification associated with a given user attributes on a key. + The key the certifications are to be removed from. + The user attributes that the certfication is to be removed from. + The certification to be removed. + The re-certified key, or null if the certification was not found. + + + Add a revocation or some other key certification to a key. + The key the revocation is to be added to. + The key signature to be added. + The new changed public key object. + + + Remove a certification from the key. + The key the certifications are to be removed from. + The certfication to be removed. + The modified key, null if the certification was not found. + + + A public key encrypted data object. + + + The key ID for the key used to encrypt the data. + + + + Return the algorithm code for the symmetric algorithm used to encrypt the data. + + + + Return the decrypted data stream for the packet. + + + + Class to hold a single master public key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpPublicKeyRingBundle class. +

    +
    +
    + + Return the first public key in the ring. + + + Return the public key referred to by the passed in key ID if it is present. + + + Allows enumeration of all the public keys. + An IEnumerable of PgpPublicKey objects. + + + + Returns a new key ring with the public key passed in either added or + replacing an existing one. + + The public key ring to be modified. + The public key to be inserted. + A new PgpPublicKeyRing + + + Returns a new key ring with the public key passed in removed from the key ring. + The public key ring to be modified. + The public key to be removed. + A new PgpPublicKeyRing, or null if pubKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire public key file in one hit this is the class for you. + + + + Build a PgpPublicKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpPublicKeyRing. + + + Return the number of key rings in this collection. + + + Allow enumeration of the public key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP public key associated with the given key id. + The ID of the public key to return. + + + Return the public key ring which contains the key referred to by keyId + key ID to match against + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in public key ring. + + The PgpPublicKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpPublicKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in public key ring removed. + + The PgpPublicKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpPublicKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + General class to handle a PGP secret key object. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Check if this key has an algorithm type that makes it suitable to use for signing. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for use with signing. + + + + True, if this is a master key. + + + Detect if the Secret Key's Private Key is empty or not + + + The algorithm the key is encrypted with. + + + The key ID of the public key associated with this key. + + + Return the S2K usage associated with this key. + + + Return the S2K used to process this key. + + + The public key associated with this key. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of string objects. + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + Replace the passed the public key on the passed in secret key. + Secret key to change. + New public key. + A new secret key. + If KeyId's do not match. + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + + + Class to hold a single master secret key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpSecretKeyRingBundle class. +

    +
    +
    + + Return the public key for the master key. + + + Return the master private key. + + + Allows enumeration of the secret keys. + An IEnumerable of PgpSecretKey objects. + + + + Return an iterator of the public keys in the secret key ring that + have no matching private key. At the moment only personal certificate data + appears in this fashion. + + An IEnumerable of unattached, or extra, public keys. + + + + Replace the public key set on the secret ring with the corresponding key off the public ring. + + Secret ring to be changed. + Public ring containing the new public key set. + + + + Return a copy of the passed in secret key ring, with the master key and sub keys encrypted + using a new password and the passed in algorithm. + + The PgpSecretKeyRing to be copied. + The current password for key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Returns a new key ring with the secret key passed in either added or + replacing an existing one with the same key ID. + + The secret key ring to be modified. + The secret key to be inserted. + A new PgpSecretKeyRing + + + Returns a new key ring with the secret key passed in removed from the key ring. + The secret key ring to be modified. + The secret key to be removed. + A new PgpSecretKeyRing, or null if secKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire secret key file in one hit this is the class for you. + + + + Build a PgpSecretKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpSecretKeyRing. + + + Return the number of rings in this collection. + + + Allow enumeration of the secret key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP secret key associated with the given key id. + The ID of the secret key to return. + + + Return the secret key ring which contains the key referred to by keyId + The ID of the secret key + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in secret key ring. + + The PgpSecretKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpSecretKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in secret key ring removed. + + The PgpSecretKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpSecretKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + A PGP signature object. + + + The OpenPGP version number for this signature. + + + The key algorithm associated with this signature. + + + The hash algorithm associated with this signature. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in user attributes. + + User attributes the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in ID. + + ID the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + Verify a certification for the passed in key against the passed in master key. + The key we are verifying against. + The key we are verifying. + True, if the certification is valid, false otherwise. + + + Verify a key certification, such as revocation, for the passed in key. + The key we are checking. + True, if the certification is valid, false otherwise. + + + The ID of the key that created the signature. + + + The creation time of this signature. + + + + Return true if the signature has either hashed or unhashed subpackets. + + + + Generator for PGP signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a signature object containing the current signature state. + + + Generate a certification for the passed in ID and key. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in userAttributes. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in key against the passed in master key. + The key we are certifying against. + The key we are certifying. + The certification. + + + Generate a certification, such as a revocation, for the passed in key. + The key we are certifying. + The certification. + + + A list of PGP signatures - normally in the signature block after literal data. + + + Generator for signature subpackets. + + + + Add a TrustSignature packet to the signature. The values for depth and trust are largely + installation dependent but there are some guidelines in RFC 4880 - 5.2.3.13. + + true if the packet is critical. + depth level. + trust amount. + + + + Set the number of seconds a key is valid for after the time of its creation. + A value of zero means the key never expires. + + True, if should be treated as critical, false otherwise. + The number of seconds the key is valid, or zero if no expiry. + + + + Set the number of seconds a signature is valid for after the time of its creation. + A value of zero means the signature never expires. + + True, if should be treated as critical, false otherwise. + The number of seconds the signature is valid, or zero if no expiry. + + + + Set the creation time for the signature. +

    + Note: this overrides the generation of a creation time when the signature + is generated.

    +
    +
    + + + Sets revocation reason sub packet + + + + + Sets revocation key sub packet + + + + + Sets issuer key sub packet + + + + Container for a list of signature subpackets. + + + Return true if a particular subpacket type exists. + + @param type type to look for. + @return true if present, false otherwise. + + + Return all signature subpackets of the passed in type. + @param type subpacket type code + @return an array of zero or more matching subpackets. + + + + Return the number of seconds a signature is valid for after its creation date. + A value of zero means the signature never expires. + + Seconds a signature is valid for. + + + + Return the number of seconds a key is valid for after its creation date. + A value of zero means the key never expires. + + Seconds a signature is valid for. + + + Return the number of packets this vector contains. + + + Container for a list of user attribute subpackets. + + + Basic utility class. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Write out the passed in file as a literal data packet. + + + Write out the passed in file as a literal data packet in partial packet format. + + + + Return either an ArmoredInputStream or a BcpgInputStream based on whether + the initial characters of the stream are binary PGP encodings or not. + + + + Generator for old style PGP V3 Signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a V3 signature object containing the current signature state. + + + Utility functions for looking a S-expression keys. This class will move when it finds a better home! +

    + Format documented here: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/keyformat.txt;h=42c4b1f06faf1bbe71ffadc2fee0fad6bec91a97;hb=refs/heads/master +

    +
    + + + The 'Signature' parameter is only available when generating unsigned attributes. + + + + containing class for an CMS AuthEnveloped Data object + + + containing class for an CMS Authenticated Data object + + + return the object identifier for the content MAC algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the digested attributes indexed by + the OID of the attribute. + + + return a table of the undigested attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + General class for generating a CMS authenticated-data message. + + A simple example of usage. + +
    +                  CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + + + generate an authenticated object that contains an CMS Authenticated Data object + + + Parsing class for an CMS Authenticated Data object from an input stream. +

    + Note: that because we are in a streaming mode only one recipient can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  CMSAuthenticatedDataParser     ad = new CMSAuthenticatedDataParser(inputStream);
    +            
    +                  RecipientInformationStore  recipients = ad.getRecipientInfos();
    +            
    +                  Collection  c = recipients.getRecipients();
    +                  Iterator    it = c.iterator();
    +            
    +                  if (it.hasNext())
    +                  {
    +                      RecipientInformation   recipient = (RecipientInformation)it.next();
    +            
    +                      CMSTypedStream recData = recipient.getContentStream(privateKey, "BC");
    +            
    +                      processDataStream(recData.getContentStream());
    +            
    +                      if (!Arrays.equals(ad.getMac(), recipient.getMac())
    +                      {
    +                          System.err.println("Data corrupted!!!!");
    +                      }
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the mac algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + General class for generating a CMS authenticated-data message stream. +

    + A simple example of usage. +

    +                  CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
    +            
    +                  edGen.addKeyTransRecipient(cert);
    +            
    +                  ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
    +            
    +                  OutputStream out = edGen.open(
    +                                          bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
    +                  out.write(data);
    +            
    +                  out.close();
    +             
    +

    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + @throws java.io.IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + + + generate an enveloped object that contains an CMS Enveloped Data object + + + base constructor + + + constructor allowing specific source of randomness + + @param rand instance of SecureRandom to use + + + containing class for an CMS Compressed Data object + + + Return the uncompressed content. + + @return the uncompressed content + @throws CmsException if there is an exception uncompressing the data. + + + Return the uncompressed content, throwing an exception if the data size + is greater than the passed in limit. If the content is exceeded getCause() + on the CMSException will contain a StreamOverflowException + + @param limit maximum number of bytes to read + @return the content read + @throws CMSException if there is an exception uncompressing the data. + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + * General class for generating a compressed CMS message. + *

    + * A simple example of usage.

    + *

    + *

    +                *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
    +                *      CMSCompressedData data = fact.Generate(content, algorithm);
    +                * 
    + *

    +
    + + Generate an object that contains an CMS Compressed Data + + + Class for reading a CMS Compressed Data stream. +
    +                 CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
    +            
    +                 process(cp.GetContent().GetContentStream());
    +             
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                  CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + General class for generating a compressed CMS message stream. +

    + A simple example of usage. +

    +
    +                  CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
    +            
    +                  Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
    +            
    +                  cOut.Write(data);
    +            
    +                  cOut.Close();
    +             
    +
    + + base constructor + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Close the underlying data stream. + @throws IOException if the close fails. + + + containing class for an CMS Enveloped Data object + + + return the object identifier for the content encryption algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
    +            
    +                  fact.AddKeyTransRecipient(cert);
    +            
    +                  CmsEnvelopedData         data = fact.Generate(content, algorithm);
    +             
    +
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + + Generate an enveloped object that contains a CMS Enveloped Data + object using the passed in key generator. + + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Parsing class for an CMS Enveloped Data object from an input stream. +

    + Note: that because we are in a streaming mode only one recipient can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(inputStream);
    +            
    +                  RecipientInformationStore  recipients = ep.GetRecipientInfos();
    +            
    +                  Collection  c = recipients.getRecipients();
    +                  Iterator    it = c.iterator();
    +            
    +                  if (it.hasNext())
    +                  {
    +                      RecipientInformation   recipient = (RecipientInformation)it.next();
    +            
    +                      CMSTypedStream recData = recipient.getContentStream(privateKey);
    +            
    +                      processDataStream(recData.getContentStream());
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the content encryption algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + @throws IOException + + + General class for generating a CMS enveloped-data message stream. +

    + A simple example of usage. +

    +                  CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
    +            
    +                  edGen.AddKeyTransRecipient(cert);
    +            
    +                  MemoryStream  bOut = new MemoryStream();
    +            
    +                  Stream out = edGen.Open(
    +                                          bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
    +                  out.Write(data);
    +            
    +                  out.Close();
    +             
    +

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data. + Length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information. + + + + Generate an enveloped object that contains an CMS Enveloped Data + object using the passed in key generator. + + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + add a recipient. + + @param cert recipient's public key certificate + @exception ArgumentException if there is a problem with the certificate + + + add a recipient + + @param key the public key used by the recipient + @param subKeyId the identifier for the recipient's public key + @exception ArgumentException if there is a problem with the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + Add a key agreement based recipient. + + @param agreementAlgorithm key agreement algorithm to use. + @param senderPrivateKey private key to initialise sender side of agreement with. + @param senderPublicKey sender public key to include with message. + @param recipientCert recipient's public key certificate. + @param cekWrapAlgorithm OID for key wrapping algorithm to use. + @exception SecurityUtilityException if the algorithm requested cannot be found + @exception InvalidKeyException if the keys are inappropriate for the algorithm specified + + + Add multiple key agreement based recipients (sharing a single KeyAgreeRecipientInfo structure). + + @param agreementAlgorithm key agreement algorithm to use. + @param senderPrivateKey private key to initialise sender side of agreement with. + @param senderPublicKey sender public key to include with message. + @param recipientCerts recipients' public key certificates. + @param cekWrapAlgorithm OID for key wrapping algorithm to use. + @exception SecurityUtilityException if the algorithm requested cannot be found + @exception InvalidKeyException if the keys are inappropriate for the algorithm specified + + + + Generic routine to copy out the data we want processed. + + + This routine may be called multiple times. + + + + a holding class for a byte array of data to be processed. + + + A clone of the byte array + + + a holding class for a file of data to be processed. + + + The file handle + + + general class for handling a pkcs7-signature message. + + A simple example of usage - note, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer... + +
    +              IX509Store              certs = s.GetCertificates();
    +              SignerInformationStore  signers = s.GetSignerInfos();
    +            
    +              foreach (SignerInformation signer in signers.GetSigners())
    +              {
    +                  ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
    +                  X509Certificate cert = (X509Certificate) certList[0];
    +            
    +                  if (signer.Verify(cert.GetPublicKey()))
    +                  {
    +                      verified++;
    +                  }
    +              }
    +             
    +
    + + Content with detached signature, digests precomputed + + @param hashes a map of precomputed digests for content indexed by name of hash. + @param sigBlock the signature object. + + + base constructor - content with detached signature. + + @param signedContent the content that was signed. + @param sigData the signature object. + + + base constructor - with encapsulated content + + + Return the version number for this object. + + + return the collection of signers that are associated with the + signatures for the message. + + + return a X509Store containing the attribute certificates, if any, contained + in this message. + + @param type type of store to create + @return a store of attribute certificates + @exception NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + return a X509Store containing the public key certificates, if any, contained + in this message. + + @param type type of store to create + @return a store of public key certificates + @exception NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + return a X509Store containing CRLs, if any, contained + in this message. + + @param type type of store to create + @return a store of CRLs + @exception NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + Replace the signerinformation store associated with this + CmsSignedData object with the new one passed in. You would + probably only want to do this if you wanted to change the unsigned + attributes associated with a signer, or perhaps delete one. + + @param signedData the signed data object to be used as a base. + @param signerInformationStore the new signer information store to use. + @return a new signed data object. + + + Replace the certificate and CRL information associated with this + CmsSignedData object with the new one passed in. + + @param signedData the signed data object to be used as a base. + @param x509Certs the new certificates to be used. + @param x509Crls the new CRLs to be used. + @return a new signed data object. + @exception CmsException if there is an error processing the stores + + + * general class for generating a pkcs7-signature message. + *

    + * A simple example of usage. + * + *

    +                 *      IX509Store certs...
    +                 *      IX509Store crls...
    +                 *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
    +                 *
    +                 *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
    +                 *      gen.AddCertificates(certs);
    +                 *      gen.AddCrls(crls);
    +                 *
    +                 *      CmsSignedData data = gen.Generate(content);
    +                 * 
    + *

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + + + add a signer - no attributes other than the default ones will be + provided here. + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param subjectKeyID subjectKeyID of corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a set of one or more SignerInformation objects representing counter signatures on + the passed in SignerInformation object. + + @param signer the signer to be countersigned + @param sigProvider the provider to be used for counter signing. + @return a store containing the signers. + + + Parsing class for an CMS Signed Data object from an input stream. +

    + Note: that because we are in a streaming mode only one signer can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + A simple example of usage for an encapsulated signature. +

    +

    + Two notes: first, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer, and, second, because we are in a streaming + mode the order of the operations is important. +

    +
    +                  CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
    +            
    +                  sp.GetSignedContent().Drain();
    +            
    +                  IX509Store              certs = sp.GetCertificates();
    +                  SignerInformationStore  signers = sp.GetSignerInfos();
    +            
    +                  foreach (SignerInformation signer in signers.GetSigners())
    +                  {
    +                      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
    +                      X509Certificate cert = (X509Certificate) certList[0];
    +            
    +                      Console.WriteLine("verify returns: " + signer.Verify(cert));
    +                  }
    +             
    + Note also: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + base constructor - with encapsulated content + + + base constructor + + @param signedContent the content that was signed. + @param sigData the signature object. + + + Return the version number for the SignedData object + + @return the version number + + + return the collection of signers that are associated with the + signatures for the message. + @throws CmsException + + + return a X509Store containing the attribute certificates, if any, contained + in this message. + + @param type type of store to create + @return a store of attribute certificates + @exception org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + return a X509Store containing the public key certificates, if any, contained + in this message. + + @param type type of store to create + @return a store of public key certificates + @exception NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + return a X509Store containing CRLs, if any, contained + in this message. + + @param type type of store to create + @return a store of CRLs + @exception NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + Replace the signerinformation store associated with the passed + in message contained in the stream original with the new one passed in. + You would probably only want to do this if you wanted to change the unsigned + attributes associated with a signer, or perhaps delete one. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param signerInformationStore the new signer information store to use. + @param out the stream to Write the new signed data object to. + @return out. +
    + + Replace the certificate and CRL information associated with this + CMSSignedData object with the new one passed in. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param certsAndCrls the new certificates and CRLs to be used. + @param out the stream to Write the new signed data object to. + @return out. + @exception CmsException if there is an error processing the CertStore +
    + + General class for generating a pkcs7-signature message stream. +

    + A simple example of usage. +

    +
    +                  IX509Store                   certs...
    +                  CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
    +            
    +                  gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
    +            
    +                  gen.AddCertificates(certs);
    +            
    +                  Stream sigOut = gen.Open(bOut);
    +            
    +                  sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
    +            
    +                  sigOut.Close();
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes - specifying digest + encryption algorithm. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". If dataOutputStream is non null the data + being signed will be written to the stream as it is processed. + @param out stream the CMS object is to be written to. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + @param out stream the CMS object is to be written to. + @param signedContentType OID for data to be signed. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + Default type for the signed data. + + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Add the attribute certificates contained in the passed in store to the + generator. + + @param store a store of Version 2 attribute certificates + @throws CmsException if an error occurse processing the store. + + + Add a store of precalculated signers to the generator. + + @param signerStore store of signers + + + Return a map of oids and byte arrays representing the digests calculated on the content during + the last generate. + + @return a map of oids (as String objects) and byte[] representing digests. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + Return the digest encryption algorithm using one of the standard + JCA string representations rather than the algorithm identifier (if + possible). + + + Default authenticated attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in IDictionary of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + Default signed attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType, signingTime, and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType, signingTime, and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in Hashtable of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a secret key known to the other side. + + + decrypt the content and return an input stream. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using key agreement. + + + decrypt the content and return an input stream. + + + the KeyTransRecipientInformation class for a recipient who has been sent a secret + key encrypted using their public key that needs to be used to + extract the message. + + + decrypt the content and return it as a byte array. + + + a basic index for an originator. + + + Return the certificates stored in the underlying OriginatorInfo object. + + @return a Store of X509CertificateHolder objects. + + + Return the CRLs stored in the underlying OriginatorInfo object. + + @return a Store of X509CRLHolder objects. + + + Return the underlying ASN.1 object defining this SignerInformation object. + + @return a OriginatorInfo. + + + + PKCS5 scheme-2 - password converted to bytes assuming ASCII. + + + + PKCS5 scheme-2 - password converted to bytes using UTF-8. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a password. + + + return the object identifier for the key derivation algorithm, or null + if there is none present. + + @return OID for key derivation algorithm, if present. + + + decrypt the content and return an input stream. + + + + Generate a RecipientInfo object for the given key. + + + A + + + A + + + A + + + + + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + + + * return the ASN.1 encoded key encryption algorithm parameters, or null if + * there aren't any. + * + * @return ASN.1 encoding of key encryption algorithm parameters. + + + Return the MAC calculated for the content stream. Note: this call is only meaningful once all + the content has been read. + + @return byte array containing the mac. + + + Return the first RecipientInformation object that matches the + passed in selector. Null if there are no matches. + + @param selector to identify a recipient + @return a single RecipientInformation object. Null if none matches. + + + Return the number of recipients in the collection. + + @return number of recipients identified. + + + Return all recipients in the collection + + @return a collection of recipients. + + + Return possible empty collection with recipients matching the passed in RecipientID + + @param selector a recipient id to select against. + @return a collection of RecipientInformation objects. + + + a basic index for a signer. + + + If the passed in flag is true, the signer signature will be based on the data, not + a collection of signed attributes, and no signed attributes will be included. + + @return the builder object + + + Provide a custom signed attribute generator. + + @param signedGen a generator of signed attributes. + @return the builder object + + + Provide a generator of unsigned attributes. + + @param unsignedGen a generator for signed attributes. + @return the builder object + + + Build a generator with the passed in certHolder issuer and serial number as the signerIdentifier. + + @param contentSigner operator for generating the final signature in the SignerInfo with. + @param certHolder carrier for the X.509 certificate related to the contentSigner. + @return a SignerInfoGenerator + @throws OperatorCreationException if the generator cannot be built. + + + Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + try to follow the calculation described in RFC 5280 section 4.2.1.2. + + @param signerFactory operator factory for generating the final signature in the SignerInfo with. + @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + @return a SignerInfoGenerator + + + an expanded SignerInfo block from a CMS Signed message + + + return the version number for this objects underlying SignerInfo structure. + + + return the object identifier for the signature. + + + return the signature parameters, or null if there aren't any. + + + return the content digest that was calculated during verification. + + + return the object identifier for the signature. + + + return the signature/encryption algorithm parameters, or null if + there aren't any. + + + return a table of the signed attributes - indexed by + the OID of the attribute. + + + return a table of the unsigned attributes indexed by + the OID of the attribute. + + + return the encoded signature + + + Return a SignerInformationStore containing the counter signatures attached to this + signer. If no counter signatures are present an empty store is returned. + + + return the DER encoding of the signed attributes. + @throws IOException if an encoding error occurs. + + + verify that the given public key successfully handles and confirms the + signature associated with this signer. + + + verify that the given certificate successfully handles and confirms + the signature associated with this signer and, if a signingTime + attribute is available, that the certificate was valid at the time the + signature was generated. + + + Return the base ASN.1 CMS structure that this object contains. + + @return an object containing a CMS SignerInfo structure. + + + Return a signer information object with the passed in unsigned + attributes replacing the ones that are current associated with + the object passed in. + + @param signerInformation the signerInfo to be used as the basis. + @param unsignedAttributes the unsigned attributes to add. + @return a copy of the original SignerInformationObject with the changed attributes. + + + Return a signer information object with passed in SignerInformationStore representing counter + signatures attached as an unsigned attribute. + + @param signerInformation the signerInfo to be used as the basis. + @param counterSigners signer info objects carrying counter signature. + @return a copy of the original SignerInformationObject with the changed attributes. + + + Create a store containing a single SignerInformation object. + + @param signerInfo the signer information to contain. + + + Create a store containing a collection of SignerInformation objects. + + @param signerInfos a collection signer information objects to contain. + + + Return the first SignerInformation object that matches the + passed in selector. Null if there are no matches. + + @param selector to identify a signer + @return a single SignerInformation object. Null if none matches. + + + The number of signers in the collection. + + + An ICollection of all signers in the collection + + + Return possible empty collection with signers matching the passed in SignerID + + @param selector a signer id to select against. + @return a collection of SignerInformation objects. + + + Basic generator that just returns a preconstructed attribute table + + + a holding class for public/private parameter pairs. + + + basic constructor. + + @param publicParam a public key parameters object. + @param privateParam the corresponding private key parameters. + + + return the public key parameters. + + @return the public key parameters. + + + return the private key parameters. + + @return the private key parameters. + + + The AEAD block ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + initialise the cipher. + + @param forEncryption if true the cipher is initialised for + encryption, if false for decryption. + @param param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + return the size of the output buffer required for an update + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to update + with len bytes of input. + + + return the size of the output buffer required for an update plus a + doFinal with an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to update and doFinal + with len bytes of input. + + + process a single byte, producing an output block if necessary. + + @param in the input byte. + @param out the space for any output that might be produced. + @param outOff the offset from which the output will be copied. + @return the number of output bytes copied to out. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the cipher isn't initialised. + + + process an array of bytes, producing output if necessary. + + @param in the input byte array. + @param inOff the offset at which the input data starts. + @param len the number of bytes to be copied out of the input array. + @param out the space for any output that might be produced. + @param outOff the offset from which the output will be copied. + @return the number of output bytes copied to out. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the cipher isn't initialised. + + + Process the last block in the buffer. + + @param out the array the block currently being held is copied into. + @param outOff the offset at which the copying starts. + @return the number of output bytes copied to out. + @exception DataLengthException if there is insufficient space in out for + the output, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + a buffer wrapper for an asymmetric block cipher, allowing input + to be accumulated in a piecemeal fashion until final processing. + + + base constructor. + + @param cipher the cipher this buffering object wraps. + + + return the amount of data sitting in the buffer. + + @return the amount of data sitting in the buffer. + + + initialise the buffer and the underlying cipher. + + @param forEncryption if true the cipher is initialised for + encryption, if false for decryption. + @param param the key and other data required by the cipher. + + + process the contents of the buffer using the underlying + cipher. + + @return the result of the encryption/decryption process on the + buffer. + @exception InvalidCipherTextException if we are given a garbage block. + + + Reset the buffer + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + buffer is full and more data is being added, or on a doFinal. +

    + Note: in the case where the underlying cipher is either a CFB cipher or an + OFB one the last block may not be a multiple of the block size. +

    +
    + + constructor for subclasses + + + Create a buffered block cipher without padding. + + @param cipher the underlying block cipher this buffering object wraps. + false otherwise. + + + initialise the cipher. + + @param forEncryption if true the cipher is initialised for + encryption, if false for decryption. + @param param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + return the size of the output buffer required for an update + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to update + with len bytes of input. + + + return the size of the output buffer required for an update plus a + doFinal with an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to update and doFinal + with len bytes of input. + + + process a single byte, producing an output block if necessary. + + @param in the input byte. + @param out the space for any output that might be produced. + @param outOff the offset from which the output will be copied. + @return the number of output bytes copied to out. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the cipher isn't initialised. + + + process an array of bytes, producing output if necessary. + + @param in the input byte array. + @param inOff the offset at which the input data starts. + @param len the number of bytes to be copied out of the input array. + @param out the space for any output that might be produced. + @param outOff the offset from which the output will be copied. + @return the number of output bytes copied to out. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the cipher isn't initialised. + + + Process the last block in the buffer. + + @param out the array the block currently being held is copied into. + @param outOff the offset at which the copying starts. + @return the number of output bytes copied to out. + @exception DataLengthException if there is insufficient space in out for + the output, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The base class for symmetric, or secret, cipher key generators. + + + initialise the key generator. + + @param param the parameters to be used for key generation + + + Generate a secret key. + + @return a byte array containing the key value. + + + this exception is thrown if a buffer that is meant to have output + copied into it turns out to be too short, or if we've been given + insufficient input. In general this exception will Get thrown rather + than an ArrayOutOfBounds exception. + + + base constructor. + + + create a DataLengthException with the given message. + + @param message the message to be carried with the exception. + + + Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + + + Base constructor. + + @param baseDigest underlying digest to use. + @exception IllegalArgumentException if baseDigest is null + + + implementation of GOST R 34.11-94 + + + Standard constructor + + + Constructor to allow use of a particular sbox with GOST28147 + @see GOST28147Engine#getSBox(String) + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + base implementation of MD4 family style digest as outlined in + "Handbook of Applied Cryptography", pages 344 - 347. + + + + Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Return the size of block that the compression function is applied to in bytes. + + @return internal byte length of a block. + + + Base class for SHA-384 and SHA-512. + + + Constructor for variable length word + + + Copy constructor. We are using copy constructors in place + of the object.Clone() interface as this interface is not + supported by J2ME. + + + adjust the byte counts so that byteCount2 represents the + upper long (less 3 bits) word of the byte count. + + + implementation of MD2 + as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + + + return the algorithm name + + @return the algorithm name + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param out the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + update the message digest with a single byte. + + @param in the input byte to be entered. + + + update the message digest with a block of bytes. + + @param in the byte array containing the data. + @param inOff the offset into the byte array where the data starts. + @param len the length of the data. + + + implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + Computer Science and RSA Data Security, Inc. +

    + NOTE: This algorithm is only included for backwards compatibility + with legacy applications, it's not secure, don't use it for anything new!

    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD128 + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD see, + http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD256.

    +

    Note: this algorithm offers the same level of security as RipeMD128.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD 320.

    +

    Note: this algorithm offers the same level of security as RipeMD160.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + + Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + + Implementation of Chinese SM3 digest as described at + http://tools.ietf.org/html/draft-shen-sm3-hash-00 + and at .... ( Chinese PDF ) + + + The specification says "process a bit stream", + but this is written to process bytes in blocks of 4, + meaning this will process 32-bit word groups. + But so do also most other digest specifications, + including the SHA-256 which was a origin for + this specification. + + + + + Standard constructor + + + + + Copy constructor. This will copy the state of the provided + message digest. + + + + + reset the chaining variables + + + + implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + + It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + is the "endianness" of the word processing! + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + SHA-224 as described in RFC 3874 +
    +                    block  word  digest
    +            SHA-1   512    32    160
    +            SHA-224 512    32    224
    +            SHA-256 512    32    256
    +            SHA-384 1024   64    384
    +            SHA-512 1024   64    512
    +            
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-256. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-384. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-512. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + FIPS 180-4 implementation of SHA-512/t + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Wrapper class that reduces the output length of a particular digest to + only the first n bytes of the digest function. + + + Base constructor. + + @param baseDigest underlying digest to use. + @param length length in bytes of the output of doFinal. + @exception ArgumentException if baseDigest is null, or length is greater than baseDigest.GetDigestSize(). + + + + Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + sizes, based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation is the basis for and , implementing the + parameter based configuration system that allows Skein to be adapted to multiple applications.
    + Initialising the engine with allows standard and arbitrary parameters to + be applied during the Skein hash function. +

    + Implemented: +

      +
    • 256, 512 and 1024 bit internal states.
    • +
    • Full 96 bit input length.
    • +
    • Parameters defined in the Skein specification, and arbitrary other pre and post message + parameters.
    • +
    • Arbitrary output size in 1 byte intervals.
    • +
    +

    + Not implemented: +

      +
    • Sub-byte length input (bit padding).
    • +
    • Tree hashing.
    • +
    +
    + +
    + + + 256 bit block size - Skein-256 + + + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + The parameter type for the Skein key. + + + The parameter type for the Skein configuration block. + + + The parameter type for the message. + + + The parameter type for the output transformation. + + + Precalculated UBI(CFG) states for common state/output combinations without key or other + pre-message params. + + + Point at which position might overflow long, so switch to add with carry logic + + + Bit 127 = final + + + Bit 126 = first + + + UBI uses a 128 bit tweak + + + Whether 64 bit position exceeded + + + Advances the position in the tweak by the specified value. + + + The Unique Block Iteration chaining mode. + + + Buffer for the current block of message data + + + Offset into the current message block + + + Buffer for message words for feedback into encrypted block + + + Underlying Threefish tweakable block cipher + + + Size of the digest output, in bytes + + + The current chaining/state value + + + The initial state value + + + The (optional) key parameter + + + Parameters to apply prior to the message + + + Parameters to apply after the message, but prior to output + + + The current UBI operation + + + Buffer for single byte update method + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Creates a SkeinEngine as an exact copy of an existing instance. + + + + + Initialises the Skein engine with the provided parameters. See for + details on the parameterisation of the Skein hash function. + + the parameters to apply to this engine, or null to use no parameters. + + + Calculate the initial (pre message block) chaining state. + + + + Reset the engine to the initial state (with the key and any pre-message parameters , ready to + accept message input. + + + + implementation of Tiger based on: + + http://www.cs.technion.ac.il/~biham/Reports/Tiger + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Implementation of WhirlpoolDigest, based on Java source published by Barreto + and Rijmen. + + + + Copy constructor. This will copy the state of the provided message + digest. + + + Reset the chaining variables + + + initialise a Serpent cipher. + + @param encrypting whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @throws IllegalArgumentException if the params argument is + inappropriate. + + + Process one block of input from the array in and write it to + the out array. + + @param in the array containing the input data. + @param inOff offset into the in array the data starts at. + @param out the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + @return the number of bytes processed and produced. + @throws DataLengthException if there isn't enough data in in, or + space in out. + @throws IllegalStateException if the cipher isn't initialised. + + + InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + + + S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + + + InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + + + S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + + + InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + + + S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + + + InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + + + S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + + + InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + + + S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + + + InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + + + S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + + + InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + + + S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + + + InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + + + Apply the linear transformation to the register set. + + + Apply the inverse of the linear transformation to the register set. + + + Tnepres is a 128-bit 32-round block cipher with variable key lengths, + including 128, 192 and 256 bit keys conjectured to be at least as + secure as three-key triple-DES. +

    + Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + as well, which is a byte swapped version of Serpent. +

    +

    + For full details see The Serpent home page +

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first. + + The slowest version uses no static tables at all and computes the values in each round. +

    +

    + This file contains the middle performance version with 2Kbytes of static tables for round precomputation. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + an implementation of the AES (Rijndael)), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor), they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations), 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each), for a total of 2Kbytes), + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values in each round +

    +

    + This file contains the fast version with 8Kbytes of static tables for round precomputation +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values + in each round. +

    +

    + This file contains the slowest performance version with no static tables + for round precomputation, but it has the smallest foot print. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. +

    + For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + A class that provides Blowfish key encryption operations, + such as encoding data and generating keys. + All the algorithms herein are from Applied Cryptography + and implement a simplified cryptography interface. + + + initialise a Blowfish cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + apply the encryption cycle to each value pair in the table. + + + Encrypt the given input starting at the given offset and place + the result in the provided buffer starting at the given offset. + The input will be an exact multiple of our blocksize. + + + Decrypt the given input starting at the given offset and place + the result in the provided buffer starting at the given offset. + The input will be an exact multiple of our blocksize. + + + Camellia - based on RFC 3713. + + + Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + + + + An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3657.txt. + + + + A class that provides CAST key encryption operations, + such as encoding data and generating keys. + + All the algorithms herein are from the Internet RFC's + + RFC2144 - Cast5 (64bit block, 40-128bit key) + RFC2612 - CAST6 (128bit block, 128-256bit key) + + and implement a simplified cryptography interface. + + + initialise a CAST cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Encrypt the given input starting at the given offset and place + the result in the provided buffer starting at the given offset. + + @param src The plaintext buffer + @param srcIndex An offset into src + @param dst The ciphertext buffer + @param dstIndex An offset into dst + + + Decrypt the given input starting at the given offset and place + the result in the provided buffer starting at the given offset. + + @param src The plaintext buffer + @param srcIndex An offset into src + @param dst The ciphertext buffer + @param dstIndex An offset into dst + + + The first of the three processing functions for the + encryption and decryption. + + @param D the input to be processed + @param Kmi the mask to be used from Km[n] + @param Kri the rotation value to be used + + + + The second of the three processing functions for the + encryption and decryption. + + @param D the input to be processed + @param Kmi the mask to be used from Km[n] + @param Kri the rotation value to be used + + + + The third of the three processing functions for the + encryption and decryption. + + @param D the input to be processed + @param Kmi the mask to be used from Km[n] + @param Kri the rotation value to be used + + + + Does the 16 rounds to encrypt the block. + + @param L0 the LH-32bits of the plaintext block + @param R0 the RH-32bits of the plaintext block + + + A class that provides CAST6 key encryption operations, + such as encoding data and generating keys. + + All the algorithms herein are from the Internet RFC + + RFC2612 - CAST6 (128bit block, 128-256bit key) + + and implement a simplified cryptography interface. + + + Encrypt the given input starting at the given offset and place + the result in the provided buffer starting at the given offset. + + @param src The plaintext buffer + @param srcIndex An offset into src + @param dst The ciphertext buffer + @param dstIndex An offset into dst + + + Decrypt the given input starting at the given offset and place + the result in the provided buffer starting at the given offset. + + @param src The plaintext buffer + @param srcIndex An offset into src + @param dst The ciphertext buffer + @param dstIndex An offset into dst + + + Does the 12 quad rounds rounds to encrypt the block. + + @param A the 00-31 bits of the plaintext block + @param B the 32-63 bits of the plaintext block + @param C the 64-95 bits of the plaintext block + @param D the 96-127 bits of the plaintext block + @param result the resulting ciphertext + + + Does the 12 quad rounds rounds to decrypt the block. + + @param A the 00-31 bits of the ciphertext block + @param B the 32-63 bits of the ciphertext block + @param C the 64-95 bits of the ciphertext block + @param D the 96-127 bits of the ciphertext block + @param result the resulting plaintext + + +

    + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + +
    + + + Creates a 20 rounds ChaCha engine. + + + + + Creates a ChaCha engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + + ChacCha function. + + The number of ChaCha rounds to execute + The input words. + The ChaCha state to modify. + + + A class that provides a basic DESede (or Triple DES) engine. + + + initialise a DESede cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

    + * Note: + *

      + *
    • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
    • + *
    • if you are using this to wrap triple-des keys you need to set the + * parity bits on the key and, if it's a two-key triple-des key, pad it + * yourself.
    • + *
    + *

    +
    + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + Some key wrap algorithms make use of the Key Checksum defined + in CMS [CMS-Algorithms]. This is used to provide an integrity + check value for the key being wrapped. The algorithm is + + - Compute the 20 octet SHA-1 hash on the key being wrapped. + - Use the first 8 octets of this hash as the checksum value. + + @param key + @return + @throws Exception + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + A class that provides a basic DES engine. + + + initialise a DES cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + what follows is mainly taken from "Applied Cryptography", by + Bruce Schneier, however it also bears great resemblance to Richard + Outerbridge's D3DES... + + + Generate an integer based working key based on our secret key + and what we processing we are planning to do. + + Acknowledgements for this routine go to James Gillogly and Phil Karn. + (whoever, and wherever they are!). + + + the DES engine. + + + this does your basic ElGamal algorithm. + + + initialise the ElGamal engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary ElGamal key parameters. + + + Return the maximum size for an input block to this engine. + For ElGamal this is always one byte less than the size of P on + encryption, and twice the length as the size of P on decryption. + + @return maximum size for an input block. + + + Return the maximum size for an output block to this engine. + For ElGamal this is always one byte less than the size of P on + decryption, and twice the length as the size of P on encryption. + + @return maximum size for an output block. + + + Process a single block using the basic ElGamal algorithm. + + @param in the input array. + @param inOff the offset into the input buffer where the data starts. + @param length the length of the data to be processed. + @return the result of the ElGamal process. + @exception DataLengthException the input block is too large. + + + implementation of GOST 28147-89 + + + standard constructor. + + + initialise an Gost28147 cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is inappropriate. + + + Return the S-Box associated with SBoxName + @param sBoxName name of the S-Box + @return byte array representing the S-Box + + + HC-128 is a software-efficient stream cipher created by Hongjun Wu. It + generates keystream from a 128-bit secret key and a 128-bit initialization + vector. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf +

    + It is a third phase candidate in the eStream contest, and is patent-free. + No attacks are known as of today (April 2007). See + + http://www.ecrypt.eu.org/stream/hcp3.html +

    +
    + + Initialise a HC-128 cipher. + + @param forEncryption whether or not we are for encryption. Irrelevant, as + encryption and decryption are the same. + @param params the parameters required to set up the cipher. + @throws ArgumentException if the params argument is + inappropriate (ie. the key is not 128 bit long). + + + HC-256 is a software-efficient stream cipher created by Hongjun Wu. It + generates keystream from a 256-bit secret key and a 256-bit initialization + vector. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf +

    + Its brother, HC-128, is a third phase candidate in the eStream contest. + The algorithm is patent-free. No attacks are known as of today (April 2007). + See + + http://www.ecrypt.eu.org/stream/hcp3.html +

    +
    + + Initialise a HC-256 cipher. + + @param forEncryption whether or not we are for encryption. Irrelevant, as + encryption and decryption are the same. + @param params the parameters required to set up the cipher. + @throws ArgumentException if the params argument is + inappropriate (ie. the key is not 256 bit long). + + + Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + see: http://www.burtleburtle.net/bob/rand/isaacafa.html + + + initialise an ISAAC cipher. + + @param forEncryption whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @exception ArgumentException if the params argument is + inappropriate. + + + A class that provides a basic International Data Encryption Algorithm (IDEA) engine. +

    + This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (baring 1 typo at the + end of the mulinv function!). +

    +

    + It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ +

    +

    + Note 1: This algorithm is patented in the USA, Japan, and Europe including + at least Austria, France, Germany, Italy, Netherlands, Spain, Sweden, Switzerland + and the United Kingdom. Non-commercial use is free, however any commercial + products are liable for royalties. Please see + www.mediacrypt.com for + further details. This announcement has been included at the request of + the patent holders. +

    +

    + Note 2: Due to the requests concerning the above, this algorithm is now only + included in the extended assembly. It is not included in the default distributions. +

    +
    + + standard constructor. + + + initialise an IDEA cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return x = x * y where the multiplication is done modulo + 65537 (0x10001) (as defined in the IDEA specification) and + a zero input is taken to be 65536 (0x10000). + + @param x the x value + @param y the y value + @return x = x * y + + + The following function is used to expand the user key to the encryption + subkey. The first 16 bytes are the user key, and the rest of the subkey + is calculated by rotating the previous 16 bytes by 25 bits to the left, + and so on until the subkey is completed. + + + This function computes multiplicative inverse using Euclid's Greatest + Common Divisor algorithm. Zero and one are self inverse. +

    + i.e. x * MulInv(x) == 1 (modulo BASE) +

    +
    + + Return the additive inverse of x. +

    + i.e. x + AddInv(x) == 0 +

    +
    + + The function to invert the encryption subkey to the decryption subkey. + It also involves the multiplicative inverse and the additive inverse functions. + + + support class for constructing intergrated encryption ciphers + for doing basic message exchanges on top of key agreement ciphers + + + set up for use with stream mode, where the key derivation function + is used to provide a stream of bytes to xor with the message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + + + set up for use in conjunction with a block cipher to handle the + message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + @param cipher the cipher to used for encrypting the message + + + Initialise the encryptor. + + @param forEncryption whether or not this is encryption/decryption. + @param privParam our private key parameters + @param pubParam the recipient's/sender's public key parameters + @param param encoding and derivation parameters. + + + NaccacheStern Engine. For details on this cipher, please see + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Initializes this algorithm. Must be called before all other Functions. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + org.bouncycastle.crypto.CipherParameters) + + + Returns the input block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + + + Returns the output block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + + + Process a single Block using the Naccache-Stern algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + int, int) + + + Encrypts a BigInteger aka Plaintext with the public key. + + @param plain + The BigInteger to encrypt + @return The byte[] representation of the encrypted BigInteger (i.e. + crypted.toByteArray()) + + + Adds the contents of two encrypted blocks mod sigma + + @param block1 + the first encrypted block + @param block2 + the second encrypted block + @return encrypt((block1 + block2) mod sigma) + @throws InvalidCipherTextException + + + Convenience Method for data exchange with the cipher. + + Determines blocksize and splits data to blocksize. + + @param data the data to be processed + @return the data after it went through the NaccacheSternEngine. + @throws InvalidCipherTextException + + + Computes the integer x that is expressed through the given primes and the + congruences with the chinese remainder theorem (CRT). + + @param congruences + the congruences c_i + @param primes + the primes p_i + @return an integer x for that x % p_i == c_i + + + A Noekeon engine, using direct-key mode. + + + Create an instance of the Noekeon encryption algorithm + and set some defaults + + + initialise + + @param forEncryption whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @exception ArgumentException if the params argument is + inappropriate. + + + Re-key the cipher. + + @param key the key to be used + + + The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + Provided for the sake of completeness. + + + an implementation of RC2 as described in RFC 2268 + "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + + + initialise a RC2 cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the result rotating the 16 bit number in x left by y + + + Wrap keys according to RFC 3217 - RC2 mechanism + + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + Some key wrap algorithms make use of the Key Checksum defined + in CMS [CMS-Algorithms]. This is used to provide an integrity + check value for the key being wrapped. The algorithm is + + - Compute the 20 octet SHA-1 hash on the key being wrapped. + - Use the first 8 octets of this hash as the checksum value. + + @param key + @return + @throws Exception + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + initialise a RC4 cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation has a word size of 32 bits.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + initialise a RC5-32 cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Re-key the cipher. + + @param key the key to be used + + + Encrypt the given block starting at the given offset and place + the result in the provided buffer starting at the given offset. + + @param in in byte buffer containing data to encrypt + @param inOff offset into src buffer + @param out out buffer where encrypted data is written + @param outOff offset into out buffer + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + are used to determine the rotation amount. Here it is + assumed that the wordsize used is a power of 2. + + @param x word to rotate + @param y number of bits to rotate % 32 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + are used to determine the rotation amount. Here it is + assumed that the wordsize used is a power of 2. + + @param x word to rotate + @param y number of bits to rotate % 32 + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation is set to work with a 64 bit word size.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + initialise a RC5-64 cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Re-key the cipher. + + @param key the key to be used + + + Encrypt the given block starting at the given offset and place + the result in the provided buffer starting at the given offset. + + @param in in byte buffer containing data to encrypt + @param inOff offset into src buffer + @param out out buffer where encrypted data is written + @param outOff offset into out buffer + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + are used to determine the rotation amount. Here it is + assumed that the wordsize used is a power of 2. + + @param x word to rotate + @param y number of bits to rotate % wordSize + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + are used to determine the rotation amount. Here it is + assumed that the wordsize used is a power of 2. + + @param x word to rotate + @param y number of bits to rotate % wordSize + + + An RC6 engine. + + + Create an instance of the RC6 encryption algorithm + and set some defaults + + + initialise a RC5-32 cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Re-key the cipher. + + @param inKey the key to be used + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + are used to determine the rotation amount. Here it is + assumed that the wordsize used is a power of 2. + + @param x word to rotate + @param y number of bits to rotate % wordSize + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + are used to determine the rotation amount. Here it is + assumed that the wordsize used is a power of 2. + + @param x word to rotate + @param y number of bits to rotate % wordSize + + + an implementation of the RFC 3211 Key Wrap + Specification. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap + Specification as described in RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3394.txt + and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + this does your basic RSA algorithm with blinding + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key parameters. + + + Return the maximum size for an input block to this engine. + For RSA this is always one byte less than the key size on + encryption, and the same length as the key size on decryption. + + @return maximum size for an input block. + + + Return the maximum size for an output block to this engine. + For RSA this is always one byte less than the key size on + decryption, and the same length as the key size on encryption. + + @return maximum size for an output block. + + + Process a single block using the basic RSA algorithm. + + @param inBuf the input array. + @param inOff the offset into the input buffer where the data starts. + @param inLen the length of the data to be processed. + @return the result of the RSA process. + @exception DataLengthException the input block is too large. + + + This does your basic RSA Chaum's blinding and unblinding as outlined in + "Handbook of Applied Cryptography", page 475. You need to use this if you are + trying to get another party to generate signatures without them being aware + of the message they are signing. + + + Initialise the blinding engine. + + @param forEncryption true if we are encrypting (blinding), false otherwise. + @param param the necessary RSA key parameters. + + + Return the maximum size for an input block to this engine. + For RSA this is always one byte less than the key size on + encryption, and the same length as the key size on decryption. + + @return maximum size for an input block. + + + Return the maximum size for an output block to this engine. + For RSA this is always one byte less than the key size on + decryption, and the same length as the key size on encryption. + + @return maximum size for an output block. + + + Process a single block using the RSA blinding algorithm. + + @param in the input array. + @param inOff the offset into the input buffer where the data starts. + @param inLen the length of the data to be processed. + @return the result of the RSA process. + @throws DataLengthException the input block is too large. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key parameters. + + + Return the maximum size for an input block to this engine. + For RSA this is always one byte less than the key size on + encryption, and the same length as the key size on decryption. + + @return maximum size for an input block. + + + Return the maximum size for an output block to this engine. + For RSA this is always one byte less than the key size on + decryption, and the same length as the key size on encryption. + + @return maximum size for an output block. + + + an implementation of Rijndael, based on the documentation and reference implementation + by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. +

    + Note: this implementation is based on information prior to readonly NIST publication. +

    +
    + + multiply two elements of GF(2^m) + needed for MixColumn and InvMixColumn + + + xor corresponding text input and round key input bytes + + + Row 0 remains unchanged + The other three rows are shifted a variable amount + + + Replace every byte of the input by the byte at that place + in the nonlinear S-box + + + Mix the bytes of every column in a linear way + + + Mix the bytes of every column in a linear way + This is the opposite operation of Mixcolumn + + + Calculate the necessary round keys + The number of calculations depends on keyBits and blockBits + + + default constructor - 128 bit block size. + + + basic constructor - set the cipher up for a given blocksize + + @param blocksize the blocksize in bits, must be 128, 192, or 256. + + + initialise a Rijndael cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key parameters. + + + Return the maximum size for an input block to this engine. + For RSA this is always one byte less than the key size on + encryption, and the same length as the key size on decryption. + + @return maximum size for an input block. + + + Return the maximum size for an output block to this engine. + For RSA this is always one byte less than the key size on + decryption, and the same length as the key size on encryption. + + @return maximum size for an output block. + + + Process a single block using the basic RSA algorithm. + + @param inBuf the input array. + @param inOff the offset into the input buffer where the data starts. + @param inLen the length of the data to be processed. + @return the result of the RSA process. + @exception DataLengthException the input block is too large. + + + Implementation of the SEED algorithm as described in RFC 4009 + + + + An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc4010.txt. + + + +

    + Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + +
    + + Constants + + + + Creates a 20 round Salsa20 engine. + + + + + Creates a Salsa20 engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + Rotate left + + @param x value to rotate + @param y amount to rotate x + + @return rotated x + + + * Serpent is a 128-bit 32-round block cipher with variable key lengths, + * including 128, 192 and 256 bit keys conjectured to be at least as + * secure as three-key triple-DES. + *

    + * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

    + *

    + * For full details see The Serpent home page + *

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + a class that provides a basic SKIPJACK engine. + + + initialise a SKIPJACK cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + The G permutation + + + the inverse of the G permutation. + + + An TEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + initialise + + @param forEncryption whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @exception ArgumentException if the params argument is + inappropriate. + + + Re-key the cipher. + + @param key the key to be used + + + + Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + sizes. + + + This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + SHA-3 competition in October 2010. +

    + Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + to speed up key schedule injection.
    + 2 x block size state is retained by each cipher instance. + + + +

    + 256 bit block size - Threefish-256 + +
    + + + 512 bit block size - Threefish-512 + + + + + 1024 bit block size - Threefish-1024 + + + + Size of the tweak in bytes (always 128 bit/16 bytes) + + + Rounds in Threefish-256 + + + Rounds in Threefish-512 + + + Rounds in Threefish-1024 + + + Max rounds of any of the variants + + + Key schedule parity constant + + + Block size in bytes + + + Block size in 64 bit words + + + Buffer for byte oriented processBytes to call internal word API + + + Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + + + Key schedule words + + + The internal cipher implementation (varies by blocksize) + + + + Constructs a new Threefish cipher, with a specified block size. + + the block size in bits, one of , , + . + + + + Initialise the engine. + + Initialise for encryption if true, for decryption if false. + an instance of or (to + use a 0 tweak) + + + + Initialise the engine, specifying the key and tweak directly. + + the cipher mode. + the words of the key, or null to use the current key. + the 2 word (128 bit) tweak, or null to use the current tweak. + + + + Process a block of data represented as 64 bit words. + + the number of 8 byte words processed (which will be the same as the block size). + a block sized buffer of words to process. + a block sized buffer of words to receive the output of the operation. + if either the input or output is not block sized + if this engine is not initialised + + + + Read a single 64 bit word from input in LSB first order. + + + + + Write a 64 bit word to output in LSB first order. + + + + Rotate left + xor part of the mix operation. + + + Rotate xor + rotate right part of the unmix operation. + + + The extended + repeated tweak words + + + The extended + repeated key words + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + A class that provides Twofish encryption operations. + + This Java implementation is based on the Java reference + implementation provided by Bruce Schneier and developed + by Raif S. Naffah. + + + Define the fixed p0/p1 permutations used in keyed S-box lookup. + By changing the following constant definitions, the S-boxes will + automatically Get changed in the Twofish engine. + + + gSubKeys[] and gSBox[] are eventually used in the + encryption and decryption methods. + + + initialise a Twofish cipher. + + @param forEncryption whether or not we are for encryption. + @param parameters the parameters required to set up the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Encrypt the given input starting at the given offset and place + the result in the provided buffer starting at the given offset. + The input will be an exact multiple of our blocksize. + + encryptBlock uses the pre-calculated gSBox[] and subKey[] + arrays. + + + Decrypt the given input starting at the given offset and place + the result in the provided buffer starting at the given offset. + The input will be an exact multiple of our blocksize. + + + Use (12, 8) Reed-Solomon code over GF(256) to produce + a key S-box 32-bit entity from 2 key material 32-bit + entities. + + @param k0 first 32-bit entity + @param k1 second 32-bit entity + @return Remainder polynomial Generated using RS code + + + * Reed-Solomon code parameters: (12,8) reversible code: + *

    + *

    +                    * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
    +                    * 
    + * where a = primitive root of field generator 0x14D + *

    +
    + + initialise a VMPC cipher. + + @param forEncryption + whether or not we are for encryption. + @param params + the parameters required to set up the cipher. + @exception ArgumentException + if the params argument is inappropriate. + + + + Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + + + XSalsa20 requires a 256 bit key, and a 192 bit nonce. + + + + + XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + using a core Salsa20 function without input addition to produce 256 bit working key + and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + + + + An XTEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + initialise + + @param forEncryption whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @exception ArgumentException if the params argument is + inappropriate. + + + Re-key the cipher. + + @param key the key to be used + + + Base interface for a public/private key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The maximum size, in bytes, an input block may be. + + + The maximum size, in bytes, an output block will be. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The length of the input block. + Input decrypts improperly. + Input is too large for the cipher. + + + interface that a public/private key pair generator should conform to. + + + intialise the key pair generator. + + @param the parameters the key pair is to be initialised with. + + + return an AsymmetricCipherKeyPair containing the Generated keys. + + @return an AsymmetricCipherKeyPair containing the Generated keys. + + + The basic interface that basic Diffie-Hellman implementations + conforms to. + + + initialise the agreement engine. + + + return the field size for the agreement algorithm in bytes. + + + given a public key from a given party calculate the next + message in the agreement sequence. + + + Base interface for a symmetric key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Indicates whether this cipher can handle partial blocks. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The output buffer. + The offset into outBuf to write the output block. + If input block is wrong size, or outBuf too small. + The number of bytes processed and produced. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to a single block return an object + of this type. + + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + Block cipher engines are expected to conform to this interface. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + + + Reset the cipher. After resetting the cipher is in the same state + as it was after the last init (if there was one). + + + + all parameter classes implement this. + + + interface for classes implementing the Digital Signature Algorithm + + + initialise the signer for signature generation or signature + verification. + + @param forSigning true if we are generating a signature, false + otherwise. + @param param key parameters for signature generation. + + + sign the passed in message (usually the output of a hash function). + + @param message the message to be signed. + @return two big integers representing the r and s values respectively. + + + verify the message message against the signature values r and s. + + @param message the message that was supposed to have been signed. + @param r the r signature value. + @param s the s signature value. + + + base interface for general purpose byte derivation functions. + + + return the message digest used as the basis for the function + + + Parameters for key/byte stream derivation classes + + + interface that a message digest conforms to. + + + return the algorithm name + + @return the algorithm name + + + return the size, in bytes, of the digest produced by this message digest. + + @return the size, in bytes, of the digest produced by this message digest. + + + return the size, in bytes, of the internal buffer used by this digest. + + @return the size, in bytes, of the internal buffer used by this digest. + + + update the message digest with a single byte. + + @param inByte the input byte to be entered. + + + update the message digest with a block of bytes. + + @param input the byte array containing the data. + @param inOff the offset into the byte array where the data starts. + @param len the length of the data. + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param output the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + + Base interface describing an entropy source for a DRBG. + + + + + Return whether or not this entropy source is regarded as prediction resistant. + + true if this instance is prediction resistant; otherwise, false. + + + + Return a byte array of entropy. + + The entropy bytes. + + + + Return the number of bits of entropy this source can produce. + + The size, in bits, of the return value of getEntropy. + + + + Base interface describing a provider of entropy sources. + + + + + Return an entropy source providing a block of entropy. + + The size of the block of entropy required. + An entropy source providing bitsRequired blocks of entropy. + + + The base interface for implementations of message authentication codes (MACs). + + + Initialise the MAC. + + @param param the key and other data required by the MAC. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Return the name of the algorithm the MAC implements. + + @return the name of the algorithm the MAC implements. + + + Return the block size for this MAC (in bytes). + + @return the block size for this MAC in bytes. + + + add a single byte to the mac for processing. + + @param in the byte to be processed. + @exception InvalidOperationException if the MAC is not initialised. + + + @param in the array containing the input. + @param inOff the index in the array the data begins at. + @param len the length of the input starting at inOff. + @exception InvalidOperationException if the MAC is not initialised. + @exception DataLengthException if there isn't enough data in in. + + + Compute the final stage of the MAC writing the output to the out + parameter. +

    + doFinal leaves the MAC in the same state it was after the last init. +

    + @param out the array the MAC is to be output to. + @param outOff the offset into the out buffer the output is to start at. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the MAC is not initialised. +
    + + Reset the MAC. At the end of resetting the MAC should be in the + in the same state it was after the last init (if there was one). + + + + Base interface for operators that serve as stream-based signature calculators. + + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + + Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + to a single value. + + + + Return a "sink" stream which only exists to update the implementing object. + A stream to write to in order to update the implementing object. + + + + Return the result of processing the stream. This value is only available once the stream + has been closed. + + The result of processing the stream. + + + Return the name of the algorithm the signer implements. + + @return the name of the algorithm the signer implements. + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + reset the internal state + + + Signer with message recovery. + + + Returns true if the signer has recovered the full message as + part of signature verification. + + @return true if full message recovered. + + + Returns a reference to what message was recovered (if any). + + @return full/partial message, null if nothing. + + + Perform an update with the recovered message before adding any other data. This must + be the first update method called, and calling it will result in the signer assuming + that further calls to update will include message content past what is recoverable. + + @param signature the signature that we are in the process of verifying. + @throws IllegalStateException + + + The interface stream ciphers conform to. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + If the parameters argument is inappropriate. + + + + encrypt/decrypt a single byte returning the result. + the byte to be processed. + the result of processing the input byte. + + + + Process a block of bytes from input putting the result into output. + + The input byte array. + + The offset into input where the data to be processed starts. + + The number of bytes to be processed. + The output buffer the processed bytes go into. + + The offset into output the processed data starts at. + + If the output buffer is too small. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to the validation of a signature produce this type. + + + + + Return true if the passed in data matches what is expected by the verification result. + + The bytes representing the signature. + true if the signature verifies, false otherwise. + + + + Return true if the length bytes from off in the source array match the signature + expected by the verification result. + + Byte array containing the signature. + The offset into the source array where the signature starts. + The number of bytes in source making up the signature. + true if the signature verifies, false otherwise. + + + + Base interface for operators that serve as stream-based signature verifiers. + + + + The algorithm details object for this verifier. + + + + Create a stream calculator for this verifier. The stream + calculator is used for the actual operation of entering the data to be verified + and producing a result which can be used to verify the original signature. + + A calculator producing an IVerifier which can verify the signature. + + + + Base interface for a provider to support the dynamic creation of signature verifiers. + + + + + Return a signature verfier for signature algorithm described in the passed in algorithm details object. + + The details of the signature algorithm verification is required for. + A new signature verifier. + + + The name of the algorithm this cipher implements. + + + + With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + This interface provides the extra method required to support variable output on a digest implementation. + + + + Output the results of the final calculation for this digest to outLen number of bytes. + + @param out output array to write the output bytes to. + @param outOff offset to start writing the bytes at. + @param outLen the number of output bytes requested. + @return the number of bytes written + + + this exception is thrown whenever we find something we don't expect in a + message. + + + base constructor. + + + create a InvalidCipherTextException with the given message. + + @param message the message to be carried with the exception. + + + The base class for parameters to key generators. + + + initialise the generator with a source of randomness + and a strength (in bits). + + @param random the random byte source. + @param strength the size, in bits, of the keys we want to produce. + + + return the random source associated with this + generator. + + @return the generators random source. + + + return the bit strength for keys produced by this generator, + + @return the strength of the keys this generator produces (in bits). + + + + This exception is thrown whenever a cipher requires a change of key, iv + or similar after x amount of bytes enciphered + + + + super class for all Password Based Encyrption (Pbe) parameter generator classes. + + + base constructor. + + + initialise the Pbe generator. + + @param password the password converted into bytes (see below). + @param salt the salt to be mixed with the password. + @param iterationCount the number of iterations the "mixing" function + is to be applied for. + + + return the password byte array. + + @return the password byte array. + + + return the salt byte array. + + @return the salt byte array. + + + return the iteration count. + + @return the iteration count. + + + Generate derived parameters for a key of length keySize. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + Generate derived parameters for a key of length keySize, and + an initialisation vector (IV) of length ivSize. + + @param keySize the length, in bits, of the key required. + @param ivSize the length, in bits, of the iv required. + @return a parameters object representing a key and an IV. + + + Generate derived parameters for a key of length keySize, specifically + for use with a MAC. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + converts a password to a byte array according to the scheme in + Pkcs5 (ascii, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + PKCS5 (UTF-8, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + + @param password a character array representing the password. + @return a byte array representing the password. + + + An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + + + Create a entropy source provider based on the passed in SecureRandom. + + @param secureRandom the SecureRandom to base EntropySource construction on. + @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + + + Return an entropy source that will create bitsRequired bits of entropy on + each invocation of getEntropy(). + + @param bitsRequired size (in bits) of entropy to be created by the provided source. + @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + + + A SP800-90A CTR DRBG. + + + Construct a SP800-90A CTR DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param engine underlying block cipher to use to support DRBG + @param keySizeInBits size of the key to use with the block cipher. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Pad out a key for TDEA, setting odd parity for each byte. + + @param keyMaster + @param keyOff + @param tmp + @param tmpOff + + + Used by both Dual EC and Hash. + + + A SP800-90A Hash DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param digest source digest to use for DRB stream. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + A SP800-90A HMAC DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param hMac Hash MAC to base the DRBG on. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Interface to SP800-90A deterministic random bit generators. + + + Return the block size of the DRBG. + + @return the block size (in bits) produced by each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Generate numBytes worth of entropy from the passed in entropy source. + + @param entropySource the entropy source to request the data from. + @param numBytes the number of bytes of entropy requested. + @return a byte array populated with the random data. + + + Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Set the personalization string for DRBG SecureRandoms created by this builder + @param personalizationString the personalisation string for the underlying DRBG. + @return the current builder. + + + Set the security strength required for DRBGs used in building SecureRandom objects. + + @param securityStrength the security strength (in bits) + @return the current builder. + + + Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + + @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + @return the current builder. + + + Build a SecureRandom based on a SP 800-90A Hash DRBG. + + @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a Hash DRBG. + + + Build a SecureRandom based on a SP 800-90A CTR DRBG. + + @param cipher the block cipher to base the DRBG on. + @param keySizeInBits key size in bits to be used with the block cipher. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a CTR DRBG. + + + Build a SecureRandom based on a SP 800-90A HMAC DRBG. + + @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a HMAC DRBG. + + + + @param engine + @param entropySource + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the RNG. + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + generator will be reseeded on each request. + + @param engine a block cipher to use as the operator. + @param key the block cipher key to initialise engine with. + @param predictionResistant true if engine to be reseeded on each use, false otherwise. + @return a SecureRandom. + + + + Uses Microsoft's RNGCryptoServiceProvider + + + + Random generation based on the digest with counter. Calling AddSeedMaterial will + always increase the entropy of the hash. +

    + Internal access to the digest is synchronized so a single one of these can be shared. +

    +
    + + Generic interface for objects generating random bytes. + + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + + Takes bytes generated by an underling RandomGenerator and reverses the order in + each small window (of configurable size). +

    + Access to internals is synchronized so a single one of these can be shared. +

    +
    +
    + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + A thread based seed generator - one source of randomness. +

    + Based on an idea from Marcus Lippert. +

    +
    + + Generate seed bytes. Set fast to false for best quality. +

    + If fast is set to true, the code should be round about 8 times faster when + generating a long sequence of random bytes. 20 bytes of random values using + the fast mode take less than half a second on a Nokia e70. If fast is set to false, + it takes round about 2500 ms. +

    + @param numBytes the number of bytes to generate + @param fast true if fast mode should be used +
    + + + Permutation generated by code: + + // First 1850 fractional digit of Pi number. + byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + s = 0; + P = new byte[256]; + for (int i = 0; i < 256; i++) + { + P[i] = (byte) i; + } + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + key[m % key.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + + + Value generated in the same way as P. + + + a wrapper for block ciphers with a single byte block size, so that they + can be treated like stream ciphers. + + + basic constructor. + + @param cipher the block cipher to be wrapped. + @exception ArgumentException if the cipher has a block size other than + one. + + + initialise the underlying cipher. + + @param forEncryption true if we are setting up for encryption, false otherwise. + @param param the necessary parameters for the underlying cipher to be initialised. + + + return the name of the algorithm we are wrapping. + + @return the name of the algorithm we are wrapping. + + + encrypt/decrypt a single byte returning the result. + + @param in the byte to be processed. + @return the result of processing the input byte. + + + process a block of bytes from in putting the result into out. + + @param in the input byte array. + @param inOff the offset into the in array where the data to be processed starts. + @param len the number of bytes to be processed. + @param out the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data stars at. + @exception DataLengthException if the output buffer is too small. + + + reset the underlying cipher. This leaves it in the same state + it was at after the last init (if there was one). + + + a Diffie-Hellman key exchange engine. +

    + note: This uses MTI/A0 key agreement in order to make the key agreement + secure against passive attacks. If you're doing Diffie-Hellman and both + parties have long term public keys you should look at using this. For + further information have a look at RFC 2631.

    +

    + It's possible to extend this to more than two parties as well, for the moment + that is left as an exercise for the reader.

    +
    + + calculate our initial message. + + + given a message from a given party and the corresponding public key + calculate the next message in the agreement sequence. In this case + this will represent the shared secret. + + + a Diffie-Hellman key agreement class. +

    + note: This is only the basic algorithm, it doesn't take advantage of + long term public keys if they are available. See the DHAgreement class + for a "better" implementation.

    +
    + + given a short term public key from a given party calculate the next + message in the agreement sequence. + + + Standard Diffie-Hellman groups from various IETF specifications. + + + P1363 7.2.1 ECSVDP-DH + + ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + and [Kob87]. This primitive derives a shared secret value from one + party's private key and another party's public key, where both have + the same set of EC domain parameters. If two parties correctly + execute this primitive, they will produce the same output. This + primitive can be invoked by a scheme to derive a shared secret key; + specifically, it may be used with the schemes ECKAS-DH1 and + DL/ECKAS-DH2. It assumes that the input keys are valid (see also + Section 7.2.2). + + + P1363 7.2.2 ECSVDP-DHC + + ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version with cofactor multiplication. It is based on + the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + primitive derives a shared secret value from one party's private key + and another party's public key, where both have the same set of EC + domain parameters. If two parties correctly execute this primitive, + they will produce the same output. This primitive can be invoked by a + scheme to derive a shared secret key; specifically, it may be used + with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + validity of the input public key (see also Section 7.2.1). +

    + Note: As stated P1363 compatibility mode with ECDH can be preset, and + in this case the implementation doesn't have a ECDH compatibility mode + (if you want that just use ECDHBasicAgreement and note they both implement + BasicAgreement!).

    +
    + + + A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + + The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + + "Password Authenticated Key Exchange by Juggling, 2008." + + The J-PAKE protocol is symmetric. + There is no notion of a client or server, but rather just two participants. + An instance of JPakeParticipant represents one participant, and + is the primary interface for executing the exchange. + + To execute an exchange, construct a JPakeParticipant on each end, + and call the following 7 methods + (once and only once, in the given order, for each participant, sending messages between them as described): + + CreateRound1PayloadToSend() - and send the payload to the other participant + ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + CreateRound2PayloadToSend() - and send the payload to the other participant + ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + CalculateKeyingMaterial() + CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + + Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + The caller is responsible for deriving the session key using a secure key derivation function (KDF). + + Round 3 is an optional key confirmation process. + If you do not execute round 3, then there is no assurance that both participants are using the same key. + (i.e. if the participants used different passwords, then their session keys will differ.) + + If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + + The symmetric design can easily support the asymmetric cases when one party initiates the communication. + e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + These are the trivial techniques to optimize the communication. + + The key confirmation process is implemented as specified in + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + This class is stateful and NOT threadsafe. + Each instance should only be used for ONE complete J-PAKE exchange + (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + + + + + Convenience constructor for a new JPakeParticipant that uses + the JPakePrimeOrderGroups#NIST_3072 prime order group, + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + + + + Convenience constructor for a new JPakeParticipant that uses + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + + + + Constructor for a new JPakeParticipant. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + Digest to use during zero knowledge proofs and key confirmation + (SHA-256 or stronger preferred). + Source of secure random data for x1 and x2, and for the zero knowledge proofs. + + + + Gets the current state of this participant. + See the STATE_* constants for possible values. + + + + + Creates and returns the payload to send to the other participant during round 1. + + After execution, the State state} will be STATE_ROUND_1_CREATED}. + + + + + Validates the payload received from the other participant during round 1. + + Must be called prior to CreateRound2PayloadToSend(). + + After execution, the State state will be STATE_ROUND_1_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException + if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 2. + + ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + + After execution, the State state will be STATE_ROUND_2_CREATED. + + Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Validates the payload received from the other participant during round 2. + Note that this DOES NOT detect a non-common password. + The only indication of a non-common password is through derivation + of different keys (which can be detected explicitly by executing round 3 and round 4) + + Must be called prior to CalculateKeyingMaterial(). + + After execution, the State state will be STATE_ROUND_2_VALIDATED. + + Throws CryptoException if validation fails. Throws + InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Calculates and returns the key material. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + + The keying material will be identical for each participant if and only if + each participant's password is the same. i.e. If the participants do not + share the same password, then each participant will derive a different key. + Therefore, if you immediately start using a key derived from + the keying material, then you must handle detection of incorrect keys. + If you want to handle this detection explicitly, you can optionally perform + rounds 3 and 4. See JPakeParticipant for details on how to execute + rounds 3 and 4. + + The keying material will be in the range [0, p-1]. + + ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + + As a side effect, the internal password array is cleared, since it is no longer needed. + + After execution, the State state will be STATE_KEY_CALCULATED. + + Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + or if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state} will be STATE_ROUND_3_CREATED. + Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + times. + + The keying material as returned from CalculateKeyingMaterial(). + + + + Validates the payload received from the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state will be STATE_ROUND_3_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + CalculateKeyingMaterial or multiple times + + The round 3 payload received from the other participant. + The keying material as returned from CalculateKeyingMaterial(). + + + + A pre-computed prime order group for use during a J-PAKE exchange. + + Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + that is suitable for public key cryptography, including elliptic curve cryptography. + + See JPakePrimeOrderGroups for convenient standard groups. + + NIST publishes + many groups that can be used for the desired level of security. + + + + + Constructs a new JPakePrimeOrderGroup. + + In general, you should use one of the pre-approved groups from + JPakePrimeOrderGroups, rather than manually constructing one. + + The following basic checks are performed: + + p-1 must be evenly divisible by q + g must be in [2, p-1] + g^q mod p must equal 1 + p must be prime (within reasonably certainty) + q must be prime (within reasonably certainty) + + The prime checks are performed using BigInteger#isProbablePrime(int), + and are therefore subject to the same probability guarantees. + + These checks prevent trivial mistakes. + However, due to the small uncertainties if p and q are not prime, + advanced attacks are not prevented. + Use it at your own risk. + + Throws NullReferenceException if any argument is null. Throws + InvalidOperationException is any of the above validations fail. + + + + + Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + These pre-approved groups can avoid the expensive checks. + User-specified groups should not use this constructor. + + + + + Standard pre-computed prime order groups for use by J-PAKE. + (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) +

    + This class contains some convenient constants for use as input for + constructing {@link JPAKEParticipant}s. +

    + The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + and from the prime order groups + published by NIST. +

    +
    + + + From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + + + + + From NIST. + 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + + + + + From NIST. + 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + + + + + The payload sent/received during the first round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance of this payload to + the other. The payload to send should be created via + JPAKEParticipant.CreateRound1PayloadToSend(). + + Each participant must also validate the payload received from the other. + The received payload should be validated via + JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of g^x1 + + + + + The value of g^x2 + + + + + The zero knowledge proof for x1. + + This is a two element array, containing {g^v, r} for x1. + + + + + The zero knowledge proof for x2. + + This is a two element array, containing {g^v, r} for x2. + + + + + The payload sent/received during the second round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound2PayloadToSend() + + Each JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of A, as computed during round 2. + + + + + The zero knowledge proof for x2 * s. + + This is a two element array, containing {g^v, r} for x2 * s. + + + + + The payload sent/received during the optional third round of a J-PAKE exchange, + which is for explicit key confirmation. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound3PayloadToSend(BigInteger) + + Eeach JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + + + + + The id of the {@link JPAKEParticipant} who created/sent this payload. + + + + + The value of MacTag, as computed by round 3. + + See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + + + + + Primitives needed for a J-PAKE exchange. + + The recommended way to perform a J-PAKE exchange is by using + two JPAKEParticipants. Internally, those participants + call these primitive operations in JPakeUtilities. + + The primitives, however, can be used without a JPAKEParticipant if needed. + + + + + Return a value that can be used as x1 or x3 during round 1. + The returned value is a random value in the range [0, q-1]. + + + + + Return a value that can be used as x2 or x4 during round 1. + The returned value is a random value in the range [1, q-1]. + + + + + Converts the given password to a BigInteger + for use in arithmetic calculations. + + + + + Calculate g^x mod p as done in round 1. + + + + + Calculate ga as done in round 2. + + + + + Calculate x2 * s as done in round 2. + + + + + Calculate A as done in round 2. + + + + + Calculate a zero knowledge proof of x using Schnorr's signature. + The returned array has two elements {g^v, r = v-x*h} for x. + + + + + Validates that g^x4 is not 1. + throws CryptoException if g^x4 is 1 + + + + + Validates that ga is not 1. + + As described by Feng Hao... + Alice could simply check ga != 1 to ensure it is a generator. + In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + + throws CryptoException if ga is 1 + + + + + Validates the zero knowledge proof (generated by + calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + is correct. + + throws CryptoException if the zero knowledge proof is not correct + + + + + Calculates the keying material, which can be done after round 2 has completed. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + + KeyingMaterial = (B/g^{x2*x4*s})^x2 + + + + + Validates that the given participant ids are not equal. + (For the J-PAKE exchange, each participant must use a unique id.) + + Throws CryptoException if the participantId strings are equal. + + + + + Validates that the given participant ids are equal. + This is used to ensure that the payloads received from + each round all come from the same participant. + + + + + Validates that the given object is not null. + throws NullReferenceException if the object is null. + + object in question + name of the object (to be used in exception message) + + + + Calculates the MacTag (to be used for key confirmation), as defined by + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + MacTag = HMAC(MacKey, MacLen, MacData) + MacKey = H(K || "JPAKE_KC") + MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + + Note that both participants use "KC_1_U" because the sender of the round 3 message + is always the initiator for key confirmation. + + HMAC = {@link HMac} used with the given {@link Digest} + H = The given {@link Digest} + MacLen = length of MacTag + + + + + Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + + MacKey = H(K || "JPAKE_KC") + + + + + Validates the MacTag received from the partner participant. + + throws CryptoException if the participantId strings are equal. + + + + RFC 2631 Diffie-hellman KEK derivation function. + + + X9.63 based key derivation function for ECDH CMS. + + + Implements the client side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe. + This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper + "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002" + + + Initialises the client to begin new authentication attempt + @param N The safe prime associated with the client's verifier + @param g The group parameter associated with the client's verifier + @param digest The digest algorithm associated with the client's verifier + @param random For key generation + + + Generates client's credentials given the client's salt, identity and password + @param salt The salt used in the client's verifier. + @param identity The user's identity (eg. username) + @param password The user's password + @return Client's public value to send to server + + + Generates client's verification message given the server's credentials + @param serverB The server's credentials + @return Client's verification message for the server + @throws CryptoException If server's credentials are invalid + + + Computes the client evidence message M1 using the previously received values. + To be called after calculating the secret S. + @return M1: the client side generated evidence message + @throws CryptoException + + + Authenticates the server evidence message M2 received and saves it only if correct. + @param M2: the server side generated evidence message + @return A boolean indicating if the server message M2 was the expected one. + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after verifying the server evidence message M2. + @return Key: the mutually authenticated symmetric session key + @throws CryptoException + + + Implements the server side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe. + This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper + "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002" + + + Initialises the server to accept a new client authentication attempt + @param N The safe prime associated with the client's verifier + @param g The group parameter associated with the client's verifier + @param v The client's verifier + @param digest The digest algorithm associated with the client's verifier + @param random For key generation + + + Generates the server's credentials that are to be sent to the client. + @return The server's public value to the client + + + Processes the client's credentials. If valid the shared secret is generated and returned. + @param clientA The client's credentials + @return A shared secret BigInteger + @throws CryptoException If client's credentials are invalid + + + Authenticates the received client evidence message M1 and saves it only if correct. + To be called after calculating the secret S. + @param M1: the client side generated evidence message + @return A boolean indicating if the client message M1 was the expected one. + @throws CryptoException + + + Computes the server evidence message M2 using the previously verified values. + To be called after successfully verifying the client evidence message M1. + @return M2: the server side generated evidence message + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after calculating the server evidence message M2. + @return Key: the mutual authenticated symmetric session key + @throws CryptoException + + + Computes the client evidence message (M1) according to the standard routine: + M1 = H( A | B | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param B The public server value + @param S The secret calculated by both sides + @return M1 The calculated client evidence message + + + Computes the server evidence message (M2) according to the standard routine: + M2 = H( A | M1 | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param M1 The client evidence message + @param S The secret calculated by both sides + @return M2 The calculated server evidence message + + + Computes the final Key according to the standard routine: Key = H(S) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param S The secret calculated by both sides + @return + + + Generates new SRP verifier for user + + + Initialises generator to create new verifiers + @param N The safe prime to use (see DHParametersGenerator) + @param g The group parameter to use (see DHParametersGenerator) + @param digest The digest to use. The same digest type will need to be used later for the actual authentication + attempt. Also note that the final session key size is dependent on the chosen digest. + + + Creates a new SRP verifier + @param salt The salt to use, generally should be large and random + @param identity The user's identifying information (eg. username) + @param password The user's password + @return A new verifier for use in future SRP authentication + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + ISO 9796-1 padding. Note in the light of recent results you should + only use this with RSA (rather than the "simpler" Rabin keys) and you + should never use it with anything other than a hash (ie. even if the + message is small don't sign the message, sign it's hash) or some "random" + value. See your favorite search engine for details. + + + return the input block size. The largest message we can process + is (key_size_in_bits + 3)/16, which in our world comes to + key_size_in_bytes / 2. + + + return the maximum possible size for the output. + + + set the number of bits in the next message to be treated as + pad bits. + + + retrieve the number of pad bits in the last decoded message. + + + @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + + + Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + + + @exception InvalidCipherTextException if the decrypted block turns out to + be badly formatted. + + + int to octet string. + + + mask generator function, as described in PKCS1v2. + + + this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + depends on your application - see Pkcs1 Version 2 for details. + + + some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + work with one of these set the system property Org.BouncyCastle.Pkcs1.Strict to false. + + + The same effect can be achieved by setting the static property directly +

    + The static property is checked during construction of the encoding object, it is set to + true by default. +

    +
    + + Basic constructor. + @param cipher + + + Constructor for decryption with a fixed plaintext length. + + @param cipher The cipher to use for cryptographic operation. + @param pLen Length of the expected plaintext. + + + Constructor for decryption with a fixed plaintext length and a fallback + value that is returned, if the padding is incorrect. + + @param cipher + The cipher to use for cryptographic operation. + @param fallback + The fallback value, we don't to a arraycopy here. + + + Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + for encryption. + + @param encoded The Plaintext. + @param pLen Expected length of the plaintext. + @return Either 0, if the encoding is correct, or -1, if it is incorrect. + + + Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + + @param in The encrypted block. + @param inOff Offset in the encrypted block. + @param inLen Length of the encrypted block. + @param pLen Length of the desired output. + @return The plaintext without padding, or a random value if the padding was incorrect. + + @throws InvalidCipherTextException + + + @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + + + Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on ISO 18033/P1363a. +
    + + Construct a KDF Parameters generator. + + @param counterStart value of counter. + @param digest the digest to be used as the source of derived keys. + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws ArgumentException if the size of the request will cause an overflow. + @throws DataLengthException if the out buffer is too small. + + + a basic Diffie-Hellman key pair generator. + + This generates keys consistent for use with the basic algorithm for + Diffie-Hellman. + + + a Diffie-Hellman key pair generator. + + This generates keys consistent for use in the MTI/A0 key agreement protocol + as described in "Handbook of Applied Cryptography", Pages 516-519. + + + which Generates the p and g values from the given parameters, + returning the DHParameters object. +

    + Note: can take a while...

    +
    + + initialise the key generator - if strength is set to zero + the key Generated will be 192 bits in size, otherwise + strength can be 128 or 192 (or 112 or 168 if you don't count + parity bits), depending on whether you wish to do 2-key or 3-key + triple DES. + + @param param the parameters to be used for key generation + + + initialise the key generator - if strength is set to zero + the key generated will be 64 bits in size, otherwise + strength can be 64 or 56 bits (if you don't count the parity bits). + + @param param the parameters to be used for key generation + + + a DSA key pair generator. + + This Generates DSA keys in line with the method described + in FIPS 186-3 B.1 FFC Key Pair Generation. + + + Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + + + Initialise the generator + This form can only be used for older DSA (pre-DSA2) parameters + the size of keys in bits (from 512 up to 1024, and a multiple of 64) + measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + the source of randomness to use + + + Initialise the generator for DSA 2 + You must use this Init method if you need to generate parameters for DSA 2 keys + An instance of DsaParameterGenerationParameters used to configure this generator + + + Generates a set of DsaParameters + Can take a while... + + + generate suitable parameters for DSA, in line with + FIPS 186-3 A.1 Generation of the FFC Primes p and q. + + + Given the domain parameters this routine generates an EC key + pair in accordance with X9.62 section 5.2.1 pages 26, 27. + + + a ElGamal key pair generator. +

    + This Generates keys consistent for use with ElGamal as described in + page 164 of "Handbook of Applied Cryptography".

    +
    + + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

    + * Note: can take a while... + *

    +
    + + a GOST3410 key pair generator. + This generates GOST3410 keys in line with the method described + in GOST R 34.10-94. + + + generate suitable parameters for GOST3410. + + + initialise the key generator. + + @param size size of the key + @param typeProcedure type procedure A,B = 1; A',B' - else + @param random random byte source. + + + Procedure C + procedure generates the a value from the given p,q, + returning the a value. + + + which generates the p , q and a values from the given parameters, + returning the Gost3410Parameters object. + + + KFD2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF1 byte generator. + + @param digest the digest to be used as the source of derived keys. + + + KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF2 bytes generator. Generates key material + according to IEEE P1363 or ISO 18033 depending on the initialisation. + + @param digest the digest to be used as the source of derived keys. + + + Generator for MGF1 as defined in Pkcs 1v2 + + + @param digest the digest to be used as the source of Generated bytes + + + return the underlying digest. + + + int to octet string. + + + fill len bytes of the output buffer with bytes Generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Generates a permuted ArrayList from the original one. The original List + is not modified + + @param arr + the ArrayList to be permuted + @param rand + the source of Randomness for permutation + @return a new IList with the permuted elements. + + + Finds the first 'count' primes starting with 3 + + @param count + the number of primes to find + @return a vector containing the found primes as Integer + + + Generator for PBE derived keys and ivs as usd by OpenSSL. +

    + The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + iteration count of 1. +

    +
    + + Construct a OpenSSL Parameters generator. + + + Initialise - note the iteration count for this algorithm is fixed at 1. + + @param password password to use. + @param salt salt to use. + + + the derived key function, the ith hash of the password and the salt. + + + Generate a key parameter derived from the password, salt, and iteration + count we are currently initialised with. + + @param keySize the size of the key we want (in bits) + @return a KeyParameter object. + @exception ArgumentException if the key length larger than the base hash size. + + + Generate a key with initialisation vector parameter derived from + the password, salt, and iteration count we are currently initialised + with. + + @param keySize the size of the key we want (in bits) + @param ivSize the size of the iv we want (in bits) + @return a ParametersWithIV object. + @exception ArgumentException if keySize + ivSize is larger than the base hash size. + + + Generate a key parameter for use with a MAC derived from the password, + salt, and iteration count we are currently initialised with. + + @param keySize the size of the key we want (in bits) + @return a KeyParameter object. + @exception ArgumentException if the key length larger than the base hash size. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. +

    + The document this implementation is based on can be found at + + RSA's Pkcs12 Page +

    +
    + + Construct a Pkcs 12 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + @exception ArgumentException if an unknown digest is passed in. + + + add a + b + 1, returning the result in a. The a value is treated + as a BigInteger of length (b.Length * 8) bits. The result is + modulo 2^b.Length in case of overflow. + + + generation of a derived key ala Pkcs12 V1.0. + + + Generate a key parameter derived from the password, salt, and iteration + count we are currently initialised with. + + @param keySize the size of the key we want (in bits) + @return a KeyParameter object. + + + Generate a key with initialisation vector parameter derived from + the password, salt, and iteration count we are currently initialised + with. + + @param keySize the size of the key we want (in bits) + @param ivSize the size of the iv we want (in bits) + @return a ParametersWithIV object. + + + Generate a key parameter for use with a MAC derived from the password, + salt, and iteration count we are currently initialised with. + + @param keySize the size of the key we want (in bits) + @return a KeyParameter object. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 1. + Note this generator is limited to the size of the hash produced by the + digest used to drive it. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page +

    +
    + + Construct a Pkcs 5 Scheme 1 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + + + the derived key function, the ith hash of the mPassword and the mSalt. + + + Generate a key parameter derived from the mPassword, mSalt, and iteration + count we are currently initialised with. + + @param keySize the size of the key we want (in bits) + @return a KeyParameter object. + @exception ArgumentException if the key length larger than the base hash size. + + + Generate a key with initialisation vector parameter derived from + the mPassword, mSalt, and iteration count we are currently initialised + with. + + @param keySize the size of the key we want (in bits) + @param ivSize the size of the iv we want (in bits) + @return a ParametersWithIV object. + @exception ArgumentException if keySize + ivSize is larger than the base hash size. + + + Generate a key parameter for use with a MAC derived from the mPassword, + mSalt, and iteration count we are currently initialised with. + + @param keySize the size of the key we want (in bits) + @return a KeyParameter object. + @exception ArgumentException if the key length larger than the base hash size. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + This generator uses a SHA-1 HMac as the calculation function. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page

    +
    + + construct a Pkcs5 Scheme 2 Parameters generator. + + + Generate a key parameter derived from the password, salt, and iteration + count we are currently initialised with. + + @param keySize the size of the key we want (in bits) + @return a KeyParameter object. + + + Generate a key with initialisation vector parameter derived from + the password, salt, and iteration count we are currently initialised + with. + + @param keySize the size of the key we want (in bits) + @param ivSize the size of the iv we want (in bits) + @return a ParametersWithIV object. + + + Generate a key parameter for use with a MAC derived from the password, + salt, and iteration count we are currently initialised with. + + @param keySize the size of the key we want (in bits) + @return a KeyParameter object. + + + + Generates keys for the Poly1305 MAC. + + + Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
    + The {@code r} value has a specific format with some bits required to be cleared, resulting in an + effective 106 bit key.
    + A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + {@link #clamp(byte[])} method to clear the required bits. +
    + +
    + + + Initialises the key generator. + + + Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + + + + + Generates a 256 bit key in the format required for Poly1305 - e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + + + + Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + clearing required bits in the r (second 16 bytes) portion of the key.
    + Specifically: +
      +
    • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
    • +
    • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
    • +
    +
    + a 32 byte key value k[0] ... k[15], r[0] ... r[15] +
    + + + Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + Key. + if the key is of the wrong length, or has invalid bits set + in the r portion of the key. + + + Generate a random factor suitable for use with RSA blind signatures + as outlined in Chaum's blinding and unblinding as outlined in + "Handbook of Applied Cryptography", page 475. + + + Initialise the factor generator + + @param param the necessary RSA key parameters. + + + Generate a suitable blind factor for the public key the generator was initialised with. + + @return a random blind factor + + + an RSA key pair generator. + + + Choose a random prime value for use with RSA + the bit-length of the returned prime + the RSA public exponent + a prime p, with (p-1) relatively prime to e + + + CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html +

    + CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC +

    + CMAC is a NIST recomendation - see + csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf +

    + CMAC/OMAC1 is a blockcipher-based message authentication code designed and + analyzed by Tetsu Iwata and Kaoru Kurosawa. +

    + CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + Authentication Code). OMAC stands for One-Key CBC MAC. +

    + It supports 128- or 64-bits block ciphers, with any key size, and returns + a MAC with dimension less or equal to the block size of the underlying + cipher. +

    +
    + + create a standard MAC based on a CBC block cipher (64 or 128 bit block). + This will produce an authentication code the length of the block size + of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. +

    + Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + or 16 bits if being used as a data authenticator (FIPS Publication 113), + and in general should be less than the size of the block cipher as it reduces + the chance of an exhaustive attack (see Handbook of Applied Cryptography). + + @param cipher the cipher to be used as the basis of the MAC generation. + @param macSizeInBits the size of the MAC in bits, must be a multiple of 8 and @lt;= 128. + + + Reset the mac generator. + + + standard CBC Block Cipher MAC - if no padding is specified the default of + pad of zeroes is used. + + + create a standard MAC based on a CBC block cipher. This will produce an + authentication code half the length of the block size of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a CBC block cipher. This will produce an + authentication code half the length of the block size of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + @param padding the padding to be used to complete the last block. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. This class uses CBC mode as the basis for the + MAC generation. +

    + Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + or 16 bits if being used as a data authenticator (FIPS Publication 113), + and in general should be less than the size of the block cipher as it reduces + the chance of an exhaustive attack (see Handbook of Applied Cryptography). +

    + @param cipher the cipher to be used as the basis of the MAC generation. + @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. +
    + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. This class uses CBC mode as the basis for the + MAC generation. +

    + Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + or 16 bits if being used as a data authenticator (FIPS Publication 113), + and in general should be less than the size of the block cipher as it reduces + the chance of an exhaustive attack (see Handbook of Applied Cryptography). +

    + @param cipher the cipher to be used as the basis of the MAC generation. + @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + @param padding the padding to be used to complete the last block. +
    + + Reset the mac generator. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + @param blockSize the block size in bits (note: a multiple of 8) + + + Initialise the cipher and, possibly, the initialisation vector (IV). + If an IV isn't passed as part of the parameter, the IV will be all zeros. + An IV which is too short is handled in FIPS compliant fashion. + + @param param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param in the array containing the input data. + @param inOff offset into the in array the data starts at. + @param out the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + create a standard MAC based on a CFB block cipher. This will produce an + authentication code half the length of the block size of the cipher, with + the CFB mode set to 8 bits. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a CFB block cipher. This will produce an + authentication code half the length of the block size of the cipher, with + the CFB mode set to 8 bits. + + @param cipher the cipher to be used as the basis of the MAC generation. + @param padding the padding to be used. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. This class uses CFB mode as the basis for the + MAC generation. +

    + Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + or 16 bits if being used as a data authenticator (FIPS Publication 113), + and in general should be less than the size of the block cipher as it reduces + the chance of an exhaustive attack (see Handbook of Applied Cryptography). +

    + @param cipher the cipher to be used as the basis of the MAC generation. + @param cfbBitSize the size of an output block produced by the CFB mode. + @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. +
    + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. This class uses CFB mode as the basis for the + MAC generation. +

    + Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + or 16 bits if being used as a data authenticator (FIPS Publication 113), + and in general should be less than the size of the block cipher as it reduces + the chance of an exhaustive attack (see Handbook of Applied Cryptography). +

    + @param cipher the cipher to be used as the basis of the MAC generation. + @param cfbBitSize the size of an output block produced by the CFB mode. + @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + @param padding a padding to be used. +
    + + Reset the mac generator. + + + + The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + 800-38D. + + + GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + is processed as additional authenticated data with the underlying GCM block cipher). + + + + + Creates a GMAC based on the operation of a block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + + + + Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + Initialises the GMAC - requires a + providing a and a nonce. + + + + implementation of GOST 28147-89 MAC + + + HMAC implementation based on RFC2104 + + H(K XOR opad, H(K XOR ipad, text)) + + + Reset the mac generator. + + + DES based CBC Block Cipher MAC according to ISO9797, algorithm 3 (ANSI X9.19 Retail MAC) + + This could as well be derived from CBCBlockCipherMac, but then the property mac in the base + class must be changed to protected + + + create a Retail-MAC based on a CBC block cipher. This will produce an + authentication code of the length of the block size of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. This must + be DESEngine. + + + create a Retail-MAC based on a CBC block cipher. This will produce an + authentication code of the length of the block size of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + @param padding the padding to be used to complete the last block. + + + create a Retail-MAC based on a block cipher with the size of the + MAC been given in bits. This class uses single DES CBC mode as the basis for the + MAC generation. +

    + Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + or 16 bits if being used as a data authenticator (FIPS Publication 113), + and in general should be less than the size of the block cipher as it reduces + the chance of an exhaustive attack (see Handbook of Applied Cryptography). +

    + @param cipher the cipher to be used as the basis of the MAC generation. + @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. +
    + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. This class uses single DES CBC mode as the basis for the + MAC generation. The final block is decrypted and then encrypted using the + middle and right part of the key. +

    + Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + or 16 bits if being used as a data authenticator (FIPS Publication 113), + and in general should be less than the size of the block cipher as it reduces + the chance of an exhaustive attack (see Handbook of Applied Cryptography). +

    + @param cipher the cipher to be used as the basis of the MAC generation. + @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + @param padding the padding to be used to complete the last block. +
    + + Reset the mac generator. + + + + Poly1305 message authentication code, designed by D. J. Bernstein. + + + Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + effective key bits) used in the authenticator. + + The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + by Andrew M (@floodyberry). + + + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Current block of buffered input + + + Current offset in input buffer + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + + + Constructs a Poly1305 MAC, using a 128 bit block cipher. + + + + Initialises the Poly1305 MAC. + + a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + + + + Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + + + "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + compression rounds and the number of finalization rounds. A compression round is identical to a + finalization round and this round function is called SipRound. Given a 128-bit key k and a + (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + + + + SipHash-2-4 + + + SipHash-c-d + the number of compression rounds + the number of finalization rounds + + + + Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein MAC with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/MAC size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of chaining. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Initialise the cipher and, possibly, the initialisation vector (IV). + If an IV isn't passed as part of the parameter, the IV will be all zeros. + + @param forEncryption if true the cipher is initialised for + encryption, if false for decryption. + @param param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CBC". + + + return the block size of the underlying cipher. + + @return the block size of the underlying cipher. + + + Process one block of input from the array in and write it to + the out array. + + @param in the array containing the input data. + @param inOff offset into the in array the data starts at. + @param out the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Do the appropriate chaining step for CBC mode encryption. + + @param in the array containing the data to be encrypted. + @param inOff offset into the in array the data starts at. + @param out the array the encrypted data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + Do the appropriate chaining step for CBC mode decryption. + + @param in the array containing the data to be decrypted. + @param inOff offset into the in array the data starts at. + @param out the array the decrypted data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + NIST Special Publication 800-38C. +

    + Note: this mode is a packet mode - it needs all the data up front. +

    +
    + + Basic constructor. + + @param cipher the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Returns a byte array containing the mac calculated as part of the + last encrypt or decrypt operation. + + @return the last mac calculated. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @return a byte array containing the processed input.. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @param output output array. + @param outOff offset into output array to start putting processed bytes. + @return the number of bytes added to output. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + @throws DataLengthException if output buffer too short. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + @param blockSize the block size in bits (note: a multiple of 8) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Initialise the cipher and, possibly, the initialisation vector (IV). + If an IV isn't passed as part of the parameter, the IV will be all zeros. + An IV which is too short is handled in FIPS compliant fashion. + + @param forEncryption if true the cipher is initialised for + encryption, if false for decryption. + @param param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param in the array containing the input data. + @param inOff offset into the in array the data starts at. + @param out the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + Do the appropriate processing for CFB mode encryption. + + @param in the array containing the data to be encrypted. + @param inOff offset into the in array the data starts at. + @param out the array the encrypted data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + Do the appropriate processing for CFB mode decryption. + + @param in the array containing the data to be decrypted. + @param inOff offset into the in array the data starts at. + @param out the array the encrypted data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + A Cipher Text Stealing (CTS) mode cipher. CTS allows block ciphers to + be used to produce cipher text which is the same outLength as the plain text. + + + Create a buffered block cipher that uses Cipher Text Stealing + + @param cipher the underlying block cipher this buffering object wraps. + + + return the size of the output buffer required for an update of 'length' bytes. + + @param length the outLength of the input. + @return the space required to accommodate a call to update + with length bytes of input. + + + return the size of the output buffer required for an update plus a + doFinal with an input of length bytes. + + @param length the outLength of the input. + @return the space required to accommodate a call to update and doFinal + with length bytes of input. + + + process a single byte, producing an output block if necessary. + + @param in the input byte. + @param out the space for any output that might be produced. + @param outOff the offset from which the output will be copied. + @return the number of output bytes copied to out. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the cipher isn't initialised. + + + process an array of bytes, producing output if necessary. + + @param in the input byte array. + @param inOff the offset at which the input data starts. + @param length the number of bytes to be copied out of the input array. + @param out the space for any output that might be produced. + @param outOff the offset from which the output will be copied. + @return the number of output bytes copied to out. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the cipher isn't initialised. + + + Process the last block in the buffer. + + @param out the array the block currently being held is copied into. + @param outOff the offset at which the copying starts. + @return the number of output bytes copied to out. + @exception DataLengthException if there is insufficient space in out for + the output. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if cipher text decrypts wrongly (in + case the exception will never Get thrown). + + + A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + + http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + + EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + cipher to encrypt and authenticate data. It's on-line (the length of a + message isn't needed to begin processing it), has good performances, it's + simple and provably secure (provided the underlying block cipher is secure). + + Of course, this implementations is NOT thread-safe. + + + Constructor that accepts an instance of a block cipher engine. + + @param cipher the engine to use + + + + Implements the Galois/Counter mode (GCM) detailed in + NIST Special Publication 800-38D. + + + + + MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + implements the GOST 28147 OFB counter mode (GCTR). + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + counter mode (must have a 64 bit block size). + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Initialise the cipher and, possibly, the initialisation vector (IV). + If an IV isn't passed as part of the parameter, the IV will be all zeros. + An IV which is too short is handled in FIPS compliant fashion. + + @param encrypting if true the cipher is initialised for + encryption, if false for decryption. + @param parameters the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/GCTR" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param in the array containing the input data. + @param inOff offset into the in array the data starts at. + @param out the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + + A block cipher mode that includes authenticated encryption with a streaming mode + and optional associated data. + + + + The name of the algorithm this cipher implements. + + + The block cipher underlying this algorithm. + + + Initialise the cipher. + Parameter can either be an AeadParameters or a ParametersWithIV object. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Add a single byte to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The byte to be processed. + + + Add a sequence of bytes to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The input byte array. + The offset into the input array where the data to be processed starts. + The number of bytes to be processed. + + + Encrypt/decrypt a single byte. + + @param input the byte to be processed. + @param outBytes the output buffer the processed byte goes into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Process a block of bytes from in putting the result into out. + + @param inBytes the input byte array. + @param inOff the offset into the in array where the data to be processed starts. + @param len the number of bytes to be processed. + @param outBytes the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Finish the operation either appending or verifying the MAC at the end of the data. + + @param outBytes space for any resulting output data. + @param outOff offset into out to start copying the data at. + @return number of bytes written into out. + @throws InvalidOperationException if the cipher is in an inappropriate state. + @throws InvalidCipherTextException if the MAC fails to match. + + + Return the value of the MAC associated with the last stream processed. + + @return MAC for plaintext data. + + + Return the size of the output buffer required for a ProcessBytes + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes + with len bytes of input. + + + Return the size of the output buffer required for a ProcessBytes plus a + DoFinal with an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes and DoFinal + with len bytes of input. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + An implementation of RFC 7253 on The OCB + Authenticated-Encryption Algorithm, licensed per: + +

    License for + Open-Source Software Implementations of OCB (Jan 9, 2013) - 'License 1'
    + Under this license, you are authorized to make, use, and distribute open-source software + implementations of OCB. This license terminates for you if you sue someone over their open-source + software implementation of OCB claiming that you have a patent covering their implementation. +

    + This is a non-binding summary of a legal document (the link above). The parameters of the license + are specified in the license document and that document is controlling.

    +
    + + implements a Output-FeedBack (OFB) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + @param blockSize the block size in bits (note: a multiple of 8) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Initialise the cipher and, possibly, the initialisation vector (IV). + If an IV isn't passed as part of the parameter, the IV will be all zeros. + An IV which is too short is handled in FIPS compliant fashion. + + @param forEncryption if true the cipher is initialised for + encryption, if false for decryption. + @param param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/OFB" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param in the array containing the input data. + @param inOff offset into the in array the data starts at. + @param out the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + * Implements OpenPGP's rather strange version of Cipher-FeedBack (CFB) mode + * on top of a simple cipher. This class assumes the IV has been prepended + * to the data stream already, and just accomodates the reset after + * (blockSize + 2) bytes have been read. + *

    + * For further info see RFC 2440. + *

    +
    + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/PGPCFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param in the array containing the input data. + @param inOff offset into the in array the data starts at. + @param out the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Initialise the cipher and, possibly, the initialisation vector (IV). + If an IV isn't passed as part of the parameter, the IV will be all zeros. + An IV which is too short is handled in FIPS compliant fashion. + + @param forEncryption if true the cipher is initialised for + encryption, if false for decryption. + @param parameters the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Encrypt one byte of data according to CFB mode. + @param data the byte to encrypt + @param blockOff offset in the current block + @returns the encrypted byte + + + Do the appropriate processing for CFB IV mode encryption. + + @param in the array containing the data to be encrypted. + @param inOff offset into the in array the data starts at. + @param out the array the encrypted data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + Do the appropriate processing for CFB IV mode decryption. + + @param in the array containing the data to be decrypted. + @param inOff offset into the in array the data starts at. + @param out the array the encrypted data will be copied into. + @param outOff the offset into the out array the output will start at. + @exception DataLengthException if there isn't enough data in in, or + space in out. + @exception InvalidOperationException if the cipher isn't initialised. + @return the number of bytes processed and produced. + + + Implements the Segmented Integer Counter (SIC) mode on top of a simple + block cipher. + + + Basic constructor. + + @param c the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + + + + Constructor which also specifies a source of randomness to be used if one is required. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + The source of randomness to be used in signature calculation. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + + Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The public key to be used in the verification operation. + + + + Provider class which supports dynamic creation of signature verifiers. + + + + + Base constructor - specify the public key to be used in verification. + + The public key to be used in creating verifiers provided by this object. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + Block cipher padders are expected to conform to this interface + + + Initialise the padder. + + @param param parameters, if any required. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + @exception InvalidCipherTextException if the padding is badly formed + or invalid. + + + A padder that adds ISO10126-2 padding to a block. + + + Initialise the padder. + + @param random a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds the padding according to the scheme referenced in + ISO 7814-4 - scheme 2 from ISO 9797-1. The first byte is 0x80, rest is 0x00 + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the padder implements. + + @return the name of the algorithm the padder implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion with padding. The PaddedBufferedBlockCipher + outputs a block only when the buffer is full and more data is being added, + or on a doFinal (unless the current block in the buffer is a pad block). + The default padding mechanism used is the one outlined in Pkcs5/Pkcs7. + + + Create a buffered block cipher with the desired padding. + + @param cipher the underlying block cipher this buffering object wraps. + @param padding the padding type. + + + Create a buffered block cipher Pkcs7 padding + + @param cipher the underlying block cipher this buffering object wraps. + + + initialise the cipher. + + @param forEncryption if true the cipher is initialised for + encryption, if false for decryption. + @param param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the minimum size of the output buffer required for an update + plus a doFinal with an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to update and doFinal + with len bytes of input. + + + return the size of the output buffer required for an update + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to update + with len bytes of input. + + + process a single byte, producing an output block if necessary. + + @param in the input byte. + @param out the space for any output that might be produced. + @param outOff the offset from which the output will be copied. + @return the number of output bytes copied to out. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the cipher isn't initialised. + + + process an array of bytes, producing output if necessary. + + @param in the input byte array. + @param inOff the offset at which the input data starts. + @param len the number of bytes to be copied out of the input array. + @param out the space for any output that might be produced. + @param outOff the offset from which the output will be copied. + @return the number of output bytes copied to out. + @exception DataLengthException if there isn't enough space in out. + @exception InvalidOperationException if the cipher isn't initialised. + + + Process the last block in the buffer. If the buffer is currently + full and padding needs to be added a call to doFinal will produce + 2 * GetBlockSize() bytes. + + @param out the array the block currently being held is copied into. + @param outOff the offset at which the copying starts. + @return the number of output bytes copied to out. + @exception DataLengthException if there is insufficient space in out for + the output or we are decrypting and the input is not block size aligned. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + + + A padder that adds Pkcs7/Pkcs5 padding to a block. + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Trailing-Bit-Compliment padding to a block. +

    + This padding pads the block out compliment of the last bit + of the plain text. +

    +
    +
    + + Return the name of the algorithm the cipher implements. + the name of the algorithm the cipher implements. + + + + Initialise the padder. + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. +

    + Note: this assumes that the last block of plain text is always + passed to it inside in. i.e. if inOff is zero, indicating the + entire block is to be overwritten with padding the value of in + should be the same as the last block of plain text. +

    +
    +
    + + return the number of pad bytes present in the block. + + + A padder that adds X9.23 padding to a block - if a SecureRandom is + passed in random padding is assumed, otherwise padding with zeros is used. + + + Initialise the padder. + + @param random a SecureRandom if one is available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Null byte padding to a block. + + + Return the name of the algorithm the cipher implements. + + + the name of the algorithm the cipher implements. + + + + Initialise the padder. + + + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + + return the number of pad bytes present in the block. + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + The minimum bitlength of the private value. + + + The bitlength of the private value. + + + Construct without a usage index, this will do a random construction of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + + + Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + @param usageIndex a valid usage index. + + + return true if the passed in key is a DES-EDE weak key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + @param length number of bytes making up the key + + + return true if the passed in key is a DES-EDE weak key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2/3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + DES has 16 weak keys. This method will check + if the given DES key material is weak or semi-weak. + Key material that is too short is regarded as weak. +

    + See "Applied + Cryptography" by Bruce Schneier for more information. +

    + @return true if the given DES key material is weak or semi-weak, + false otherwise. +
    + + DES Keys use the LSB as the odd parity bit. This can + be used to check for corrupt keys. + + @param bytes the byte array to set the parity on. + + + return the generator - g + + + return private value limit - l + + + parameters for Key derivation functions for ISO-18033 + + + parameters for using an integrated cipher in stream mode. + + + @param derivation the derivation parameter for the KDF function. + @param encoding the encoding parameter for the KDF function. + @param macKeySize the size of the MAC key (in bits). + + + @param derivation the derivation parameter for the KDF function. + @param encoding the encoding parameter for the KDF function. + @param macKeySize the size of the MAC key (in bits). + @param cipherKeySize the size of the associated Cipher key (in bits). + + + parameters for Key derivation functions for IEEE P1363a + + + Parameters for mask derivation functions. + + + Parameters for NaccacheStern public private key generation. For details on + this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Parameters for generating a NaccacheStern KeyPair. + + @param random + The source of randomness + @param strength + The desired strength of the Key in Bits + @param certainty + the probability that the generated primes are not really prime + as integer: 2^(-certainty) is then the probability + @param countSmallPrimes + How many small key factors are desired + + + * Parameters for a NaccacheStern KeyPair. + * + * @param random + * The source of randomness + * @param strength + * The desired strength of the Key in Bits + * @param certainty + * the probability that the generated primes are not really prime + * as integer: 2^(-certainty) is then the probability + * @param cntSmallPrimes + * How many small key factors are desired + * @param debug + * Ignored + + + @return Returns the certainty. + + + @return Returns the countSmallPrimes. + + + Public key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + @param privateKey + + + @return Returns the g. + + + @return Returns the lowerSigmaBound. + + + @return Returns the n. + + + Private key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Constructs a NaccacheSternPrivateKey + + @param g + the public enryption parameter g + @param n + the public modulus n = p*q + @param lowerSigmaBound + the public lower sigma bound up to which data can be encrypted + @param smallPrimes + the small primes, of which sigma is constructed in the right + order + @param phi_n + the private modulus phi(n) = (p-1)(q-1) + + + Cipher parameters with a fixed salt value associated with them. + + + + Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + + + Parameterised Skein can be used for: +
      +
    • MAC generation, by providing a key.
    • +
    • Randomised hashing, by providing a nonce.
    • +
    • A hash function for digital signatures, associating a + public key with the message digest.
    • +
    • A key derivation function, by providing a + key identifier.
    • +
    • Personalised hashing, by providing a + recommended format or + arbitrary personalisation string.
    • +
    +
    + + + +
    + + + The parameter type for a secret key, supporting MAC or KDF functions: 0 + + + + + The parameter type for the Skein configuration block: 4 + + + + + The parameter type for a personalisation string: 8 + + + + + The parameter type for a public key: 12 + + + + + The parameter type for a key identifier string: 16 + + + + + The parameter type for a nonce: 20 + + + + + The parameter type for the message: 48 + + + + + The parameter type for the output transformation: 63 + + + + + Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + + + + + Obtains the value of the key parameter, or null if not + set. + + The key. + + + + Obtains the value of the personalisation parameter, or + null if not set. + + + + + Obtains the value of the public key parameter, or + null if not set. + + + + + Obtains the value of the key identifier parameter, or + null if not set. + + + + + Obtains the value of the nonce parameter, or null if + not set. + + + + + A builder for . + + + + + Sets a parameters to apply to the Skein hash function. + + + Parameter types must be in the range 0,5..62, and cannot use the value 48 + (reserved for message body). +

    + Parameters with type < 48 are processed before + the message content, parameters with type > 48 + are processed after the message and prior to output. + + the type of the parameter, in the range 5..62. + the byte sequence of the parameter. + + +

    + Sets the parameter. + +
    + + + Sets the parameter. + + + + + Implements the recommended personalisation format for Skein defined in Section 4.11 of + the Skein 1.3 specification. + + + The format is YYYYMMDD email@address distinguisher, encoded to a byte + sequence using UTF-8 encoding. + + the date the personalised application of the Skein was defined. + the email address of the creation of the personalised application. + an arbitrary personalisation string distinguishing the application. + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Constructs a new instance with the parameters provided to this + builder. + + + + + Parameters for tweakable block ciphers. + + + + + Gets the key. + + the key to use, or null to use the current key. + + + + Gets the tweak value. + + The tweak to use, or null to use the current tweak. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + The Digital Signature Algorithm - as described in "Handbook of Applied + Cryptography", pages 452 - 453. + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message for standard DSA the message should be a + SHA-1 hash of the real message to be verified. + + + EC-DSA as described in X9.62 + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message (for standard DSA the message should be + a SHA-1 hash of the real message to be verified). + + + GOST R 34.10-2001 Signature Algorithm + + + generate a signature for the given message using the key we were + initialised with. For conventional GOST3410 the message should be a GOST3411 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a GOST3410 signature for + the passed in message (for standard GOST3410 the message should be + a GOST3411 hash of the real message to be verified). + + + EC-NR as described in IEEE 1363-2000 + + + generate a signature for the given message using the key we were + initialised with. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR it *must* be at least as long. + + @param digest the digest to be signed. + @exception DataLengthException if the digest is longer than the key allows + + + return true if the value r and s represent a signature for the + message passed in. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR, it *must* be at least as long. But just in case the signer + applied mod(n) to the longer digest, this implementation will + apply mod(n) during verification. + + @param digest the digest to be verified. + @param r the r value of the signature. + @param s the s value of the signature. + @exception DataLengthException if the digest is longer than the key allows + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + Gost R 34.10-94 Signature Algorithm + + + generate a signature for the given message using the key we were + initialised with. For conventional Gost3410 the message should be a Gost3411 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a Gost3410 signature for + the passed in message for standard Gost3410 the message should be a + Gost3411 hash of the real message to be verified. + + + initialise the signer for signing or verification. + + @param forSigning + true if for signing, false otherwise + @param parameters + necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using the key + we were initialised with. + + + return true if the internal state represents the signature described in + the passed in array. + + + A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + + + Base constructor. + + @param digest digest to build the HMAC on. + + + Interface define calculators of K values for DSA/ECDSA. + + + Return true if this calculator is deterministic, false otherwise. + + @return true if deterministic, otherwise false. + + + Non-deterministic initialiser. + + @param n the order of the DSA group. + @param random a source of randomness. + + + Deterministic initialiser. + + @param n the order of the DSA group. + @param d the DSA private value. + @param message the message being signed. + + + Return the next valid value of K. + + @return a K value. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). +

    + Note: the usual length for the salt is the length of the hash + function used in bytes.

    +
    +
    + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + + base cipher to use for signature creation/verification + digest to use. + length of salt in bytes. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + length of salt in bytes. + + + + Initialise the signer. + true if for signing, false if for verification. + parameters for signature generation/verification. If the + parameters are for generation they should be a ParametersWithRandom, + a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + are passed in a SecureRandom will be created. + + if wrong parameter type or a fixed + salt is passed in which is the wrong length. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise, or if not sure. + + + + int to octet string. + int to octet string. + + + long to octet string. + + + mask generator function, as described in Pkcs1v2. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2. + + base cipher to use for signature creation/verification + digest to use. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise. + + + + RSA-PSS as described in Pkcs# 1 v 2.1. +

    + Note: the usual value for the salt length is the number of + bytes in the hash function.

    +
    +
    + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the length of the salt to use (in bytes). + + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the fixed salt to be used. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + + return true if the internal state represents the signature described + in the passed in array. + + + + int to octet string. + + + mask generator function, as described in Pkcs1v2. + + + + Load oid table. + + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + X9.31-1998 - signing using a hash. +

    + The message digest hash, H, is encapsulated to form a byte string as follows +

    +
    +            EB = 06 || PS || 0xBA || H || TRAILER
    +            
    + where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. +
    + + Generate a signer with either implicit or explicit trailers for X9.31. + + @param cipher base cipher to use for signature creation/verification + @param digest digest to use. + @param implicit whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + @param cipher cipher to use. + @param digest digest to sign with. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + generate a signature for the loaded message using the key we were + initialised with. + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + + + + + + + + + + + + RFC 5246 7.2 + + + + This message notifies the recipient that the sender will not send any more messages on this + connection. Note that as of TLS 1.1, failure to properly close a connection no longer + requires that a session not be resumed. This is a change from TLS 1.0 ("The session becomes + unresumable if any connection is terminated without proper close_notify messages with level + equal to warning.") to conform with widespread implementation practice. + + + An inappropriate message was received. This alert is always fatal and should never be + observed in communication between proper implementations. + + + This alert is returned if a record is received with an incorrect MAC. This alert also MUST be + returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: either it + wasn't an even multiple of the block length, or its padding values, when checked, weren't + correct. This message is always fatal and should never be observed in communication between + proper implementations (except when messages were corrupted in the network). + + + This alert was used in some earlier versions of TLS, and may have permitted certain attacks + against the CBC mode [CBCATT]. It MUST NOT be sent by compliant implementations. + + + A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always + fatal and should never be observed in communication between proper implementations (except + when messages were corrupted in the network). + + + The decompression function received improper input (e.g., data that would expand to excessive + length). This message is always fatal and should never be observed in communication between + proper implementations. + + + Reception of a handshake_failure alert message indicates that the sender was unable to + negotiate an acceptable set of security parameters given the options available. This is a + fatal error. + + + This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant + implementations. + + + A certificate was corrupt, contained signatures that did not verify correctly, etc. + + + A certificate was of an unsupported type. + + + A certificate was revoked by its signer. + + + A certificate has expired or is not currently valid. + + + Some other (unspecified) issue arose in processing the certificate, rendering it + unacceptable. + + + A field in the handshake was out of range or inconsistent with other fields. This message is + always fatal. + + + A valid certificate chain or partial chain was received, but the certificate was not accepted + because the CA certificate could not be located or couldn't be matched with a known, trusted + CA. This message is always fatal. + + + A valid certificate was received, but when access control was applied, the sender decided not + to proceed with negotiation. This message is always fatal. + + + A message could not be decoded because some field was out of the specified range or the + length of the message was incorrect. This message is always fatal and should never be + observed in communication between proper implementations (except when messages were corrupted + in the network). + + + A handshake cryptographic operation failed, including being unable to correctly verify a + signature or validate a Finished message. This message is always fatal. + + + This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant + implementations. + + + The protocol version the client has attempted to negotiate is recognized but not supported. + (For example, old protocol versions might be avoided for security reasons.) This message is + always fatal. + + + Returned instead of handshake_failure when a negotiation has failed specifically because the + server requires ciphers more secure than those supported by the client. This message is + always fatal. + + + An internal error unrelated to the peer or the correctness of the protocol (such as a memory + allocation failure) makes it impossible to continue. This message is always fatal. + + + This handshake is being canceled for some reason unrelated to a protocol failure. If the user + cancels an operation after the handshake is complete, just closing the connection by sending + a close_notify is more appropriate. This alert should be followed by a close_notify. This + message is generally a warning. + + + Sent by the client in response to a hello request or by the server in response to a client + hello after initial handshaking. Either of these would normally lead to renegotiation; when + that is not appropriate, the recipient should respond with this alert. At that point, the + original requester can decide whether to proceed with the connection. One case where this + would be appropriate is where a server has spawned a process to satisfy a request; the + process might receive security parameters (key length, authentication, etc.) at startup, and + it might be difficult to communicate changes to these parameters after that point. This + message is always a warning. + + + Sent by clients that receive an extended server hello containing an extension that they did + not put in the corresponding client hello. This message is always fatal. + + + This alert is sent by servers who are unable to retrieve a certificate chain from the URL + supplied by the client (see Section 3.3). This message MAY be fatal - for example if client + authentication is required by the server for the handshake to continue and the server is + unable to retrieve the certificate chain, it may send a fatal alert. + + + This alert is sent by servers that receive a server_name extension request, but do not + recognize the server name. This message MAY be fatal. + + + This alert is sent by clients that receive an invalid certificate status response (see + Section 3.6). This message is always fatal. + + + This alert is sent by servers when a certificate hash does not match a client provided + certificate_hash. This message is always fatal. + + + If the server does not recognize the PSK identity, it MAY respond with an + "unknown_psk_identity" alert message. + + + If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + supported by the server is higher than the version indicated in ClientHello.client_version, + the server MUST respond with an inappropriate_fallback alert. + + + + RFC 5246 7.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + A queue for bytes. +

    + This file could be more optimized. +

    +
    +
    + + The smallest number which can be written as 2^x which is bigger than i. + + + The initial size for our buffer. + + + The buffer where we store our data. + + + How many bytes at the beginning of the buffer are skipped. + + + How many bytes in the buffer are valid data. + + + Read data from the buffer. + The buffer where the read data will be copied to. + How many bytes to skip at the beginning of buf. + How many bytes to read at all. + How many bytes from our data to skip. + + + Add some data to our buffer. + A byte-array to read data from. + How many bytes to skip at the beginning of the array. + How many bytes to read from the array. + + + Remove some bytes from our data from the beginning. + How many bytes to remove. + + + The number of bytes which are available in this buffer. + + + Parsing and encoding of a Certificate struct from RFC 4346. +

    +

    +             opaque ASN.1Cert<2^24-1>;
    +            
    +             struct {
    +                 ASN.1Cert certificate_list<0..2^24-1>;
    +             } Certificate;
    +             
    + + @see Org.BouncyCastle.Asn1.X509.X509CertificateStructure +
    + + The certificates. + + + @return an array of {@link org.bouncycastle.asn1.x509.Certificate} representing a certificate + chain. + + + @return true if this certificate chain contains no certificates, or + false otherwise. + + + Encode this {@link Certificate} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link Certificate} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link Certificate} object. + @throws IOException + + + Parsing and encoding of a CertificateRequest struct from RFC 4346. +

    +

    +             struct {
    +                 ClientCertificateType certificate_types<1..2^8-1>;
    +                 DistinguishedName certificate_authorities<3..2^16-1>
    +             } CertificateRequest;
    +             
    + + @see ClientCertificateType + @see X509Name +
    + + @param certificateTypes see {@link ClientCertificateType} for valid constants. + @param certificateAuthorities an {@link IList} of {@link X509Name}. + + + @return an array of certificate types + @see {@link ClientCertificateType} + + + @return an {@link IList} of {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + @return an {@link IList} of {@link X509Name} + + + Encode this {@link CertificateRequest} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateRequest} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateRequest} object. + @throws IOException + + + Encode this {@link CertificateStatus} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatus} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatus} object. + @throws IOException + + + Encode this {@link CertificateStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatusRequest} object. + @throws IOException + + + @param type + see {@link CertChainType} for valid constants. + @param urlAndHashList + a {@link IList} of {@link UrlAndHash}. + + + @return {@link CertChainType} + + + @return an {@link IList} of {@link UrlAndHash} + + + Encode this {@link CertificateUrl} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateUrl} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateUrl} object. + @throws IOException + + + + + + + + + + + + + + + + RFC 2246 A.5 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + A combined hash, which implements md5(m) || sha1(m). + + + @see org.bouncycastle.crypto.Digest#update(byte[], int, int) + + + @see org.bouncycastle.crypto.Digest#doFinal(byte[], int) + + + @see org.bouncycastle.crypto.Digest#reset() + + + + RFC 2246 6.1 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 6.2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Accept only the group parameters specified in RFC 5054 Appendix A. + + + Specify a custom set of acceptable group parameters. + + @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + + + Buffers input until the hash algorithm is determined. + + + @return a {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + Encode this {@link DigitallySigned} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link DigitallySigned} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link DigitallySigned} object. + @throws IOException + + + + + + + + + + + + + + + + + + + + + + + + + + + Check that there are no "extra" messages left in the current inbound flight + + + RFC 4347 4.1.2.5 Anti-replay +

    + Support fast rejection of duplicate records by maintaining a sliding receive window + + + Check whether a received record with the given sequence number should be rejected as a duplicate. + + @param seq the 48-bit DTLSPlainText.sequence_number field of a received record. + @return true if the record should be discarded without further processing. + + + Report that a received record with the given sequence number passed authentication checks. + + @param seq the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + + + When a new epoch begins, sequence numbers begin again at 0 + + +

    RFC 4492 5.4. (Errata ID: 2389) +
    + + + RFC 4492 5.4 + + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a prime field. + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a characteristic-2 field. + + + Indicates that a named curve is used. This option SHOULD be used when applicable. + + + + RFC 4492 5.1.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 5705 + + + RFC 5246 7.4.1.4.1 + + + Encode this {@link HeartbeatExtension} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatExtension} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatExtension} object. + @throws IOException + + + Encode this {@link HeartbeatMessage} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatMessage} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatMessage} object. + @throws IOException + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + RFC 4492 5.1.1 + The named curves defined here are those specified in SEC 2 [13]. Note that many of + these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + client supports arbitrary prime and characteristic-2 curves, respectively (the curve + parameters must be encoded explicitly in ECParameters). + + + + Encode this {@link NewSessionTicket} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link NewSessionTicket} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link NewSessionTicket} object. + @throws IOException + + + RFC 3546 3.6 + + + @param responderIDList + an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP + responders. An empty list has the special meaning that the responders are + implicitly known to the server - e.g., by prior arrangement. + @param requestExtensions + OCSP request extensions. A null value means that there are no extensions. + + + @return an {@link IList} of {@link ResponderID} + + + @return OCSP request extensions + + + Encode this {@link OcspStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link OcspStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return an {@link OcspStatusRequest} object. + @throws IOException + + + RFC 5246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + + + An implementation of the TLS 1.0/1.1/1.2 record layer, allowing downgrade to SSLv3. + + + RFC 5246 E.1. "Earlier versions of the TLS specification were not fully clear on what the + record layer version number (TLSPlaintext.version) should contain when sending ClientHello + (i.e., before it is known which version of the protocol will be employed). Thus, TLS servers + compliant with this specification MUST accept any value {03,XX} as the record layer version + number for ClientHello." + + + @return {@link ConnectionEnd} + + + @return {@link CipherSuite} + + + @return {@link CompressionMethod} + + + @return {@link PRFAlgorithm} + + + Encode this {@link ServerDHParams} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerDHParams} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerDHParams} object. + @throws IOException + + + Encode this {@link ServerName} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerName} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerName} object. + @throws IOException + + + @param serverNameList an {@link IList} of {@link ServerName}. + + + @return an {@link IList} of {@link ServerName}. + + + Encode this {@link ServerNameList} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerNameList} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerNameList} object. + @throws IOException + + + Encode this {@link ServerSRPParams} to an {@link OutputStream}. + + @param output + the {@link OutputStream} to encode to. + @throws IOException + + + Parse a {@link ServerSRPParams} from an {@link InputStream}. + + @param input + the {@link InputStream} to parse from. + @return a {@link ServerSRPParams} object. + @throws IOException + + + RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + + + RFC 5246 7.4.1.4.1 + + + @param hash {@link HashAlgorithm} + @param signature {@link SignatureAlgorithm} + + + @return {@link HashAlgorithm} + + + @return {@link SignatureAlgorithm} + + + Encode this {@link SignatureAndHashAlgorithm} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link SignatureAndHashAlgorithm} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link SignatureAndHashAlgorithm} object. + @throws IOException + + + An implementation of {@link TlsSRPIdentityManager} that simulates the existence of "unknown" identities + to obscure the fact that there is no verifier for them. + + + Create a {@link SimulatedTlsSRPIdentityManager} that implements the algorithm from RFC 5054 2.5.1.3 + + @param group the {@link SRP6GroupParameters} defining the group that SRP is operating in + @param seedKey the secret "seed key" referred to in RFC 5054 2.5.1.3 + @return an instance of {@link SimulatedTlsSRPIdentityManager} + + + HMAC implementation based on original internet draft for HMAC (RFC 2104) + + The difference is that padding is concatentated versus XORed with the key + + H(K + opad, H(K + ipad, text)) + + + Base constructor for one of the standard digest algorithms that the byteLength of + the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + + @param digest the digest. + + + Reset the mac generator. + + + RFC 4680 + + + + + + + + + + + + + + + + + + + Called by the protocol handler to report the server certificate. + + + This method is responsible for certificate verification and validation + + The server received + + + + + Return client credentials in response to server's certificate request + + + A containing server certificate request details + + + A to be used for client authentication + (or null for no client authentication) + + + + + + A generic TLS 1.0-1.2 / SSLv3 block cipher. This can be used for AES or 3DES for example. + + + + + + + + + + + + + + + + + + + + Called at the start of a new TLS session, before any other methods. + + + A + + + + Return the session this client wants to resume, if any. + Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + + A representing the resumable session to be used for this connection, + or null to use a new session. + + + + + Return the to use for the TLSPlaintext.version field prior to + receiving the server version. NOTE: This method is not called for DTLS. + + + See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value + {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest + version number supported by the client, and the value of ClientHello.client_version. No + single value will guarantee interoperability with all old servers, but this is a complex + topic beyond the scope of this document." + + The to use. + + + + Get the list of cipher suites that this client supports. + + + An array of values, each specifying a supported cipher suite. + + + + + Get the list of compression methods that this client supports. + + + An array of values, each specifying a supported compression method. + + + + + Get the (optional) table of client extensions to be included in (extended) client hello. + + + A (Int32 -> byte[]). May be null. + + + + + + + + + Notifies the client of the session_id sent in the ServerHello. + + An array of + + + + Report the cipher suite that was selected by the server. + + + The protocol handler validates this value against the offered cipher suites + + + + A + + + + + Report the compression method that was selected by the server. + + + The protocol handler validates this value against the offered compression methods + + + + A + + + + + Report the extensions from an extended server hello. + + + Will only be called if we returned a non-null result from . + + + A (Int32 -> byte[]) + + + + A list of + + + + + Return an implementation of to negotiate the key exchange + part of the protocol. + + + A + + + + + + Return an implementation of to handle authentication + part of the protocol. + + + + + A list of + + + + RFC 5077 3.3. NewSessionTicket Handshake Message + + This method will be called (only) when a NewSessionTicket handshake message is received. The + ticket is opaque to the client and clients MUST NOT examine the ticket under the assumption + that it complies with e.g. RFC 5077 4. Recommended Ticket Construction. + + The ticket + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the server + @param output The stream of data to the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Initiates a TLS handshake in the role of client.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsClient The {@link TlsClient} to use for the handshake. + @throws IOException If in blocking mode and handshake was not successful. +
    + + Used to get the resumable session, if any, used by this connection. Only available after the + handshake has successfully completed. + + @return A {@link TlsSession} representing the resumable session used by this connection, or + null if no resumable session available. + @see TlsPeer#NotifyHandshakeComplete() + + + Export keying material according to RFC 5705: "Keying Material Exporters for TLS". + + @param asciiLabel indicates which application will use the exported keys. + @param context_value allows the application using the exporter to mix its own data with the TLS PRF for + the exporter output. + @param length the number of bytes to generate + @return a pseudorandom bit string of 'length' bytes generated from the master_secret. + + + (D)TLS DH key exchange. + + + (D)TLS ECDH key exchange (see RFC 4492). + + + (D)TLS ECDHE key exchange (see RFC 4492). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic interface for key exchange implementations in (D)TLS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + + + + Generate a new instance of an TlsMac. + + @param context the TLS client context + @param digest The digest to use. + @param key A byte-array where the key for this MAC is located. + @param keyOff The number of bytes to skip, before the key starts in the buffer. + @param keyLen The length of the key. + + + @return the MAC write secret + + + @return The output length of this MAC. + + + Calculate the MAC for some given data. + + @param type The message type of the message. + @param message A byte-buffer containing the message. + @param offset The number of bytes to skip, before the message starts. + @param length The length of the message. + @return A new byte-buffer containing the MAC value. + + + + A NULL CipherSuite, with optional MAC. + + + + + + + + + + + + + + draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + gmt_unix_time containing the current time, we recommend that implementors MAY provide the + ability to set gmt_unix_time as an option only, off by default." + + + true if the current time should be used in the gmt_unix_time field of + Random, or false if gmt_unix_time should contain a cryptographically + random value. + + + + + Report whether the server supports secure renegotiation + + + The protocol handler automatically processes the relevant extensions + + + A , true if the server supports secure renegotiation + + + + + + Return an implementation of to handle record compression. + + A + + + + + Return an implementation of to use for encryption/decryption. + + A + + + + This method will be called when an alert is raised by the protocol. + + + A human-readable message explaining what caused this alert. May be null. + The Exception that caused this alert to be raised. May be null. + + + This method will be called when an alert is received from the remote peer. + + + + + Notifies the peer that the handshake has been successfully completed. + + + + This method is called, when a change cipher spec message is received. + + @throws IOException If the message has an invalid content or the handshake is not in the correct + state. + + + Read data from the network. The method will return immediately, if there is still some data + left in the buffer, or block until some application data has been read from the network. + + @param buf The buffer where the data will be copied to. + @param offset The position where the data will be placed in the buffer. + @param len The maximum number of bytes to read. + @return The number of bytes read. + @throws IOException If something goes wrong during reading data. + + + Send some application data to the remote system. +

    + The method will handle fragmentation internally. + + @param buf The buffer with the data. + @param offset The position in the buffer where the data is placed. + @param len The length of the data. + @throws IOException If something goes wrong during sending. + + +

    The secure bidirectional stream for this connection + Only allowed in blocking mode. +
    + + Offer input from an arbitrary source. Only allowed in non-blocking mode.
    +
    + After this method returns, the input buffer is "owned" by this object. Other code + must not attempt to do anything with it.
    +
    + This method will decrypt and process all records that are fully available. + If only part of a record is available, the buffer will be retained until the + remainder of the record is offered.
    +
    + If any records containing application data were processed, the decrypted data + can be obtained using {@link #readInput(byte[], int, int)}. If any records + containing protocol data were processed, a response may have been generated. + You should always check to see if there is any available output after calling + this method by calling {@link #getAvailableOutputBytes()}. + @param input The input buffer to offer + @throws IOException If an error occurs while decrypting or processing a record +
    + + Gets the amount of received application data. A call to {@link #readInput(byte[], int, int)} + is guaranteed to be able to return at least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available application data +
    + + Retrieves received application data. Use {@link #getAvailableInputBytes()} to check + how much application data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the application data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Offer output from an arbitrary source. Only allowed in non-blocking mode.
    +
    + After this method returns, the specified section of the buffer will have been + processed. Use {@link #readOutput(byte[], int, int)} to get the bytes to + transmit to the other peer.
    +
    + This method must not be called until after the handshake is complete! Attempting + to call it before the handshake is complete will result in an exception. + @param buffer The buffer containing application data to encrypt + @param offset The offset at which to begin reading data + @param length The number of bytes of data to read + @throws IOException If an error occurs encrypting the data, or the handshake is not complete +
    + + Gets the amount of encrypted data available to be sent. A call to + {@link #readOutput(byte[], int, int)} is guaranteed to be able to return at + least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available encrypted data +
    + + Retrieves encrypted data to be sent. Use {@link #getAvailableOutputBytes()} to check + how much encrypted data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the encrypted data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Terminate this connection with an alert. Can be used for normal closure too. + + @param alertLevel + See {@link AlertLevel} for values. + @param alertDescription + See {@link AlertDescription} for values. + @throws IOException + If alert was fatal. + + + Closes this connection. + + @throws IOException If something goes wrong during closing. + + + Make sure the InputStream 'buf' now empty. Fail otherwise. + + @param buf The InputStream to check. + @throws IOException If 'buf' is not empty. + + + 'sender' only relevant to SSLv3 + + + Both streams can be the same object + + + (D)TLS PSK key exchange (RFC 4279). + + + (D)TLS and SSLv3 RSA key exchange. + + + + + + + + + + + + + + + + + + A (Int32 -> byte[]). Will never be null. + + + + + + + + + + + + + + Get the (optional) table of server extensions to be included in (extended) server hello. + + + A (Int32 -> byte[]). May be null. + + + + + + A (). May be null. + + + + + + + + + This method will be called (only) if the server included an extension of type + "status_request" with empty "extension_data" in the extended server hello. See RFC 3546 + 3.6. Certificate Status Request. If a non-null is returned, it + is sent to the client as a handshake message of type "certificate_status". + + A to be sent to the client (or null for none). + + + + + + + + + + () + + + + + Called by the protocol handler to report the client certificate, only if GetCertificateRequest + returned non-null. + + Note: this method is responsible for certificate verification and validation. + the effective client certificate (may be an empty chain). + + + + RFC 5077 3.3. NewSessionTicket Handshake Message. + + This method will be called (only) if a NewSessionTicket extension was sent by the server. See + RFC 5077 4. Recommended Ticket Construction for recommended format and protection. + + The ticket) + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Receives a TLS handshake in the role of server.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#notifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsServer + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Check whether the given SRP group parameters are acceptable for use. + + @param group the {@link SRP6GroupParameters} to check + @return true if (and only if) the specified group parameters are acceptable + + + Lookup the {@link TlsSRPLoginParameters} corresponding to the specified identity. + + NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC + 5054 2.5.1.3. {@link SimulatedTlsSRPIdentityManager} is provided for this purpose. + + @param identity + the SRP identity sent by the connecting client + @return the {@link TlsSRPLoginParameters} for the specified identity, or else 'simulated' + parameters if the identity is not recognized. A null value is also allowed, but not + recommended. + + + (D)TLS SRP key exchange (RFC 5054). + + + RFC 5764 DTLS Extension to Establish Keys for SRTP. + + + + + + + + + + + + Some helper functions for MicroTLS. + + + Add a 'signature_algorithms' extension to existing extensions. + + @param extensions A {@link Hashtable} to add the extension to. + @param supportedSignatureAlgorithms {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + Get a 'signature_algorithms' extension from extensions. + + @param extensions A {@link Hashtable} to get the extension from, if it is present. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}, or null. + @throws IOException + + + Create a 'signature_algorithms' extension value. + + @param supportedSignatureAlgorithms A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @return A byte array suitable for use as an extension value. + @throws IOException + + + Read 'signature_algorithms' extension data. + + @param extensionData The extension data. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + RFC 6066 5. + + + Encode this {@link UrlAndHash} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link UrlAndHash} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link UrlAndHash} object. + @throws IOException + + + RFC 5764 4.1.1 + + + @param protectionProfiles see {@link SrtpProtectionProfile} for valid constants. + @param mki valid lengths from 0 to 255. + + + @return see {@link SrtpProtectionProfile} for valid constants. + + + @return valid lengths from 0 to 255. + + + RFC 4681 + + + return a = a + b - b preserved. + + + unsigned comparison on two arrays - note the arrays may + start with leading zeros. + + + return z = x / y - done in place (z value preserved, x contains the + remainder) + + + return whether or not a BigInteger is probably prime with a + probability of 1 - (1/2)**certainty. +

    From Knuth Vol 2, pg 395.

    +
    + + Calculate the numbers u1, u2, and u3 such that: + + u1 * a + u2 * b = u3 + + where u3 is the greatest common divider of a and b. + a and b using the extended Euclid algorithm (refer p. 323 + of The Art of Computer Programming vol 2, 2nd ed). + This also seems to have the side effect of calculating + some form of multiplicative inverse. + + @param a First number to calculate gcd for + @param b Second number to calculate gcd for + @param u1Out the return object for the u1 value + @return The greatest common divisor of a and b + + + return w with w = x * x - w is assumed to have enough space. + + + return x with x = y * z - x is assumed to have enough space. + + + Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + + + Montgomery multiplication: a = x * y * R^(-1) mod m +
    + Based algorithm 14.36 of Handbook of Applied Cryptography. +
    +
  • m, x, y should have length n
  • +
  • a should have length (n + 1)
  • +
  • b = 2^32, R = b^n
  • +
    + The result is put in x +
    + NOTE: the indices of x, y, m, a different in HAC and in Java +
    + + return x = x % y - done in place (y value preserved) + + + do a left shift - this returns a new array. + + + do a right shift - this does it in place. + + + do a right shift by one - this does it in place. + + + returns x = x - y - we assume x is >= y + + + Utility methods for generating primes and testing for primality. + + + Used to return the output from the + {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced + Miller-Rabin Probabilistic Primality Test} + + + Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine} + + + FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine + + Construct a provable prime number using a hash function. + + @param hash + the {@link Digest} instance to use (as "Hash()"). Cannot be null. + @param length + the length (in bits) of the prime to be generated. Must be at least 2. + @param inputSeed + the seed to be used for the generation of the requested prime. Cannot be null or + empty. + @return an {@link STOutput} instance containing the requested prime. + + + FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an + alternative to {@link #isMRProbablePrime(BigInteger, SecureRandom, int)} that provides more + information about a composite candidate, which may be useful when generating or validating + RSA moduli. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return an {@link MROutput} instance that can be further queried for details. + + + A fast check for small divisors, up to some implementation-specific limit. + + @param candidate + the {@link BigInteger} instance to test for division by small factors. + + @return true if the candidate is found to have any small factors, + false otherwise. + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return false if any witness to compositeness is found amongst the chosen bases + (so candidate is definitely NOT prime), or else true + (indicating primality with some probability dependent on the number of iterations + that were performed). + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + + Run a single iteration of the Miller-Rabin algorithm against the specified base. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param baseValue + the base value to use for this iteration. + @return false if the specified base is a witness to compositeness (so + candidate is definitely NOT prime), or else true. + + + Simple shift-and-add multiplication. Serves as reference implementation + to verify (possibly faster) implementations, and for very small scalars. + + @param p + The point to multiply. + @param k + The multiplier. + @return The result of the point multiplication kP. + + + Base class for an elliptic curve. + + + Adds PreCompInfo for a point on this curve, under a given name. Used by + ECMultipliers to save the precomputation for this ECPoint for use + by subsequent multiplication. + + @param point + The ECPoint to store precomputations for. + @param name + A String used to index precomputations of different types. + @param preCompInfo + The values precomputed by the ECMultiplier. + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + each z coordinate is scaled by this value prior to normalization (but only one + actual multiplication is needed). + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + @param off + The start of the range of points to normalize + @param len + The length of the range of points to normalize + @param iso + The (optional) z-scaling factor - can be null + + + Sets the default ECMultiplier, unless already set. + + + Decode a point on this curve from its ASN.1 encoding. The different + encodings are taken account of, including point compression for + Fp (X9.62 s 4.2.1 pg 17). + @return The decoded point. + + + Elliptic curve over Fp + + + The auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Solves a quadratic equation z2 + z = beta(X9.62 + D.1.6) The other solution is z + 1. + + @param beta + The value to solve the qradratic equation for. + @return the solution for z2 + z = beta or + null if no solution exists. + + + @return the auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Returns true if this is a Koblitz curve (ABC curve). + @return true if this is a Koblitz curve (ABC curve), false otherwise + + + Elliptic curves over F2m. The Weierstrass equation is given by + y2 + xy = x3 + ax2 + b. + + + The exponent m of F2m. + + + TPB: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + PPB: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + The point at infinity on this curve. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Return true if curve uses a Trinomial basis. + + @return true if curve Trinomial, false otherwise. + + + return the field name for this field. + + @return the string "Fp". + + + return a sqrt root - the routine verifies that the calculation + returns the right value - if none exists it returns null. + + + Class representing the Elements of the finite field + F2m in polynomial basis (PB) + representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + basis representations are supported. Gaussian normal basis (GNB) + representation is not supported. + + + Indicates gaussian normal basis representation (GNB). Number chosen + according to X9.62. GNB is not implemented at present. + + + Indicates trinomial basis representation (Tpb). Number chosen + according to X9.62. + + + Indicates pentanomial basis representation (Ppb). Number chosen + according to X9.62. + + + Tpb or Ppb. + + + The exponent m of F2m. + + + The LongArray holding the bits. + + + Constructor for Ppb. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Constructor for Tpb. + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Checks, if the ECFieldElements a and b + are elements of the same field F2m + (having the same representation). + @param a field element. + @param b field element to be compared. + @throws ArgumentException if a and b + are not elements of the same field + F2m (having the same + representation). + + + @return the representation of the field + F2m, either of + {@link F2mFieldElement.Tpb} (trinomial + basis representation) or + {@link F2mFieldElement.Ppb} (pentanomial + basis representation). + + + @return the degree m of the reduction polynomial + f(z). + + + @return Tpb: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + Ppb: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always returns 0
    + Ppb: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always set to 0
    + Ppb: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + base class for points on elliptic curves. + + + Normalizes this point, and then returns the affine x-coordinate. + + Note: normalization can be expensive, this method is deprecated in favour + of caller-controlled normalization. + + + Normalizes this point, and then returns the affine y-coordinate. + + Note: normalization can be expensive, this method is deprecated in favour + of caller-controlled normalization. + + + Returns the affine x-coordinate after checking that this point is normalized. + + @return The affine x-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the affine y-coordinate after checking that this point is normalized + + @return The affine y-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the x-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineXCoord if you expect the point to already have been normalized. + + @return the x-coordinate of this point + + + Returns the y-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineYCoord if you expect the point to already have been normalized. + + @return the y-coordinate of this point + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. + + @return a new ECPoint instance representing the same point, but with normalized coordinates + + + return the field element encoded with point compression. (S 4.3.6) + + + Multiplies this ECPoint by the given number. + @param k The multiplicator. + @return k * this. + + + Elliptic curve points over Fp + + + Create a point which encodes without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + + Create a point that encodes with or without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + + Elliptic curve points over F2m + + + @param curve base curve + @param x x point + @param y y point + + + @param curve base curve + @param x x point + @param y y point + @param withCompression true if encode with point compression. + + + Constructor for point at infinity + + + Class representing a simple version of a big decimal. A + SimpleBigDecimal is basically a + {@link java.math.BigInteger BigInteger} with a few digits on the right of + the decimal point. The number of (binary) digits on the right of the decimal + point is called the scale of the SimpleBigDecimal. + Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + automatically, but must be set manually. All SimpleBigDecimals + taking part in the same arithmetic operation must have equal scale. The + result of a multiplication of two SimpleBigDecimals returns a + SimpleBigDecimal with double scale. + + + Returns a SimpleBigDecimal representing the same numerical + value as value. + @param value The value of the SimpleBigDecimal to be + created. + @param scale The scale of the SimpleBigDecimal to be + created. + @return The such created SimpleBigDecimal. + + + Constructor for SimpleBigDecimal. The value of the + constructed SimpleBigDecimal Equals bigInt / + 2scale. + @param bigInt The bigInt value parameter. + @param scale The scale of the constructed SimpleBigDecimal. + + + Class holding methods for point multiplication based on the window + τ-adic nonadjacent form (WTNAF). The algorithms are based on the + paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + by Jerome A. Solinas. The paper first appeared in the Proceedings of + Crypto 1997. + + + The window width of WTNAF. The standard value of 4 is slightly less + than optimal for running time, but keeps space requirements for + precomputation low. For typical curves, a value of 5 or 6 results in + a better running time. When changing this value, the + αu's must be computed differently, see + e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + p. 121-122 + + + 24 + + + The αu's for a=0 as an array + of ZTauElements. + + + The αu's for a=0 as an array + of TNAFs. + + + The αu's for a=1 as an array + of ZTauElements. + + + The αu's for a=1 as an array + of TNAFs. + + + Computes the norm of an element λ of + Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The norm of λ. + + + Computes the norm of an element λ of + R[τ], where λ = u + vτ + and u and u are real numbers (elements of + R). + @param mu The parameter μ of the elliptic curve. + @param u The real part of the element λ of + R[τ]. + @param v The τ-adic part of the element + λ of R[τ]. + @return The norm of λ. + + + Rounds an element λ of R[τ] + to an element of Z[τ], such that their difference + has minimal norm. λ is given as + λ = λ0 + λ1τ. + @param lambda0 The component λ0. + @param lambda1 The component λ1. + @param mu The parameter μ of the elliptic curve. Must + equal 1 or -1. + @return The rounded element of Z[τ]. + @throws ArgumentException if lambda0 and + lambda1 do not have same scale. + + + Approximate division by n. For an integer + k, the value λ = s k / n is + computed to c bits of accuracy. + @param k The parameter k. + @param s The curve parameter s0 or + s1. + @param vm The Lucas Sequence element Vm. + @param a The parameter a of the elliptic curve. + @param m The bit length of the finite field + Fm. + @param c The number of bits of accuracy, i.e. the scale of the returned + SimpleBigDecimal. + @return The value λ = s k / n computed to + c bits of accuracy. + + + Computes the τ-adic NAF (non-adjacent form) of an + element λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The τ-adic NAF of λ. + + + Applies the operation τ() to an + AbstractF2mPoint. + @param p The AbstractF2mPoint to which τ() is applied. + @return τ(p) + + + Returns the parameter μ of the elliptic curve. + @param curve The elliptic curve from which to obtain μ. + The curve must be a Koblitz curve, i.e. a Equals + 0 or 1 and b Equals + 1. + @return μ of the elliptic curve. + @throws ArgumentException if the given ECCurve is not a Koblitz + curve. + + + Calculates the Lucas Sequence elements Uk-1 and + Uk or Vk-1 and + Vk. + @param mu The parameter μ of the elliptic curve. + @param k The index of the second element of the Lucas Sequence to be + returned. + @param doV If set to true, computes Vk-1 and + Vk, otherwise Uk-1 and + Uk. + @return An array with 2 elements, containing Uk-1 + and Uk or Vk-1 + and Vk. + + + Computes the auxiliary value tw. If the width is + 4, then for mu = 1, tw = 6 and for + mu = -1, tw = 10 + @param mu The parameter μ of the elliptic curve. + @param w The window width of the WTNAF. + @return the auxiliary value tw + + + Computes the auxiliary values s0 and + s1 used for partial modular reduction. + @param curve The elliptic curve for which to compute + s0 and s1. + @throws ArgumentException if curve is not a + Koblitz curve (Anomalous Binary Curve, ABC). + + + Partial modular reduction modulo + m - 1)/(τ - 1). + @param k The integer to be reduced. + @param m The bitlength of the underlying finite field. + @param a The parameter a of the elliptic curve. + @param s The auxiliary values s0 and + s1. + @param mu The parameter μ of the elliptic curve. + @param c The precision (number of bits of accuracy) of the partial + modular reduction. + @return ρ := k partmod (τm - 1)/(τ - 1) + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by a BigInteger using the reduced τ-adic + NAF (RTNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param k The BigInteger by which to Multiply p. + @return k * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param lambda The element λ of + Z[τ]. + @return λ * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method, given the TNAF + of λ. + @param p The AbstractF2mPoint to Multiply. + @param u The the TNAF of λ.. + @return λ * p + + + Computes the [τ]-adic window NAF of an element + λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @param width The window width of the resulting WNAF. + @param pow2w 2width. + @param tw The auxiliary value tw. + @param alpha The αu's for the window width. + @return The [τ]-adic window NAF of + λ. + + + Does the precomputation for WTNAF multiplication. + @param p The ECPoint for which to do the precomputation. + @param a The parameter a of the elliptic curve. + @return The precomputation array for p. + + + Class representing an element of Z[τ]. Let + λ be an element of Z[τ]. Then + λ is given as λ = u + vτ. The + components u and v may be used directly, there + are no accessor methods. + Immutable class. + + + The "real" part of λ. + + + The "τ-adic" part of λ. + + + Constructor for an element λ of + Z[τ]. + @param u The "real" part of λ. + @param v The "τ-adic" part of + λ. + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(boolean)} + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + Joye's double-add algorithm. + + + Interface for classes encapsulating a point multiplication algorithm + for ECPoints. + + + Multiplies the ECPoint p by k, i.e. + p is added k times to itself. + @param p The ECPoint to be multiplied. + @param k The factor by which p is multiplied. + @return p multiplied by k. + + + Class holding precomputation data for fixed-point multiplications. + + + Array holding the precomputed ECPoints used for a fixed + point multiplication. + + + The width used for the precomputation. If a larger width precomputation + is already available this may be larger than was requested, so calling + code should refer to the actual width. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left) using + mixed coordinates. + + + By default, addition will be done in Jacobian coordinates, and doubling will be done in + Modified Jacobian coordinates (independent of the original coordinate system of each point). + + + Montgomery ladder. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (left-to-right). + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). + + + Interface for classes storing precomputation data for multiplication + algorithms. Used as a Memento (see GOF patterns) for + WNafMultiplier. + + + Class implementing the WNAF (Window Non-Adjacent Form) multiplication + algorithm. + + + Multiplies this by an integer k using the + Window NAF method. + @param k The integer by which this is multiplied. + @return A new ECPoint which equals this + multiplied by k. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + algorithm. + + + Array holding the precomputed ECPoints used for a Window + NAF multiplication. + + + Array holding the negations of the precomputed ECPoints used + for a Window NAF multiplication. + + + Holds an ECPoint representing Twice(this). Used for the + Window NAF multiplication to create or extend the precomputed values. + + + Computes the Window NAF (non-adjacent Form) of an integer. + @param width The width w of the Window NAF. The width is + defined as the minimal number w, such that for any + w consecutive digits in the resulting representation, at + most one is non-zero. + @param k The integer of which the Window NAF is computed. + @return The Window NAF of the given width, such that the following holds: + k = &sum;i=0l-1 ki2i + , where the ki denote the elements of the + returned byte[]. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @return the window size to use + + + Class implementing the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by k using the reduced τ-adic NAF (RTNAF) + method. + @param p The AbstractF2mPoint to multiply. + @param k The integer by which to multiply k. + @return p multiplied by k. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] using + the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to multiply. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @return p multiplied by λ. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the window τ-adic NAF (TNAF) method, given the + WTNAF of λ. + @param p The AbstractF2mPoint to multiply. + @param u The the WTNAF of λ.. + @return λ * p + + + Class holding precomputation data for the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Array holding the precomputed AbstractF2mPoints used for the + WTNAF multiplication in + {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + WTauNafMultiplier.multiply()}. + + + 'Zeroless' Signed Digit Left-to-Right. + + + 'Zeroless' Signed Digit Right-to-Left. + + + + + BasicOcspResponse ::= SEQUENCE { + tbsResponseData ResponseData, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING, + certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + } + + + + + The DER encoding of the tbsResponseData field. + In the event of an encoding error. + + + The certificates, if any, associated with the response. + In the event of an encoding error. + + + + Verify the signature against the tbsResponseData object we contain. + + + + The ASN.1 encoded representation of this object. + + + Generator for basic OCSP response objects. + + + basic constructor + + + construct with the responderID to be the SHA-1 keyHash of the passed in public key. + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + @param singleExtensions optional extensions + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param nextUpdate date when next update should be requested + @param certStatus status of the certificate - null if okay + @param singleExtensions optional extensions + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param thisUpdate date this response was valid on + @param nextUpdate date when next update should be requested + @param certStatus status of the certificate - null if okay + @param singleExtensions optional extensions + + + Set the extensions for the response. + + @param responseExtensions the extension object to carry. + + + + Generate the signed response using the passed in signature calculator. + + Implementation of signing calculator factory. + The certificate chain associated with the response signer. + "produced at" date. + + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + create from an issuer certificate and the serial number of the + certificate it signed. + @exception OcspException if any problems occur creating the id fields. + + + return the serial number for the certificate associated + with this request. + + + Create a new CertificateID for a new serial number derived from a previous one + calculated for the same CA certificate. + + @param original the previously calculated CertificateID for the CA. + @param newSerialNumber the serial number for the new certificate of interest. + + @return a new CertificateID for newSerialNumber + + +
    +             OcspRequest     ::=     SEQUENCE {
    +                   tbsRequest                  TBSRequest,
    +                   optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +            
    +               TBSRequest      ::=     SEQUENCE {
    +                   version             [0]     EXPLICIT Version DEFAULT v1,
    +                   requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +                   requestList                 SEQUENCE OF Request,
    +                   requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +            
    +               Signature       ::=     SEQUENCE {
    +                   signatureAlgorithm      AlgorithmIdentifier,
    +                   signature               BIT STRING,
    +                   certs               [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL}
    +            
    +               Version         ::=             INTEGER  {  v1(0) }
    +            
    +               Request         ::=     SEQUENCE {
    +                   reqCert                     CertID,
    +                   singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +            
    +               CertID          ::=     SEQUENCE {
    +                   hashAlgorithm       AlgorithmIdentifier,
    +                   issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +                   issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +                   serialNumber        CertificateSerialNumber }
    +             
    +
    + + Return the DER encoding of the tbsRequest field. + @return DER encoding of tbsRequest + @throws OcspException in the event of an encoding error. + + + return the object identifier representing the signature algorithm + + + If the request is signed return a possibly empty CertStore containing the certificates in the + request. If the request is not signed the method returns null. + + @return null if not signed, a CertStore otherwise + @throws OcspException + + + Return whether or not this request is signed. + + @return true if signed false otherwise. + + + Verify the signature against the TBSRequest object we contain. + + + return the ASN.1 encoded representation of this object. + + + Add a request for the given CertificateID. + + @param certId certificate ID of interest + + + Add a request with extensions + + @param certId certificate ID of interest + @param singleRequestExtensions the extensions to attach to the request + + + Set the requestor name to the passed in X509Principal + + @param requestorName a X509Principal representing the requestor name. + + + Generate an unsigned request + + @return the OcspReq + @throws OcspException + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + return the ASN.1 encoded representation of this object. + + + base generator for an OCSP response - at the moment this only supports the + generation of responses containing BasicOCSP responses. + + + note 4 is not used. + + + Carrier for a ResponderID. + + + wrapper for the RevokedInfo object + + + return the revocation reason. Note: this field is optional, test for it + with hasRevocationReason() first. + @exception InvalidOperationException if a reason is asked for and none is avaliable + + + Return the status object for the response - null indicates good. + + @return the status object for the response, null if it is good. + + + return the NextUpdate value - note: this is an optional field so may + be returned as null. + + @return nextUpdate, or null if not present. + + + wrapper for the UnknownInfo object + + + + Utility class for creating IBasicAgreement objects from their names/Oids + + + + + Cipher Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Utility class for creating IDigest objects from their names/Oids + + + + + Returns a ObjectIdentifier for a given digest mechanism. + + A string representation of the digest meanism. + A DerObjectIdentifier, null if the Oid is not available. + + + + A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + + + + + Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + + + A System.Security.Cryptography.X509Certificate. + + + + Utility class for creating HMac object from their names/Oids + + + + + + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Create and auto-seed an instance based on the given algorithm. + + Equivalent to GetInstance(algorithm, true) + e.g. "SHA256PRNG" + + + + Create an instance based on the given algorithm, with optional auto-seeding + + e.g. "SHA256PRNG" + If true, the instance will be auto-seeded. + + + + To replicate existing predictable output, replace with GetInstance("SHA1PRNG", false), followed by SetSeed(seed) + + + + Use the specified instance of IRandomGenerator as random source. + + This constructor performs no seeding of either the IRandomGenerator or the + constructed SecureRandom. It is the responsibility of the client to provide + proper seed material as necessary/appropriate for the given IRandomGenerator + implementation. + + The source to generate all random bytes from. + + + base constructor. + + + create a SecurityUtilityException with the given message. + + @param message the message to be carried with the exception. + + + + Signer Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns an ObjectIdentifier for a given encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the OID is not available. + + + + Utility class for creating IWrapper objects from their names/Oids + + + + PEM generator for the original set of PEM objects used in Open SSL. + + + Class for reading OpenSSL PEM encoded streams containing + X509 certificates, PKCS8 encoded keys and PKCS7 objects. +

    + In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + Certificates will be returned using the appropriate java.security type.

    +
    + + Create a new PemReader + + @param reader the Reader + + + Create a new PemReader with a password finder + + @param reader the Reader + @param pFinder the password finder + + + Reads in a X509Certificate. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a X509CRL. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS10 certification request. + + @return the certificate request. + @throws IOException if an I/O error occured + + + Reads in a X509 Attribute Certificate. + + @return the X509 Attribute Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + API. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Read a Key Pair + + + General purpose writer for OpenSSL PEM objects. + + + The TextWriter object to write the output to. + + + Constructor for an unencrypted private key PEM object. + + @param key private key to be encoded. + + + Constructor for an encrypted private key PEM object. + + @param key private key to be encoded + @param algorithm encryption algorithm to use + @param provider provider to use + @throws NoSuchAlgorithmException if algorithm/mode cannot be found + + + + A class for verifying and creating Pkcs10 Certification requests. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + CertificationRequestInfo ::= Sequence { + version Integer { v1(0) } (v1,...), + subject Name, + subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }}, + attributes [0] Attributes{{ CRIAttributes }} + } + + Attributes { ATTRIBUTE:IOSet } ::= Set OF Attr{{ IOSet }} + + Attr { ATTRIBUTE:IOSet } ::= Sequence { + type ATTRIBUTE.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Get the public key. + + The public key. + + + + Verify Pkcs10 Cert Request is valid. + + true = valid. + + + + A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + The requests are made using delay signing. This is useful for situations where + the private key is in another environment and not directly accessible (e.g. HSM) + So the first step creates the request, then the signing is done outside this + object and the signature is then used to complete the request. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + CertificationRequestInfo ::= Sequence { + version Integer { v1(0) } (v1,...), + subject Name, + subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }}, + attributes [0] Attributes{{ CRIAttributes }} + } + + Attributes { ATTRIBUTE:IOSet } ::= Set OF Attr{{ IOSet }} + + Attr { ATTRIBUTE:IOSet } ::= Sequence { + type ATTRIBUTE.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + After the object is constructed use the and finally the + SignRequest methods to finalize the request. + + + + simply return the cert entry for the private key + + + Utility class for reencoding PKCS#12 files to definite length. + + + Just re-encode the outer layer of the PKCS#12 file to definite length encoding. + + @param berPKCS12File - original PKCS#12 file + @return a byte array representing the DER encoding of the PFX structure + @throws IOException + + + Re-encode the PKCS#12 structure to definite length encoding at the inner layer + as well, recomputing the MAC accordingly. + + @param berPKCS12File - original PKCS12 file. + @param provider - provider to use for MAC calculation. + @return a byte array representing the DER encoding of the PFX structure. + @throws IOException on parsing, encoding errors. + + + + Returns the revocationDate. + + + + + Returns the certStatus. + + + + Returns an immutable Set of X.509 attribute certificate + extensions that this PkixAttrCertChecker supports or + null if no extensions are supported. +

    + Each element of the set is a String representing the + Object Identifier (OID) of the X.509 extension that is supported. +

    +

    + All X.509 attribute certificate extensions that a + PkixAttrCertChecker might possibly be able to process + should be included in the set. +

    + + @return an immutable Set of X.509 extension OIDs (in + String format) supported by this + PkixAttrCertChecker, or null if no + extensions are supported +
    + + Performs checks on the specified attribute certificate. Every handled + extension is rmeoved from the unresolvedCritExts + collection. + + @param attrCert The attribute certificate to be checked. + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param holderCertPath The certificate path which belongs to the holder + certificate. + @param unresolvedCritExts a Collection of OID strings + representing the current set of unresolved critical extensions + @throws CertPathValidatorException if the specified attribute certificate + does not pass the check. + + + Returns a clone of this object. + + @return a copy of this PkixAttrCertChecker + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + + @see org.bouncycastle.x509.ExtendedPkixParameters + + + Validates an attribute certificate with the given certificate path. + +

    + params must be an instance of + ExtendedPkixParameters. +

    + The target constraints in the params must be an + X509AttrCertStoreSelector with at least the attribute + certificate criterion set. Obey that also target informations may be + necessary to correctly validate this attribute certificate. +

    + The attribute certificate issuer must be added to the trusted attribute + issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. +

    + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param params The PKIX parameters. + @return A PKIXCertPathValidatorResult of the result of + validating the certPath. + @throws InvalidAlgorithmParameterException if params is + inappropriate for this validator. + @throws CertPathValidatorException if the verification fails. +
    + + + Summary description for PkixBuilderParameters. + + + + Returns an instance of PkixBuilderParameters. +

    + This method can be used to get a copy from other + PKIXBuilderParameters, PKIXParameters, + and ExtendedPKIXParameters instances. +

    + + @param pkixParams The PKIX parameters to create a copy of. + @return An PkixBuilderParameters instance. +
    + + + Excluded certificates are not used for building a certification path. + + the excluded certificates. + + + + Sets the excluded certificates which are not used for building a + certification path. If the ISet is null an + empty set is assumed. + + + The given set is cloned to protect it against subsequent modifications. + + The excluded certificates to set. + + + Can alse handle ExtendedPKIXBuilderParameters and + PKIXBuilderParameters. + + @param params Parameters to set. + @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + + + Makes a copy of this PKIXParameters object. Changes to the + copy will not affect the original and vice versa. + + @return a copy of this PKIXParameters object + + + An immutable sequence of certificates (a certification path).
    +
    + This is an abstract class that defines the methods common to all CertPaths. + Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    +
    + All CertPath objects have a type, a list of Certificates, and one or more + supported encodings. Because the CertPath class is immutable, a CertPath + cannot change in any externally visible way after being constructed. This + stipulation applies to all public fields and methods of this class and any + added or overridden by subclasses.
    +
    + The type is a string that identifies the type of Certificates in the + certification path. For each certificate cert in a certification path + certPath, cert.getType().equals(certPath.getType()) must be true.
    +
    + The list of Certificates is an ordered List of zero or more Certificates. + This List and all of the Certificates contained in it must be immutable.
    +
    + Each CertPath object must support one or more encodings so that the object + can be translated into a byte array for storage or transmission to other + parties. Preferably, these encodings should be well-documented standards + (such as PKCS#7). One of the encodings supported by a CertPath is considered + the default encoding. This encoding is used if no encoding is explicitly + requested (for the {@link #getEncoded()} method, for instance).
    +
    + All CertPath objects are also Serializable. CertPath objects are resolved + into an alternate {@link CertPathRep} object during serialization. This + allows a CertPath object to be serialized into an equivalent representation + regardless of its underlying implementation.
    +
    + CertPath objects can be created with a CertificateFactory or they can be + returned by other classes, such as a CertPathBuilder.
    +
    + By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + starting with the target certificate and ending with a certificate issued by + the trust anchor. That is, the issuer of one certificate is the subject of + the following one. The certificate representing the + {@link TrustAnchor TrustAnchor} should not be included in the certification + path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + CertPathValidators will detect any departure from these conventions that + cause the certification path to be invalid and throw a + CertPathValidatorException.
    +
    + Concurrent Access
    +
    + All CertPath objects must be thread-safe. That is, multiple threads may + concurrently invoke the methods defined in this class on a single CertPath + object (or more than one) with no ill effects. This is also true for the List + returned by CertPath.getCertificates.
    +
    + Requiring CertPath objects to be immutable and thread-safe allows them to be + passed around to various pieces of code without worrying about coordinating + access. Providing this thread-safety is generally not difficult, since the + CertPath and List objects in question are immutable. + + @see CertificateFactory + @see CertPathBuilder + + CertPath implementation for X.509 certificates. + +
    + + @param certs + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + @param type the standard name of the type of Certificatesin this path + + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + + @param type the standard name of the type of Certificatesin this path + + + + Returns an iteration of the encodings supported by this + certification path, with the default encoding + first. Attempts to modify the returned Iterator via its + remove method result in an UnsupportedOperationException. + + @return an Iterator over the names of the supported encodings (as Strings) + + + + Compares this certification path for equality with the specified object. + Two CertPaths are equal if and only if their types are equal and their + certificate Lists (and by implication the Certificates in those Lists) + are equal. A CertPath is never equal to an object that is not a CertPath.
    +
    + This algorithm is implemented by this method. If it is overridden, the + behavior specified here must be maintained. + + @param other + the object to test for equality with this certification path + + @return true if the specified object is equal to this certification path, + false otherwise + + @see Object#hashCode() Object.hashCode() +
    + + Returns the encoded form of this certification path, using + the default encoding. + + @return the encoded bytes + @exception CertificateEncodingException if an encoding error occurs + + + + Returns the encoded form of this certification path, using + the specified encoding. + + @param encoding the name of the encoding to use + @return the encoded bytes + @exception CertificateEncodingException if an encoding error + occurs or the encoding requested is not supported + + + + + Returns the list of certificates in this certification + path. + + + + Return a DERObject containing the encoded certificate. + + @param cert the X509Certificate object to be encoded + + @return the DERObject + + + + Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + + @see CertPathBuilderSpi + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + + Summary description for PkixCertPathBuilderException. + + + + + Summary description for PkixCertPathBuilderResult. + + + + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker is unable to + * check certificates in the specified order; it should never + * be thrown if the forward flag is false since reverse + * checking must be supported +
    + + Indicates if forward checking is supported. Forward checking refers to + the ability of the PKIXCertPathChecker to perform its + checks when certificates are presented to the check method + in the forward direction (from target to most-trusted CA). + + @return true if forward checking is supported, + false otherwise + + + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String representing the + * Object Identifier (OID) of the X.509 extension that is supported. The OID + * is represented by a set of nonnegative integers separated by periods. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported +
    + + Performs the check(s) on the specified certificate using its internal + state and removes any critical extensions that it processes from the + specified collection of OID strings that represent the unresolved + critical extensions. The certificates are presented in the order + specified by the init method. + + @param cert + the Certificate to be checked + @param unresolvedCritExts + a Collection of OID strings representing the + current set of unresolved critical extensions + @exception CertPathValidatorException + if the specified certificate does not pass the check + + + Returns a clone of this object. Calls the Object.clone() + method. All subclasses which maintain state must support and override + this method, if necessary. + + @return a copy of this PKIXCertPathChecker + + + The Service Provider Interface (SPI) + for the {@link CertPathValidator CertPathValidator} class. All + CertPathValidator implementations must include a class (the + SPI class) that extends this class (CertPathValidatorSpi) + and implements all of its methods. In general, instances of this class + should only be accessed through the CertPathValidator class. + For details, see the Java Cryptography Architecture.
    +
    + Concurrent Access
    +
    + Instances of this class need not be protected against concurrent + access from multiple threads. Threads that need to access a single + CertPathValidatorSpi instance concurrently should synchronize + amongst themselves and provide the necessary locking before calling the + wrapping CertPathValidator object.
    +
    + However, implementations of CertPathValidatorSpi may still + encounter concurrency issues, since multiple threads each + manipulating a different CertPathValidatorSpi instance need not + synchronize. + + CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + 3280. + +
    + + An exception indicating one of a variety of problems encountered when + validating a certification path.
    +
    + A CertPathValidatorException provides support for wrapping + exceptions. The {@link #getCause getCause} method returns the throwable, + if any, that caused this exception to be thrown.
    +
    + A CertPathValidatorException may also include the + certification path that was being validated when the exception was thrown + and the index of the certificate in the certification path that caused the + exception to be thrown. Use the {@link #getCertPath getCertPath} and + {@link #getIndex getIndex} methods to retrieve this information.
    +
    + Concurrent Access
    +
    + Unless otherwise specified, the methods defined in this class are not + thread-safe. Multiple threads that need to access a single + object concurrently should synchronize amongst themselves and + provide the necessary locking. Multiple threads each manipulating + separate objects need not synchronize. + + @see CertPathValidator + +
    + + + Creates a PkixCertPathValidatorException with the given detail + message. A detail message is a String that describes this + particular exception. + + the detail message + + + + Creates a PkixCertPathValidatorException with the specified + detail message and cause. + + the detail message + the cause (which is saved for later retrieval by the + {@link #getCause getCause()} method). (A null + value is permitted, and indicates that the cause is + nonexistent or unknown.) + + + + Creates a PkixCertPathValidatorException with the specified + detail message, cause, certification path, and index. + + the detail message (or null if none) + the cause (or null if none) + the certification path that was in the process of being + validated when the error was encountered + the index of the certificate in the certification path that * + + + + Returns the detail message for this CertPathValidatorException. + + the detail message, or null if neither the message nor cause were specified + + + Returns the certification path that was being validated when the + exception was thrown. + + @return the CertPath that was being validated when the + exception was thrown (or null if not specified) + + + Returns the index of the certificate in the certification path that + caused the exception to be thrown. Note that the list of certificates in + a CertPath is zero based. If no index has been set, -1 is + returned. + + @return the index that has been set, or -1 if none has been set + + + + Summary description for PkixCertPathValidatorResult. + + + + + Summary description for PkixCertPathValidatorUtilities. + + + + + key usage bits + + + + + Search the given Set of TrustAnchor's for one that is the + issuer of the given X509 certificate. + + the X509 certificate + a Set of TrustAnchor's + the TrustAnchor object if found or + null if not. + + @exception + + + + Returns the issuer of an attribute certificate or certificate. + + The attribute certificate or certificate. + The issuer as X500Principal. + + + Return the next working key inheriting DSA parameters if necessary. +

    + This methods inherits DSA parameters from the indexed certificate or + previous certificates in the certificate chain to the returned + PublicKey. The list is searched upwards, meaning the end + certificate is at position 0 and previous certificates are following. +

    +

    + If the indexed certificate does not contain a DSA key this method simply + returns the public key. If the DSA key already contains DSA parameters + the key is also only returned. +

    + + @param certs The certification path. + @param index The index of the certificate which contains the public key + which should be extended with DSA parameters. + @return The public key of the certificate in list position + index extended with DSA parameters if applicable. + @throws Exception if DSA parameters cannot be inherited. +
    + + + Return a Collection of all certificates or attribute certificates found + in the X509Store's that are matching the certSelect criteriums. + + a {@link Selector} object that will be used to select + the certificates + a List containing only X509Store objects. These + are used to search for certificates. + a Collection of all found or + objects. + May be empty but never null. + + + + Add the CRL issuers from the cRLIssuer field of the distribution point or + from the certificate if not given to the issuer criterion of the + selector. +

    + The issuerPrincipals are a collection with a single + X500Principal for X509Certificates. For + {@link X509AttributeCertificate}s the issuer may contain more than one + X500Principal. +

    + + @param dp The distribution point. + @param issuerPrincipals The issuers of the certificate or attribute + certificate which contains the distribution point. + @param selector The CRL selector. + @param pkixParams The PKIX parameters containing the cert stores. + @throws Exception if an exception occurs while processing. + @throws ClassCastException if issuerPrincipals does not + contain only X500Principals. +
    + + Fetches complete CRLs according to RFC 3280. + + @param dp The distribution point for which the complete CRL + @param cert The X509Certificate or + {@link org.bouncycastle.x509.X509AttributeCertificate} for + which the CRL should be searched. + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @return A Set of X509CRLs with complete + CRLs. + @throws Exception if an exception occurs while picking the CRLs + or no CRLs are found. + + + Fetches delta CRLs according to RFC 3280 section 5.2.4. + + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @param completeCRL The complete CRL the delta CRL is for. + @return A Set of X509CRLs with delta CRLs. + @throws Exception if an exception occurs while picking the delta + CRLs. + + + Find the issuer certificates of a given certificate. + + @param cert + The certificate for which an issuer should be found. + @param pkixParams + @return A Collection object containing the issuer + X509Certificates. Never null. + + @exception Exception + if an error occurs. + + + + Extract the value of the given extension, if it exists. + + The extension object. + The object identifier to obtain. + Asn1Object + if the extension cannot be read. + + + + crl checking + Return a Collection of all CRLs found in the X509Store's that are + matching the crlSelect criteriums. + + a {@link X509CRLStoreSelector} object that will be used + to select the CRLs + a List containing only {@link org.bouncycastle.x509.X509Store + X509Store} objects. These are used to search for CRLs + a Collection of all found {@link X509CRL X509CRL} objects. May be + empty but never null. + + + + Returns the intersection of the permitted IP ranges in + permitted with ip. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ips The IP address with its subnet mask. + @return The Set of permitted IP ranges intersected with + ip. + + + Returns the union of the excluded IP ranges in excluded + with ip. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address with its subnet mask. + @return The Set of excluded IP ranges unified with + ip as byte arrays. + + + Calculates the union if two IP ranges. + + @param ipWithSubmask1 The first IP address with its subnet mask. + @param ipWithSubmask2 The second IP address with its subnet mask. + @return A Set with the union of both addresses. + + + Calculates the interesction if two IP ranges. + + @param ipWithSubmask1 The first IP address with its subnet mask. + @param ipWithSubmask2 The second IP address with its subnet mask. + @return A Set with the single IP address with its subnet + mask as a byte array or an empty Set. + + + Concatenates the IP address with its subnet mask. + + @param ip The IP address. + @param subnetMask Its subnet mask. + @return The concatenated IP address with its subnet mask. + + + Splits the IP addresses and their subnet mask. + + @param ipWithSubmask1 The first IP address with the subnet mask. + @param ipWithSubmask2 The second IP address with the subnet mask. + @return An array with two elements. Each element contains the IP address + and the subnet mask in this order. + + + Based on the two IP addresses and their subnet masks the IP range is + computed for each IP address - subnet mask pair and returned as the + minimum IP address and the maximum address of the range. + + @param ip1 The first IP address. + @param subnetmask1 The subnet mask of the first IP address. + @param ip2 The second IP address. + @param subnetmask2 The subnet mask of the second IP address. + @return A array with two elements. The first/second element contains the + min and max IP address of the first/second IP address and its + subnet mask. + + + Checks if the IP ip is included in the permitted ISet + permitted. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is not permitted. + + + Checks if the IP ip is included in the excluded ISet + excluded. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is excluded. + + + Checks if the IP address ip is constrained by + constraint. + + @param ip The IP address. + @param constraint The constraint. This is an IP address concatenated with + its subnetmask. + @return true if constrained, false + otherwise. + + + The common part of email1 and email2 is + added to the union union. If email1 and + email2 have nothing in common they are added both. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param union The union. + + + The most restricting part from email1 and + email2 is added to the intersection intersect. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param intersect The intersection. + + + Checks if the given GeneralName is in the permitted ISet. + + @param name The GeneralName + @throws PkixNameConstraintValidatorException + If the name + + + Check if the given GeneralName is contained in the excluded ISet. + + @param name The GeneralName. + @throws PkixNameConstraintValidatorException + If the name is + excluded. + + + Updates the permitted ISet of these name constraints with the intersection + with the given subtree. + + @param permitted The permitted subtrees + + + Adds a subtree to the excluded ISet of these name constraints. + + @param subtree A subtree with an excluded GeneralName. + + + Returns the maximum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The maximum IP address. + + + Returns the minimum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The minimum IP address. + + + Compares IP address ip1 with ip2. If ip1 + is equal to ip2 0 is returned. If ip1 is bigger 1 is returned, -1 + otherwise. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return 0 if ip1 is equal to ip2, 1 if ip1 is bigger, -1 otherwise. + + + Returns the logical OR of the IP addresses ip1 and + ip2. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The OR of ip1 and ip2. + + + Stringifies an IPv4 or v6 address with subnet mask. + + @param ip The IP with subnet mask. + @return The stringified IP address. + + + + Summary description for PkixParameters. + + + + This is the default PKIX validity model. Actually there are two variants + of this: The PKIX model and the modified PKIX model. The PKIX model + verifies that all involved certificates must have been valid at the + current time. The modified PKIX model verifies that all involved + certificates were valid at the signing time. Both are indirectly choosen + with the {@link PKIXParameters#setDate(java.util.Date)} method, so this + methods sets the Date when all certificates must have been + valid. + + + This model uses the following validity model. Each certificate must have + been valid at the moment where is was used. That means the end + certificate must have been valid at the time the signature was done. The + CA certificate which signed the end certificate must have been valid, + when the end certificate was signed. The CA (or Root CA) certificate must + have been valid, when the CA certificate was signed and so on. So the + {@link PKIXParameters#setDate(java.util.Date)} method sets the time, when + the end certificate must have been valid.

    It is used e.g. + in the German signature law. + + + Creates an instance of PKIXParameters with the specified Set of + most-trusted CAs. Each element of the set is a TrustAnchor.
    +
    + Note that the Set is copied to protect against subsequent modifications. + + @param trustAnchors + a Set of TrustAnchors + + @exception InvalidAlgorithmParameterException + if the specified Set is empty + (trustAnchors.isEmpty() == true) + @exception NullPointerException + if the specified Set is null + @exception ClassCastException + if any of the elements in the Set are not of type + java.security.cert.TrustAnchor +
    + + Returns the required constraints on the target certificate. The + constraints are returned as an instance of CertSelector. If + null, no constraints are defined.
    +
    + Note that the CertSelector returned is cloned to protect against + subsequent modifications. + + @return a CertSelector specifying the constraints on the target + certificate (or null) + + @see #setTargetCertConstraints(CertSelector) +
    + + Sets the required constraints on the target certificate. The constraints + are specified as an instance of CertSelector. If null, no constraints are + defined.
    +
    + Note that the CertSelector specified is cloned to protect against + subsequent modifications. + + @param selector + a CertSelector specifying the constraints on the target + certificate (or null) + + @see #getTargetCertConstraints() +
    + + Returns an immutable Set of initial policy identifiers (OID strings), + indicating that any one of these policies would be acceptable to the + certificate user for the purposes of certification path processing. The + default return value is an empty Set, which is + interpreted as meaning that any policy would be acceptable. + + @return an immutable Set of initial policy OIDs in String + format, or an empty Set (implying any policy is + acceptable). Never returns null. + + @see #setInitialPolicies(java.util.Set) + + + Sets the Set of initial policy identifiers (OID strings), + indicating that any one of these policies would be acceptable to the + certificate user for the purposes of certification path processing. By + default, any policy is acceptable (i.e. all policies), so a user that + wants to allow any policy as acceptable does not need to call this + method, or can call it with an empty Set (or + null).
    +
    + Note that the Set is copied to protect against subsequent modifications.
    +
    + + @param initialPolicies + a Set of initial policy OIDs in String format (or + null) + + @exception ClassCastException + if any of the elements in the set are not of type String + + @see #getInitialPolicies() +
    + + Sets a List of additional certification path checkers. If + the specified List contains an object that is not a PKIXCertPathChecker, + it is ignored.
    +
    + Each PKIXCertPathChecker specified implements additional + checks on a certificate. Typically, these are checks to process and + verify private extensions contained in certificates. Each + PKIXCertPathChecker should be instantiated with any + initialization parameters needed to execute the check.
    +
    + This method allows sophisticated applications to extend a PKIX + CertPathValidator or CertPathBuilder. Each + of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + CertPathValidator or CertPathBuilder for + each certificate processed or validated.
    +
    + Regardless of whether these additional PKIXCertPathCheckers are set, a + PKIX CertPathValidator or CertPathBuilder + must perform all of the required PKIX checks on each certificate. The one + exception to this rule is if the RevocationEnabled flag is set to false + (see the {@link #setRevocationEnabled(boolean) setRevocationEnabled} + method).
    +
    + Note that the List supplied here is copied and each PKIXCertPathChecker + in the list is cloned to protect against subsequent modifications. + + @param checkers + a List of PKIXCertPathCheckers. May be null, in which case no + additional checkers will be used. + @exception ClassCastException + if any of the elements in the list are not of type + java.security.cert.PKIXCertPathChecker + @see #getCertPathCheckers() +
    + + Returns the List of certification path checkers. Each PKIXCertPathChecker + in the returned IList is cloned to protect against subsequent modifications. + + @return an immutable List of PKIXCertPathCheckers (may be empty, but not + null) + + @see #setCertPathCheckers(java.util.List) + + + Adds a PKIXCertPathChecker to the list of certification + path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + method for more details. +

    + Note that the PKIXCertPathChecker is cloned to protect + against subsequent modifications.

    + + @param checker a PKIXCertPathChecker to add to the list of + checks. If null, the checker is ignored (not added to list). +
    + + Method to support Clone() under J2ME. + super.Clone() does not exist and fields are not copied. + + @param params Parameters to set. If this are + ExtendedPkixParameters they are copied to. + + + Whether delta CRLs should be used for checking the revocation status. + Defaults to false. + + + The validity model. + @see #CHAIN_VALIDITY_MODEL + @see #PKIX_VALIDITY_MODEL + + + Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute + certificates or cross certificates. +

    + The IList is cloned. +

    + + @param stores A list of stores to use. + @see #getStores + @throws ClassCastException if an element of stores is not + a {@link Store}. +
    + + Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute + certificates or cross certificates. +

    + This method should be used to add local stores, like collection based + X.509 stores, if available. Local stores should be considered first, + before trying to use additional (remote) locations, because they do not + need possible additional network traffic. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores +
    + + Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates, + attribute certificates or cross certificates. +

    + You should not use this method. This method is used for adding additional + X.509 stores, which are used to add (remote) locations, e.g. LDAP, found + during X.509 object processing, e.g. in certificates or CRLs. This method + is used in PKIX certification path processing. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores() +
    + + Returns an IList of additional Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of additional Bouncy Castle + Stores. Never null. + + @see #addAddionalStore(Store) + + + Returns an IList of Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of Bouncy Castle + Stores. Never null. + + @see #setStores(IList) + + + Returns if additional {@link X509Store}s for locations like LDAP found + in certificates or CRLs should be used. + + @return Returns true if additional stores are used. + + + Sets if additional {@link X509Store}s for locations like LDAP found in + certificates or CRLs should be used. + + @param enabled true if additional stores are used. + + + Returns the required constraints on the target certificate or attribute + certificate. The constraints are returned as an instance of + IX509Selector. If null, no constraints are + defined. + +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector returned is cloned to protect + against subsequent modifications. +

    + @return a IX509Selector specifying the constraints on the + target certificate or attribute certificate (or null) + @see #setTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Sets the required constraints on the target certificate or attribute + certificate. The constraints are specified as an instance of + IX509Selector. If null, no constraints are + defined. +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector specified is cloned to protect + against subsequent modifications. +

    + + @param selector a IX509Selector specifying the constraints on + the target certificate or attribute certificate (or + null) + @see #getTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Returns the trusted attribute certificate issuers. If attribute + certificates is verified the trusted AC issuers must be set. +

    + The returned ISet consists of TrustAnchors. +

    + The returned ISet is immutable. Never null +

    + + @return Returns an immutable set of the trusted AC issuers. +
    + + Sets the trusted attribute certificate issuers. If attribute certificates + is verified the trusted AC issuers must be set. +

    + The trustedACIssuers must be a ISet of + TrustAnchor +

    + The given set is cloned. +

    + + @param trustedACIssuers The trusted AC issuers to set. Is never + null. + @throws ClassCastException if an element of stores is not + a TrustAnchor. +
    + + Returns the necessary attributes which must be contained in an attribute + certificate. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the necessary AC attributes. +
    + + Sets the necessary which must be contained in an attribute certificate. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param necessaryACAttributes The necessary AC attributes to set. + @throws ClassCastException if an element of + necessaryACAttributes is not a + String. +
    + + Returns the attribute certificates which are not allowed. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the prohibited AC attributes. Is never null. +
    + + Sets the attribute certificates which are not allowed. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param prohibitedACAttributes The prohibited AC attributes to set. + @throws ClassCastException if an element of + prohibitedACAttributes is not a + String. +
    + + Returns the attribute certificate checker. The returned set contains + {@link PKIXAttrCertChecker}s and is immutable. + + @return Returns the attribute certificate checker. Is never + null. + + + Sets the attribute certificate checkers. +

    + All elements in the ISet must a {@link PKIXAttrCertChecker}. +

    +

    + The given set is cloned. +

    + + @param attrCertCheckers The attribute certificate checkers to set. Is + never null. + @throws ClassCastException if an element of attrCertCheckers + is not a PKIXAttrCertChecker. +
    + + + Summary description for PkixPolicyNode. + + + + Constructors + + + + This class helps to handle CRL revocation reasons mask. Each CRL handles a + certain set of revocation reasons. + + + + + Constructs are reason mask with the reasons. + + The reasons. + + + + A reason mask with no reason. + + + + + A mask with all revocation reasons. + + + + Adds all reasons from the reasons mask to this mask. + + @param mask The reasons mask to add. + + + + Returns true if this reasons mask contains all possible + reasons. + + true if this reasons mask contains all possible reasons. + + + + + Intersects this mask with the given reasons mask. + + mask The mask to intersect with. + The intersection of this and teh given mask. + + + + Returns true if the passed reasons mask has new reasons. + + The reasons mask which should be tested for new reasons. + true if the passed reasons mask has new reasons. + + + + Returns the reasons in this mask. + + + + If the complete CRL includes an issuing distribution point (IDP) CRL + extension check the following: +

    + (i) If the distribution point name is present in the IDP CRL extension + and the distribution field is present in the DP, then verify that one of + the names in the IDP matches one of the names in the DP. If the + distribution point name is present in the IDP CRL extension and the + distribution field is omitted from the DP, then verify that one of the + names in the IDP matches one of the names in the cRLIssuer field of the + DP. +

    +

    + (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + extension, verify that the certificate does not include the basic + constraints extension with the cA boolean asserted. +

    +

    + (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + extension, verify that the certificate includes the basic constraints + extension with the cA boolean asserted. +

    +

    + (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. +

    + + @param dp The distribution point. + @param cert The certificate. + @param crl The CRL. + @throws AnnotatedException if one of the conditions is not met or an error occurs. +
    + + If the DP includes cRLIssuer, then verify that the issuer field in the + complete CRL matches cRLIssuer in the DP and that the complete CRL + contains an + g distribution point extension with the indirectCRL + boolean asserted. Otherwise, verify that the CRL issuer matches the + certificate issuer. + + @param dp The distribution point. + @param cert The certificate ot attribute certificate. + @param crl The CRL for cert. + @throws AnnotatedException if one of the above conditions does not apply or an error + occurs. + + + Obtain and validate the certification path for the complete CRL issuer. + If a key usage extension is present in the CRL issuer's certificate, + verify that the cRLSign bit is set. + + @param crl CRL which contains revocation information for the certificate + cert. + @param cert The attribute certificate or certificate to check if it is + revoked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param paramsPKIX paramsPKIX PKIX parameters. + @param certPathCerts The certificates on the certification path. + @return A Set with all keys of possible CRL issuer + certificates. + @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + some error occurs. + + + Checks a distribution point for revocation information for the + certificate cert. + + @param dp The distribution point to consider. + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param certStatus The current certificate revocation status. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + Checks a certificate if it is revoked. + + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param sign The issuer certificate of the certificate cert. + @param workingPublicKey The public key of the issuer certificate sign. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + If use-deltas is set, verify the issuer and scope of the delta CRL. + + @param deltaCRL The delta CRL. + @param completeCRL The complete CRL. + @param pkixParams The PKIX paramaters. + @throws AnnotatedException if an exception occurs. + + + Checks if an attribute certificate is revoked. + + @param attrCert Attribute certificate to check if it is revoked. + @param paramsPKIX PKIX parameters. + @param issuerCert The issuer certificate of the attribute certificate + attrCert. + @param validDate The date when the certificate revocation status should + be checked. + @param certPathCerts The certificates of the certification path to be + checked. + + @throws CertPathValidatorException if the certificate is revoked or the + status cannot be checked or some error occurs. + + + Searches for a holder public key certificate and verifies its + certification path. + + @param attrCert the attribute certificate. + @param pkixParams The PKIX parameters. + @return The certificate path of the holder certificate. + @throws Exception if +
      +
    • no public key certificate can be found although holder + information is given by an entity name or a base certificate + ID
    • +
    • support classes cannot be created
    • +
    • no certification path for the public key certificate can + be built
    • +
    +
    + + + Checks a distribution point for revocation information for the + certificate attrCert. + + @param dp The distribution point to consider. + @param attrCert The attribute certificate which should be checked. + @param paramsPKIX PKIX parameters. + @param validDate The date when the certificate revocation status should + be checked. + @param issuerCert Certificate to check if it is revoked. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path to be + checked. + @throws Exception if the certificate is revoked or the status + cannot be checked or some error occurs. + + + + A trust anchor or most-trusted Certification Authority (CA). + + This class represents a "most-trusted CA", which is used as a trust anchor + for validating X.509 certification paths. A most-trusted CA includes the + public key of the CA, the CA's name, and any constraints upon the set of + paths which may be validated using this key. These parameters can be + specified in the form of a trusted X509Certificate or as individual + parameters. + + + + + Creates an instance of TrustAnchor with the specified X509Certificate and + optional name constraints, which are intended to be used as additional + constraints when validating an X.509 certification path. + The name constraints are specified as a byte array. This byte array + should contain the DER encoded form of the name constraints, as they + would appear in the NameConstraints structure defined in RFC 2459 and + X.509. The ASN.1 definition of this structure appears below. + +
    +            	NameConstraints ::= SEQUENCE {
    +            		permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
    +            		excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }
    +            	   
    +             GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
    +             
    +            		GeneralSubtree ::= SEQUENCE {
    +            		base                    GeneralName,
    +            		minimum         [0]     BaseDistance DEFAULT 0,
    +            		maximum         [1]     BaseDistance OPTIONAL }
    +            		
    +            		BaseDistance ::= INTEGER (0..MAX)
    +            
    +            		GeneralName ::= CHOICE {
    +            		otherName                       [0]     OtherName,
    +            		rfc822Name                      [1]     IA5String,
    +            		dNSName                         [2]     IA5String,
    +            		x400Address                     [3]     ORAddress,
    +            		directoryName                   [4]     Name,
    +            		ediPartyName                    [5]     EDIPartyName,
    +            		uniformResourceIdentifier       [6]     IA5String,
    +            		iPAddress                       [7]     OCTET STRING,
    +            		registeredID                    [8]     OBJECT IDENTIFIER}
    +            	
    + + Note that the name constraints byte array supplied is cloned to protect + against subsequent modifications. +
    + a trusted X509Certificate + a byte array containing the ASN.1 DER encoding of a + NameConstraints extension to be used for checking name + constraints. Only the value of the extension is included, not + the OID or criticality flag. Specify null to omit the + parameter. + if the specified X509Certificate is null +
    + + + Creates an instance of TrustAnchor where the + most-trusted CA is specified as an X500Principal and public key. + + +

    + Name constraints are an optional parameter, and are intended to be used + as additional constraints when validating an X.509 certification path. +

    + The name constraints are specified as a byte array. This byte array + contains the DER encoded form of the name constraints, as they + would appear in the NameConstraints structure defined in RFC 2459 + and X.509. The ASN.1 notation for this structure is supplied in the + documentation for the other constructors. +

    + Note that the name constraints byte array supplied here is cloned to + protect against subsequent modifications. +

    +
    + the name of the most-trusted CA as X509Name + the public key of the most-trusted CA + + a byte array containing the ASN.1 DER encoding of a NameConstraints extension to + be used for checking name constraints. Only the value of the extension is included, + not the OID or criticality flag. Specify null to omit the parameter. + + + if caPrincipal or pubKey is null + +
    + + + Creates an instance of TrustAnchor where the most-trusted + CA is specified as a distinguished name and public key. Name constraints + are an optional parameter, and are intended to be used as additional + constraints when validating an X.509 certification path. +
    + The name constraints are specified as a byte array. This byte array + contains the DER encoded form of the name constraints, as they would + appear in the NameConstraints structure defined in RFC 2459 and X.509. +
    + the X.500 distinguished name of the most-trusted CA in RFC + 2253 string format + the public key of the most-trusted CA + a byte array containing the ASN.1 DER encoding of a + NameConstraints extension to be used for checking name + constraints. Only the value of the extension is included, not + the OID or criticality flag. Specify null to omit the + parameter. + throws NullPointerException, IllegalArgumentException +
    + + + Returns the most-trusted CA certificate. + + + + + Returns the name of the most-trusted CA as an X509Name. + + + + + Returns the name of the most-trusted CA in RFC 2253 string format. + + + + + Returns the public key of the most-trusted CA. + + + + + Decode the name constraints and clone them if not null. + + + + + Returns a formatted string describing the TrustAnchor. + + a formatted string describing the TrustAnchor + + + Recognised hash algorithms for the time stamp protocol. + + + Fetches the signature time-stamp attributes from a SignerInformation object. + Checks that the MessageImprint for each time-stamp matches the signature field. + (see RFC 3161 Appendix A). + + @param signerInfo a SignerInformation to search for time-stamps + @return a collection of TimeStampToken objects + @throws TSPValidationException + + + Validate the passed in certificate as being of the correct type to be used + for time stamping. To be valid it must have an ExtendedKeyUsage extension + which has a key purpose identifier of id-kp-timeStamping. + + @param cert the certificate of interest. + @throws TspValidationException if the certicate fails on one of the check points. + + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Exception thrown if a TSP request or response fails to validate. +

    + If a failure code is associated with the exception it can be retrieved using + the getFailureCode() method.

    +
    + + Return the failure code associated with this exception - if one is set. + + @return the failure code if set, -1 otherwise. + + + Base class for an RFC 3161 Time Stamp Request. + + + Create a TimeStampRequest from the past in byte array. + + @param req byte array containing the request. + @throws IOException if the request is malformed. + + + Create a TimeStampRequest from the past in input stream. + + @param in input stream containing the request. + @throws IOException if the request is malformed. + + + Validate the timestamp request, checking the digest to see if it is of an + accepted type and whether it is of the correct length for the algorithm specified. + + @param algorithms a set of string OIDS giving accepted algorithms. + @param policies if non-null a set of policies we are willing to sign under. + @param extensions if non-null a set of extensions we are willing to accept. + @throws TspException if the request is invalid, or processing fails. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Request objects. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + Base class for an RFC 3161 Time Stamp Response object. + + + Create a TimeStampResponse from a byte array containing an ASN.1 encoding. + + @param resp the byte array containing the encoded response. + @throws TspException if the response is malformed. + @throws IOException if the byte array doesn't represent an ASN.1 encoding. + + + Create a TimeStampResponse from an input stream containing an ASN.1 encoding. + + @param input the input stream containing the encoded response. + @throws TspException if the response is malformed. + @throws IOException if the stream doesn't represent an ASN.1 encoding. + + + Check this response against to see if it a well formed response for + the passed in request. Validation will include checking the time stamp + token if the response status is GRANTED or GRANTED_WITH_MODS. + + @param request the request to be checked against + @throws TspException if the request can not match this response. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Responses. + + + Return an appropriate TimeStampResponse. +

    + If genTime is null a timeNotAvailable error response will be returned. + + @param request the request this response is for. + @param serialNumber serial number for the response token. + @param genTime generation time for the response token. + @param provider provider to use for signature calculation. + @return + @throws NoSuchAlgorithmException + @throws NoSuchProviderException + @throws TSPException +

    +
    + + Generate a TimeStampResponse with chosen status and FailInfoField. + + @param status the PKIStatus to set. + @param failInfoField the FailInfoField to set. + @param statusString an optional string describing the failure. + @return a TimeStampResponse with a failInfoField and optional statusString + @throws TSPException in case the response could not be created + + + Validate the time stamp token. +

    + To be valid the token must be signed by the passed in certificate and + the certificate must be the one referred to by the SigningCertificate + attribute included in the hashed attributes of the token. The + certificate must also have the ExtendedKeyUsageExtension with only + KeyPurposeID.IdKPTimeStamping and have been valid at the time the + timestamp was created. +

    +

    + A successful call to validate means all the above are true. +

    +
    + + Return the underlying CmsSignedData object. + + @return the underlying CMS structure. + + + Return a ASN.1 encoded byte stream representing the encoded object. + + @throws IOException if encoding fails. + + + basic creation - only the default attributes will be included here. + + + create with a signer with extra signed/unsigned attributes. + + + @return the nonce value, null if there isn't one. + + + General array utilities. + + + + Are two arrays equal. + + Left side. + Right side. + True if equal. + + + + A constant time equals comparison - does not terminate early if + test will fail. + + first array + second array + true if arrays equal, false otherwise. + + + Make a copy of a range of bytes from the passed in data array. The range can + extend beyond the end of the input array, in which case the return array will + be padded with zeroes. + + @param data the array from which the data is to be copied. + @param from the start index at which the copying should take place. + @param to the final index of the range (exclusive). + + @return a new byte array containing the range given. + + + BigInteger utilities. + + + Return the passed in value as an unsigned byte array. + + @param value value to be converted. + @return a byte array without a leading zero byte if present in the signed encoding. + + + Return the passed in value as an unsigned byte array of specified length, zero-extended as necessary. + + @param length desired length of result array. + @param n value to be converted. + @return a byte array of specified length, with leading zeroes as necessary given the size of n. + + + Return a random BigInteger not less than 'min' and not greater than 'max' + + @param min the least value that may be generated + @param max the greatest value that may be generated + @param random the source of randomness + @return a random BigInteger value in the range [min,max] + + + + Produce a copy of this object with its configuration and in its current state. + + + The returned object may be used simply to store the state, or may be used as a similar object + starting from the copied state. + + + + + Restore a copied object state into this object. + + + Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + + an object originally {@link #copy() copied} from an object of the same type as this instance. + if the provided object is not of the correct type. + if the other parameter is in some other way invalid. + + + Exception to be thrown on a failure to reset an object implementing Memoable. +

    + The exception extends InvalidCastException to enable users to have a single handling case, + only introducing specific handling of this one if required. +

    +
    + + Basic Constructor. + + @param msg message to be associated with this exception. + + + General string utilities. + + + + Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + + A UTC DateTime value not before epoch. + Number of whole milliseconds after epoch. + 'dateTime' is before epoch. + + + + Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + Number of milliseconds since the epoch. + A UTC DateTime value + + + + Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a base 64 output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A buffering class to allow translation from one format to another to + be done in discrete chunks. + + + + + Create a buffered Decoder. + + The translater to use. + The size of the buffer. + + + + Process one byte of data. + + Data in. + Byte array for the output. + The offset in the output byte array to start writing from. + The amount of output bytes. + + + + Process data from a byte array. + + The input data. + Start position within input data array. + Amount of data to process from input data array. + Array to store output. + Position in output array to start writing from. + The amount of output bytes. + + + + A class that allows encoding of data using a specific encoder to be processed in chunks. + + + + + Create. + + The translator to use. + Size of the chunks. + + + + Process one byte of data. + + The byte. + An array to store output in. + Offset within output array to start writing from. + + + + + Process data from a byte array. + + Input data Byte array containing data to be processed. + Start position within input data array. + Amount of input data to be processed. + Output data array. + Offset within output data array to start writing to. + The amount of data written. + + + + Class to decode and encode Hex. + + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + decode the Hex encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a Hex output stream. + + @return the number of bytes produced. + + + decode the Hex encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A hex translator. + + + + + Return encoded block size. + + 2 + + + + Encode some data. + + Input data array. + Start position within input data array. + The amount of data to process. + The output data array. + The offset within the output data array to start writing from. + Amount of data encoded. + + + + Returns the decoded block size. + + 1 + + + + Decode data from a byte array. + + The input data array. + Start position within input data array. + The amounty of data to process. + The output data array. + The position within the output data array to start writing from. + The amount of data written. + + + Encode and decode byte arrays (typically from binary to 7-bit ASCII + encodings). + + + + Translator interface. + + + + Convert binary data to and from UrlBase64 encoding. This is identical to + Base64 encoding, except that the padding character is "." and the other + non-alphanumeric characters are "-" and "_" instead of "+" and "/". +

    + The purpose of UrlBase64 encoding is to provide a compact encoding of binary + data that is safe for use as an URL parameter. Base64 encoding does not + produce encoded values that are safe for use in URLs, since "/" can be + interpreted as a path delimiter; "+" is the encoded form of a space; and + "=" is used to separate a name from the corresponding value in an URL + parameter. +

    +
    + + Encode the input data producing a URL safe base 64 encoded byte array. + + @return a byte array containing the URL safe base 64 encoded data. + + + Encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Decode the URL safe base 64 encoded input data - white space will be ignored. + + @return a byte array representing the decoded data. + + + decode the URL safe base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the URL safe base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + Decode the URL safe base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + Convert binary data to and from UrlBase64 encoding. This is identical to + Base64 encoding, except that the padding character is "." and the other + non-alphanumeric characters are "-" and "_" instead of "+" and "/". +

    + The purpose of UrlBase64 encoding is to provide a compact encoding of binary + data that is safe for use as an URL parameter. Base64 encoding does not + produce encoded values that are safe for use in URLs, since "/" can be + interpreted as a path delimiter; "+" is the encoded form of a space; and + "=" is used to separate a name from the corresponding value in an URL + parameter. +

    +
    + + + Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + than limit bytes in inStr. + + + A + + + A + + + A + + The number of bytes actually transferred, if not greater than limit + + + + + A + + + + + + A + + + A + + + + + + A + + + + + A generic PEM writer, based on RFC 1421 + + + Base constructor. + + @param out output stream to use. + + + Return the number of bytes or characters required to contain the + passed in object if it is PEM encoded. + + @param obj pem object to be output + @return an estimate of the number of bytes + + + Validate the given IPv4 or IPv6 address. + + @param address the IP address as a string. + + @return true if a valid address, false otherwise + + + Validate the given IPv4 or IPv6 address and netmask. + + @param address the IP address as a string. + + @return true if a valid address with netmask, false otherwise + + + Validate the given IPv4 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + Validate the given IPv6 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + + Summary description for DeflaterOutputStream. + + + + + Summary description for DeflaterOutputStream. + + + + + The Holder object. +
    +            Holder ::= SEQUENCE {
    +            	baseCertificateID   [0] IssuerSerial OPTIONAL,
    +            		-- the issuer and serial number of
    +            		-- the holder's Public Key Certificate
    +            	entityName          [1] GeneralNames OPTIONAL,
    +            		-- the name of the claimant or role
    +            	objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
    +            		-- used to directly authenticate the holder,
    +            		-- for example, an executable
    +            }
    +            
    +
    +
    + + Constructs a holder for v2 attribute certificates with a hash value for + some type of object. +

    + digestedObjectType can be one of the following: +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    +

    This cannot be used if a v1 attribute certificate is used.

    + + @param digestedObjectType The digest object type. + @param digestAlgorithm The algorithm identifier for the hash. + @param otherObjectTypeID The object type ID if + digestedObjectType is + otherObjectDigest. + @param objectDigest The hash value. +
    + + Returns the digest object type if an object digest info is used. +

    +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    + + @return The digest object type or -1 if no object digest info is set. +
    + + Returns the other object type ID if an object digest info is used. + + @return The other object type ID or null if no object + digest info is set. + + + Returns the hash if an object digest info is used. + + @return The hash or null if no object digest info is set. + + + Returns the digest algorithm ID if an object digest info is used. + + @return The digest algorithm ID or null if no object + digest info is set. + + + Return any principal objects inside the attribute certificate holder entity names field. + + @return an array of IPrincipal objects (usually X509Name), null if no entity names field is set. + + + Return the principals associated with the issuer attached to this holder + + @return an array of principals, null if no BaseCertificateID is set. + + + Return the serial number associated with the issuer attached to this holder. + + @return the certificate serial number, null if no BaseCertificateID is set. + + + Carrying class for an attribute certificate issuer. + + + Set the issuer directly with the ASN.1 structure. + + @param issuer The issuer + + + Return any principal objects inside the attribute certificate issuer object. + An array of IPrincipal objects (usually X509Principal). + + + Interface for an X.509 Attribute Certificate. + + + The version number for the certificate. + + + The serial number for the certificate. + + + The UTC DateTime before which the certificate is not valid. + + + The UTC DateTime after which the certificate is not valid. + + + The holder of the certificate. + + + The issuer details for the certificate. + + + Return the attributes contained in the attribute block in the certificate. + An array of attributes. + + + Return the attributes with the same type as the passed in oid. + The object identifier we wish to match. + An array of matched attributes, null if there is no match. + + + Return an ASN.1 encoded byte array representing the attribute certificate. + An ASN.1 encoded byte array. + If the certificate cannot be encoded. + + + + Get all critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + Get all non-critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + A utility class that will extract X509Principal objects from X.509 certificates. +

    + Use this in preference to trying to recreate a principal from a string, not all + DNs are what they should be, so it's best to leave them encoded where they + can be.

    +
    +
    + + Return the issuer of the given cert as an X509Principal. + + + Return the subject of the given cert as an X509Principal. + + + Return the issuer of the given CRL as an X509Principal. + + + + A factory to produce Public Key Info Objects. + + + + + Create a Subject Public Key Info object for a given public key. + + One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + A subject public key info object. + Throw exception if object provided is not one of the above. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + Class for carrying the values in an X.509 Attribute. + + + @param at an object representing an attribute. + + + Create an X.509 Attribute with the type given by the passed in oid and + the value represented by an ASN.1 Set containing value. + + @param oid type of the attribute + @param value value object to go into the atribute's value set. + + + Create an X.59 Attribute with the type given by the passed in oid and the + value represented by an ASN.1 Set containing the objects in value. + + @param oid type of the attribute + @param value vector of values to go in the attribute's value set. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + + An Object representing an X509 Certificate. + Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + + + + + Return true if the current time is within the start and end times nominated on the certificate. + + true id certificate is valid for the current time. + + + + Return true if the nominated time is within the start and end times nominated on the certificate. + + The time to test validity against. + True if certificate is valid for nominated time. + + + + Checks if the current date is within certificate's validity period. + + + + + Checks if the given date is within certificate's validity period. + + if the certificate is expired by given date + if the certificate is not yet valid on given date + + + + Return the certificate's version. + + An integer whose value Equals the version of the cerficate. + + + + Return a BigInteger containing the serial number. + + The Serial number. + + + + Get the Issuer Distinguished Name. (Who signed the certificate.) + + And X509Object containing name and value pairs. + + + + Get the subject of this certificate. + + An X509Name object containing name and value pairs. + + + + The time that this certificate is valid from. + + A DateTime object representing that time in the local time zone. + + + + The time that this certificate is valid up to. + + A DateTime object representing that time in the local time zone. + + + + Return the Der encoded TbsCertificate data. + This is the certificate component less the signature. + To Get the whole certificate call the GetEncoded() member. + + A byte array containing the Der encoded Certificate component. + + + + The signature. + + A byte array containg the signature of the certificate. + + + + A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + + A sting representing the signature algorithm. + + + + Get the Signature Algorithms Object ID. + + A string containg a '.' separated object id. + + + + Get the signature algorithms parameters. (EG DSA Parameters) + + A byte array containing the Der encoded version of the parameters or null if there are none. + + + + Get the issuers UID. + + A DerBitString. + + + + Get the subjects UID. + + A DerBitString. + + + + Get a key usage guidlines. + + + + + Get the public key of the subject of the certificate. + + The public key parameters. + + + + Return a Der encoded version of this certificate. + + A byte array. + + + + Verify the certificate's signature using the nominated public key. + + An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + True if the signature is valid. + If key submitted is not of the above nominated types. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + + This class contains a cross certificate pair. Cross certificates pairs may + contain two cross signed certificates from two CAs. A certificate from the + other CA to this CA is contained in the forward certificate, the certificate + from this CA to the other CA is contained in the reverse certificate. + + + + Constructor + Certificate from the other CA to this CA. + Certificate from this CA to the other CA. + + + Constructor from a ASN.1 CertificatePair structure. + The CertificatePair ASN.1 object. + + + Returns the certificate from the other CA to this CA. + + + Returns the certificate from this CA to the other CA. + + + class for dealing with X509 certificates. +

    + At the moment this will deal with "-----BEGIN CERTIFICATE-----" to "-----END CERTIFICATE-----" + base 64 encoded certs, as well as the BER binaries of certificates and some classes of PKCS#7 + objects.

    +
    + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + The following extensions are listed in RFC 2459 as relevant to CRLs + + Authority Key Identifier + Issuer Alternative Name + CRL Number + Delta CRL Indicator (critical) + Issuing Distribution Point (critical) + + + + Verify the CRL's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the CRL's signature. + True if the signature is valid. + If verifier provider is not appropriate or the CRL algorithm is invalid. + + + Returns a string representation of this CRL. + + @return a string representation of this CRL. + + + Checks whether the given certificate is on this CRL. + + @param cert the certificate to check for. + @return true if the given certificate is on this CRL, + false otherwise. + + + The following extensions are listed in RFC 2459 as relevant to CRL Entries + + ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + (critical) + + + Constructor for CRLEntries of indirect CRLs. If isIndirect + is false {@link #getCertificateIssuer()} will always + return null, previousCertificateIssuer is + ignored. If this isIndirect is specified and this CrlEntry + has no certificate issuer CRL entry extension + previousCertificateIssuer is returned by + {@link #getCertificateIssuer()}. + + @param c + TbsCertificateList.CrlEntry object. + @param isIndirect + true if the corresponding CRL is a indirect + CRL. + @param previousCertificateIssuer + Certificate issuer of the previous CrlEntry. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate revocation list (CRL) object and initializes + it with the data read from the input stream inStream. + + + Returns a (possibly empty) collection view of the CRLs read from + the given input stream inStream. + + The inStream may contain a sequence of DER-encoded CRLs, or + a PKCS#7 CRL set. This is a PKCS#7 SignedData object, with the + only significant field being crls. In particular the signature + and the contents are ignored. + + + + Get non critical extensions. + + A set of non critical extension oids. + + + + Get any critical extensions. + + A sorted list of critical entension. + + + + Get the value of a given extension. + + The object ID of the extension. + An Asn1OctetString object if that extension is found or null if not. + + + A holding class for constructing an X509 Key Usage extension. + +
    +                id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
    +            
    +                KeyUsage ::= BIT STRING {
    +                     digitalSignature        (0),
    +                     nonRepudiation          (1),
    +                     keyEncipherment         (2),
    +                     dataEncipherment        (3),
    +                     keyAgreement            (4),
    +                     keyCertSign             (5),
    +                     cRLSign                 (6),
    +                     encipherOnly            (7),
    +                     decipherOnly            (8) }
    +             
    +
    + + Basic constructor. + + @param usage - the bitwise OR of the Key Usage flags giving the + allowed uses for the key. + e.g. (X509KeyUsage.keyEncipherment | X509KeyUsage.dataEncipherment) + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Class to Generate X509V1 Certificates. + + + + + Default Constructor. + + + + + Reset the generator. + + + + + Set the certificate's serial number. + + Make serial numbers long, if you have no serial number policy make sure the number is at least 16 bytes of secure random data. + You will be surprised how ugly a serial number collision can get. + The serial number. + + + + Set the issuer distinguished name. + The issuer is the entity whose private key is used to sign the certificate. + + The issuers DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the subject distinguished name. + The subject describes the entity associated with the public key. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + This can be either a name or an OID, names are treated as case insensitive. + + string representation of the algorithm name + + + + Generate a new X509Certificate. + + The private key of the issuer used to sign this certificate. + An X509Certificate. + + + + Generate a new X509Certificate specifying a SecureRandom instance that you would like to use. + + The private key of the issuer used to sign this certificate. + The Secure Random you want to use. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + An implementation of a version 2 X.509 Attribute Certificate. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + Class to produce an X.509 Version 2 AttributeCertificate. + + + Reset the generator + + + Set the Holder of this Attribute Certificate. + + + Set the issuer. + + + Set the serial number for the certificate. + + + + Set the signature algorithm. This can be either a name or an OID, names + are treated as case insensitive. + + The algorithm name. + + + Add an attribute. + + + Add a given extension field for the standard extensions tag. + + + + Add a given extension field for the standard extensions tag. + The value parameter becomes the contents of the octet string associated + with the extension. + + + + + Generate an X509 certificate, based on the current issuer and subject. + + + + + Generate an X509 certificate, based on the current issuer and subject, + using the supplied source of randomness, if required. + + + + + Generate a new X.509 Attribute Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An IX509AttributeCertificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + class to produce an X.509 Version 2 CRL. + + + reset the generator + + + Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + certificate. + + + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + Add a CRL entry with an Invalidity Date extension as well as a CrlReason extension. + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + Add a CRL entry with extensions. + + + + Add the CRLEntry objects contained in a previous CRL. + + @param other the X509Crl to source the other entries from. + + + + Set the signature algorithm that will be used to sign this CRL. + + + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + + Generate an X.509 CRL, based on the current issuer and subject. + + The private key of the issuer that is signing this certificate. + An X509Crl. + + + + Generate an X.509 CRL, based on the current issuer and subject using the specified secure random. + + The private key of the issuer that is signing this certificate. + Your Secure Random instance. + An X509Crl. + + + + Generate a new X509Crl using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Crl. + + + + Allows enumeration of the signature names supported by the generator. + + + + + A class to Generate Version 3 X509Certificates. + + + + + Reset the Generator. + + + + + Set the certificate's serial number. + + Make serial numbers long, if you have no serial number policy make sure the number is at least 16 bytes of secure random data. + You will be surprised how ugly a serial number collision can Get. + The serial number. + + + + Set the distinguished name of the issuer. + The issuer is the entity which is signing the certificate. + + The issuer's DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the DN of the entity that this certificate is about. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + + + + + + Set the subject unique ID - note: it is very rare that it is correct to do this. + + + + + + Set the issuer unique ID - note: it is very rare that it is correct to do this. + + + + + + Add a given extension field for the standard extensions tag (tag 3). + + string containing a dotted decimal Object Identifier. + Is it critical. + The value. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + The value. + + + + Add an extension using a string with a dotted decimal OID. + + string containing a dotted decimal Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add a given extension field for the standard extensions tag (tag 3), + copying the extension value from another certificate. + + + + add a given extension field for the standard extensions tag (tag 3) + copying the extension value from another certificate. + @throws CertificateParsingException if the extension cannot be extracted. + + + + Generate an X509Certificate. + + The private key of the issuer that is signing this certificate. + An X509Certificate. + + + + Generate an X509Certificate using your own SecureRandom. + + The private key of the issuer that is signing this certificate. + You Secure Random instance. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + A high level authority key identifier. + + + Constructor which will take the byte[] returned from getExtensionValue() + + @param encodedValue a DER octet encoded string with the extension structure in it. + @throws IOException on parsing errors. + + + Create an AuthorityKeyIdentifier using the passed in certificate's public + key, issuer and serial number. + + @param certificate the certificate providing the information. + @throws CertificateParsingException if there is a problem processing the certificate + + + Create an AuthorityKeyIdentifier using just the hash of the + public key. + + @param pubKey the key to generate the hash from. + @throws InvalidKeyException if there is a problem using the key. + + + A high level subject key identifier. + + + Constructor which will take the byte[] returned from getExtensionValue() + + @param encodedValue a DER octet encoded string with the extension structure in it. + @throws IOException on parsing errors. + + + This class is an Selector like implementation to select + attribute certificates from a given set of criteria. + + @see org.bouncycastle.x509.X509AttributeCertificate + @see org.bouncycastle.x509.X509Store + + + + Decides if the given attribute certificate should be selected. + + The attribute certificate to be checked. + true if the object matches this selector. + + + The attribute certificate which must be matched. + If null is given, any will do. + + + The criteria for validity + If null is given any will do. + + + The holder. + If null is given any will do. + + + The issuer. + If null is given any will do. + + + The serial number. + If null is given any will do. + + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + Each attribute certificate may contain a target information extension + limiting the servers where this attribute certificate can be used. If + this extension is not present, the attribute certificate is not targeted + and may be accepted by any server. +

    + + @param name The name as a GeneralName (not null) +
    + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + Each attribute certificate may contain a target information extension + limiting the servers where this attribute certificate can be used. If + this extension is not present, the attribute certificate is not targeted + and may be accepted by any server. +

    + + @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target names criteria. If null is + given any will do. +

    + The collection consists of either GeneralName objects or byte[] arrays representing + DER encoded GeneralName structures. +

    + + @param names A collection of target names. + @throws IOException if a parsing error occurs. + @see #AddTargetName(byte[]) + @see #AddTargetName(GeneralName) +
    + + Gets the target names. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target names + @see #setTargetNames(Collection) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + Each attribute certificate may contain a target information extension + limiting the servers where this attribute certificate can be used. If + this extension is not present, the attribute certificate is not targeted + and may be accepted by any server. +

    + + @param group The group as GeneralName form (not null) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + Each attribute certificate may contain a target information extension + limiting the servers where this attribute certificate can be used. If + this extension is not present, the attribute certificate is not targeted + and may be accepted by any server. +

    + + @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target groups criteria. If null is + given any will do. +

    + The collection consists of GeneralName objects or byte[] + representing DER encoded GeneralNames. +

    + + @param names A collection of target groups. + @throws IOException if a parsing error occurs. + @see #AddTargetGroup(byte[]) + @see #AddTargetGroup(GeneralName) +
    + + Gets the target groups. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target groups. + @see #setTargetGroups(Collection) +
    + + + This class is an IX509Selector implementation to select + certificate pairs, which are e.g. used for cross certificates. The set of + criteria is given from two X509CertStoreSelector objects, + each of which, if present, must match the respective component of a pair. + + + + The certificate pair which is used for testing on equality. + + + The certificate selector for the forward part. + + + The certificate selector for the reverse part. + + + + Decides if the given certificate pair should be selected. If + obj is not a X509CertificatePair, this method + returns false. + + The X509CertificatePair to be tested. + true if the object matches this selector. + + + + An ISet of DerObjectIdentifier objects. + + + + A simple collection backed store. + + + Basic constructor. + + @param collection - initial contents for the store, this is copied. + + + Return the matches in the collection for the passed in selector. + + @param selector the selector to match against. + @return a possibly empty collection of matching objects. + + + This class contains a collection for collection based X509Stores. + + + + Constructor. +

    + The collection is copied. +

    +
    + The collection containing X.509 object types. + If collection is null. +
    + + Returns a copy of the ICollection. + + + Returns a formatted string describing the parameters. + + + + An ICollection of X509Name objects + + + + The attribute certificate being checked. This is not a criterion. + Rather, it is optional information that may help a {@link X509Store} find + CRLs that would be relevant when checking revocation for the specified + attribute certificate. If null is specified, then no such + optional information is provided. + + @param attrCert the IX509AttributeCertificate being checked (or + null) + @see #getAttrCertificateChecking() + + + If true only complete CRLs are returned. Defaults to + false. + + @return true if only complete CRLs are returned. + + + Returns if this selector must match CRLs with the delta CRL indicator + extension set. Defaults to false. + + @return Returns true if only CRLs with the delta CRL + indicator extension are selected. + + + The issuing distribution point. +

    + The issuing distribution point extension is a CRL extension which + identifies the scope and the distribution point of a CRL. The scope + contains among others information about revocation reasons contained in + the CRL. Delta CRLs and complete CRLs must have matching issuing + distribution points.

    +

    + The byte array is cloned to protect against subsequent modifications.

    +

    + You must also enable or disable this criteria with + {@link #setIssuingDistributionPointEnabled(bool)}.

    + + @param issuingDistributionPoint The issuing distribution point to set. + This is the DER encoded OCTET STRING extension value. + @see #getIssuingDistributionPoint() +
    + + Whether the issuing distribution point criteria should be applied. + Defaults to false. +

    + You may also set the issuing distribution point criteria if not a missing + issuing distribution point should be assumed.

    + + @return Returns if the issuing distribution point check is enabled. +
    + + The maximum base CRL number. Defaults to null. + + @return Returns the maximum base CRL number. + @see #setMaxBaseCRLNumber(BigInteger) + + + diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.dll new file mode 100644 index 0000000000000000000000000000000000000000..b1eb902fd5a5362c0cdb558557be853e77a5f600 GIT binary patch literal 22016 zcmeHv3v?V;k#=>@sOKSRq?wWRuw{GXSH`k5v1L1c;3SqM*;f3vWIF~Y_DE_=6OX2q z?it6jNq&hyh}i_<6UZj8fh2f= zxuSRX5N+3dH2aseS9-m@Kzd81R*4Ewf{Ob7Yj92AJAp4zt(0}8HxpQY`8*B?I)8k$ z@omh?|4LUEWfDGHA-9hU6GV+gAxv;T_YhT~Seqeg_Go{|HBnSuxP!pAmbFXe%@cXx zXRiQ2os8Ah8<>0&L`PD#V-Ero-6l{l@ZE`T*=Hl%m9ovO1xD7D?!lL3_2XOi*+{gh z43**p+Z7+yO{WUlxSZ%~Yl$?W65V`pDJERf@4U>@PX*wO)&;undMSVa7b=1j_Up+y zqOk5uLPbOOCt-D?6>K4oO$s1{J%SWKKu9P-QUC#?RRk%3Q0)<<07AqgNa6c#-%UyA zX6Ow`bYlERe% z!$Q!73rwyGw)^X=&t0hpEyRGKMi8`MQ$r0SXu(c~8cWcEMGQ5dpoOs;YD7T`bHR`y zHB_IgGTIEonu{L3UEdmN)ljEXjKZh37T8=v1mk+}jNf^pF7Z2MXhFl}Lf}5^m5}k{?+#Sqa zC;fbz?dK+Xy}(;nsQ(D+6t_1J)Z*s$UTeIG8Nq zP#xaVi3*^N_D2-GDFAG?{er@h7-X0= zG+JE+jhG<{hV@hICJUZHAj7ZWwl#`0rD7v0d=`9VoLgIESLrksw9sWZDef0zC+y2W zHtcr*CO2^%Y-hCE?_^wxp50GT7>4Hb9MzLu5MUcVx2Xdi zjj&`zI8OT)jEYMn1dP&9D|KfJdb=JO+pnKu7!a#iTR~NX`L$MW z5eX!(K-t0sc55+fVKT$n&g304lXn)$4c0D{TQ}RO3TVW`QZ8(Lhnt0xyHW4#0k|G{ z$gewaMfiH8b3gLFpE_XS5XM{|uhdU5b#c5ZR+-!jCjAsQu=-H+i8tca(dr)X^FkqO z{<2_wcv($Dcv+==6S{Z$!Ftjs>D=0fay+tDLqx_R$^F1810@40lOSaqRl(!|RJI3$ zvhuWFrWUezO|+)oei%~ki`Fy*EKZszHQGN`q^2OS*>=Pbh9vfBDnkX6$aBV$a|^5O zRj5-9?Fke^YI+^?IL~E*Nu)f3C%<9~SXlcE=Z)Zq8&QPkn^1}xasRo+@qm5PRB_S3 z`SO~S!CYBUzk_^dScf132Dl2B_5b#v`S#3HZNBkj∋wP;m~Ke<>X&H^*Eg__ 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 S90q$2{)dh~eg5}Z;J*Q1@Bo|u literal 0 HcmV?d00001 diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.dll.config b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.dll.config new file mode 100644 index 00000000..bd80214e --- /dev/null +++ b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.dll.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.pdb b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/ExchangeDkimSigner.pdb new file mode 100644 index 0000000000000000000000000000000000000000..6d30adfdee40b57e0882c7b45fc6327db5b00e7c GIT binary patch literal 48640 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 K zebKVIriCr_7_EdO%Wg{0LfQ(xuRe4X*{w_T_Qeyau6VM>pSB<5{@?h1`+v1Z$+Nis zXWxAp?)^XQF*MocH@-V}Y5JPJQLx5zI_uYq#@$E%#|$&Uby0IIa*YW2BouPvWG6gr zqx!|^Eaf)}#ObV}{2B_mY3jRPRW=HHD-%=}eWT0&7FKSYeuLqh0(|-ng*OYt=^H}w zwJ7AKsdFM9v{A2KZ^v-Fa{PZqqjjckzI_O={LTTz<6km2vqhur( zz5io1V}{?y>D`f1-4Js5^sY#uG=EIoa?57?YwnVLh!KI_;Zn}tKGAP2Y1}FJXTm3& zUR46eNc#9_%5f59D1)>AKk>E#p9TI6(C^UR4tx*bFkEmk@JXP6pSzH|Ez9(3%Q8c( z=_P;VF{SCvsbfwkt8ha|t$@`td?`6Q<`@!;Cx*bB&tp2s7PCgg5c1Ag25q5bP}366 zxVi^f5Hsty>2I{#48Z?;8pqKzq!bt(#ZX8B_teyteDeQ{lZ!9d{_1aj_KU+8t@+Mv zyZ?CcpGu(H_UN|6w9UO!I$-F#Uj@=WwnU5jf5W-|C%tg+vU$crDWoHc&)>ZgsG@570Du1D zMQl^=@EPp+k6EO%hn}DLU!_u3Ipg_1=T#6TJ`Jf?@p}3#U2IY~)&#wD!PO zaj*B^{t##bWQT76WanNETmf+Y+nhzY3M^ZE0x%JfU-ERI8khm-T+4Vs?<8mqG!?+V zi9g%Ciyl;hrvcM}bAXwE%6~3!9xxkF`OXKl{+J8k4(E$B`d*q{KWP0c7ojAab QaE5D!GqGY?C!7TSKdTLcQ2+n{ literal 0 HcmV?d00001 diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/MimeKit.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU14/MimeKit.dll new file mode 100644 index 0000000000000000000000000000000000000000..8a58db8f417200e02657d58a50307cea7cfa6612 GIT binary patch literal 800768 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%0DXHCd!LSdnAqhy_5`tKbu4xgup~Z#@Cw9+ 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 j(OpCnM)2JM2)wRRf;D7P#}X(x=5oda`m zrF9RK*-|G1I2ewS(GIbkzZZjmDPS*0?K=_fm*q~n9YRt5#X?K$~txz7nm?ffF70S{P4CzYN zj27G)ZYk}Cbl@yWvlLmeO(x~dLMZZJ^+l|uE$RryW0>K$pjx-6YOUzVH6{@_X%z~S z&5bw`)0E1zly*hfy~#$^aNyw|TiOlSwg%dZR@GhrM8K_Hd(r5%3OKWu*{`%3#l7@* zL=c03fbmsK0ox9{bObCy!G_}@WN}owpLp@xqGwG{t1DZn%)m9JE16z2V%QX4iXCC_ zlC2)zuDYu98D=SZY_viOOMBQ_U~XB3+qE`#d?jbfud&uwGRNId*$6C|<1X~vCSv0~ zq?>uDplIn~kT!lKBSjImT(8;i$|hT2yu=PC3+{rfB8m<9|m~3ESBMrD1E}4S^_mi0+Lq+{9KxXa)Wja&tppFsTm*0_yc zV1wzf#q}E6c#l1-aJ?$INO75sV{fiLZ-x=OUpA93>0xe=<>wI-M8!gmb!8kuU3Zsw6aT53k@z3SY^QuuEc|F_XUdLCrhwzXtM z#~79g2b*w_X>3bB)~Gthw&Z?ocMN#%kT}yp59HN}q&1nl3?r<6Ff7F+7BXC#-Op^Rbp#WgDt-4C2j8ci!U{*emq5#d!QJ~mRd zlRo2m#D{qs@?P38X&Xe8gL5|m>3<8k!vt2CfwzmEXXvU~NX?xYe#o8jH2Grgk=h(F)eq@X8)A=i~TLaD2m7G&DEB(C7Cz zhS6zkyuygA1Dn|A?FIUOC}mgL+Kp^#75yCL2>p*igBWQKim2e&k)j}LEXB}YH8pWc zP-3=t`O;~m28@&+&w0RKmUyb|D{kuvzqkUUwPR>wrO9IYtO2i0v!wdcEjkg6BZ;lf zB#r^IcbuRt0#s3v;9J_Sr2ey zEFufzXb9%WViegF!Y&WnYP74iv3LsBB2XUxZ_-iWy~>nA6BfM?Po0jmba^h1 z4s?JbU!i+W6C@}!=7;d@&ga}^P&0WP4wP;%KMj{#y^c_tRS_0F!N}YW-$FHSRU5se z_`M;EipQJ;u9t#2w)AdzwvWk)rtr*`aLMZ!N>aAu92M3S86#eN3gPhj7rC&h`rb!T zCNQ~71`>r=Ycg|=v-V(fnDu^`LWl?*sw`goEyr(f@8{doymJ8e?R}O0xG*&bapYZh zi3RC1J6n)G)oCeirCk@&IoyR5+c7WHJ>m|9GA$!+F4W~!`&+?;(GhnV?XVliglCOS zehr0R5!WK^`3jVidTCo{L4r&hDB&C(l~)ebp9U541LGq6p7DN%LtW(Q9|_>Ty{{ew zJEUs(bE0NMXiD*WVpy8rh~&v@hbo1`9|bM~yB^2fVTyAd`m?^rF(mi3Pu0~vT}1<0 z)Mnos1{%JWU5FQMK>Jt~4QLmmTl3r=Uv&^b(-l;B`Vy#zyaj(8@O$J2p3^{mH0JbE zonp*sv2q71ZGNoyWw@sSQ=UVVyZq|nCp|DCZ*U-!@T?XsBS!upcY-?1heoK{p0}ux zU+o_Kcz~`z8UortdIQ`Ia4Zl)eFs{4L&n)CLl9{ctREOeW#*iOk<%VrR%U5mh~K&R zeHy=u@jDs6oAGF{Pz_ZH@x}^IPT(nsf@VL`gwztaSl>8 zvy|bnFy9seG-|5wRPK2P`ZaYnbtmKlra#);Wx(?+?VM^dA?{91lDzgCLxb;voIV7q zx?2|5gq>9dmMROZof}hHl+8Q96&g@r4_5B-hZL{%Kor<^f-JC9QD6@)p6^+r%pO7z zWp_j6N4_n-6y5_}0*ZWm&JLI*h$JBgmTVRe^M3n4g@b(2eV?64 z6yrsfaRrL;Q(|PHOs%K&M_~4|RQhaYAh$`t`#G&t zkrz8EbKY?erVbggj4Co>7FA?Kue(sOj*+;KhEK+c9-}g{RP?w7Ucn(>^9w%i7pgkt z@`nbNx85^<2lvvM>&>D&Ig6g^_Hq{8Xrot5dQ<7Cesx*pSEjhTygpk{o*SdNE~a}5 z7RlXC>QI=YRI$7i^UIPozOO7N)FcY&VYy*57Ju*Q$_3IjBi|k{p`-WNC=Ey4of)W- zpe-b{u|{Cm(@R@@+Qv|(aYo_2mT6Yv06_^B=QuE|-WmP)u@_%~AD1K61b(!$`9rbZ z*+unb8By|TPK+170~;S=p$5bjT0t;eCk7U17%mqB+thgR!=h)4dScw2sGpg2%6PB4 zx5~-<0;(wE-BeM=vurh3mJwdRA3tBx^f0`EO3Go|tlIT|h0hKDc|Nlze2;uSVKScq zRrw6VbqG~0t-w&_GYlUR8#4Mo%;ys-e1^{BGjtxGp#z^)wC`S?+3h#JXFd-)T4B!Y zS*TqQa2r&q+FoU1Js(9~YI@IcFBWdAmDrzwv6JdjFpm#M^8BA(mk#kO4qU7~K3=>R zst>U)0pj>kK`=-SmgO@TxXGr`H$l`eM<_Z!oN|eIjb@Ae5V!_4=h6}_%24kJ>toOj+6&{0k@fbYa zWAF^NQHpiwg4r;!NAM7DVl3=cR@srRj} zs;;i?uI{cb$X=o_YZwtN$AcsOKklcHo zj+of05#tP}C(myR+^G#tclyNF4md@2*A6(wy1>qV+|YPp!)Aojny$WiDH(TOjmF~w zD3%NShsF~R^7BC}4oq+ixDS>^C}Ym?)kq&h+?@hlIJk2a-Gb8j5f5P4$+}=Pk_{A3 z{_^HdP&~Y6d_j|r$0Tr%$KUwzw}JeP9}Nd@FD^LaRI z6Jr~%BM)Vm6|i(Q0`s|oq2m+Pjv*bKVg|fX!_k*cL;G<2CEtxmVC*aDmxo8z{wRm; zyl~Grk5+DurY6gc`vGpW6y?@Ut^Zzpe-|v?2De}xUD?hOch~;)j@o~#(Uz6FF<)If ze1*!vXa#S#x+#RQjr9F-E-|TM>B}%cZ?r}We|q{EYgG5~yueX4cYn`S)Q~FO1koq? z7V@44?=YSmU|E%(cM_I*=0G3f!f+xZFkrQ5QzeER37Ox2PjjBQVm-IV>m6-ZJwTNl zitC4%|LH$OJpW^xILzfA{nL((0Uw;sU@t_&n1HvDanTVs3k)R}vnVXWkga`DHf`9n zY35-=>eCpO(13Y78d(No{Dr|d{P2l4-49v#GTKI%*IHXmtvjA5O4z+ZtxapYHPqTd!)Mo! zyM=iBH#h9k+U7NC-*v+64`=gt@{cY2I+=&FOh0FUY1q7wal)GrdU$V4$cGW^iWcj) zP4L#3F%9`ddWpQRh1N4u=#qPv2JKO}c!lqo;FDNKp(2r`_f7B?cuXueEKgW8o8T?h zQ|N)U_>AMVg50nZ&WaM*!m|sgE@*L1J~qLp@(G2agvF;Ocnf^0F*od*u=v~rZ}9~M zK0lUN^Ov!f>EJ5mD+Q z1CSebgN1KHcy=1?G2!up3EtyJ3LO#__#U7ayahhHf+hruM3M0cL9|t9euLmsExBQ5 zuwO5}EtspP=i-flFC=-vr;3k&VXtWMz^8IB2YE+J5raOtVLsyH6xx{JQ%F;22a80$ z@cEluJ^SbLl}j#YZPS)o`$Wq49+DS)%6SlaB~r}?_laA4J3#L^Qw0L=RtN~!jkii@ zPwt;+*Bwmo9vvxE(PDyYIh`o*`QUg3olWpAT_|)?}Kj< zn-n2FyD-ePkKTO=$7nBXl2QW%i17-WLC7))Weghi4e1)6THPx3jGomWhQuwVHEa}g|DGu~WRwZsYfB2n35%^v@D`&f?2xd?n&2(QP}n0`nypQVOA}Gq6E=RI9ZTLT zk?J@Te5%_}*c}!skFS*R6szgBz1x>2Q0SUCG~xMSFZgt-D0HHQ@3=85Dt5n?6SPb_UoSfo z3gT{P7n*lq!oK{|DCD%PX;(5og5=$IBjpu5DK|CWs5U= zsL~kKA{<7c82L!#{%~qtT5Cs8D{8I%30kI8oZll!rzVm)iY{#uHFY#CI>+|4jLt** z^6lXma!$*3K9-!@!gb`HiPFw7!I$n3i8?+3LZ*w4J(01wi4A`eV~gUN zI+@WO6S<$u=&5n^JVvJ(?N4k^F~R3%K82iw#i=HEiv<+;>QS7=LKD2jX%r?U%3N=P zw>X_bZelHqOz;+GP)OmuC136{!I`d!?Q|A}ZgIiRra9ktiZgYN2|mGdX+JC8jOQ_W z6VCV(DK4hg6BX~zzRoB2Zs7~aeOh=4xmOEc2+nkm*KiSI`D%zSKm$3y^>xU_)IMo_ zM7e}oXQUeMVoQ|}1fS5QLQcZvY7@N6 zH5A$$ZZoIx0>KRZle$+EN(Z!Tiih*FJW<~3Etu^3Vjkg-U@X4&CFg#&#PmAD>Q1_bReeP=!yvhAkrYBN)zy$B}AccJs77v-=Egq(@ zU&7)M6THQv6lNqW{$hf+_$!6|6BesX@D`6zI3Qv1xC!2(iNe5y#SJVWwJtd4NgScRp~ly0;uiHSg%4XhZlu<=wc|giz2DmIJ8GR< z+kH=MeQUcPs1>!g`;pqPM9cii1Yf>?QYcJV{A_}^_=Q6IgvGBWc#Gd4WQNBZ`*%k^ zZWE33D^L~w#52_v#=T;~L*nRZ6B{6Hf=?ia!gdLZTob%STMCmB7J&)gB9B7ysvECW zc)?rX9SNLfCkl!8B)s4)@U8^2um__c61a=RApPHx-6#pI4Gkw2*Sps-7#h=TkBTUhgw%2L;cmoW)L#_#4GAcvN5B6j{GVzbp5TR`w1D_C$a1Fr$NB9eS0aP z(6gnB+nk)&!UM=fiOdXykeME5W)P`gVg-X~pWotNN`om0gDq%~)B4JE2#xlR(;P~R zPKlZg7=`T;7Ud>*i{TW0ZC%%R%LfBh39k_*c&|zdy;)d))i#nskCxJmBDZZh zo86L}+rnFsL$E)09!(y=1pS3Z)&#%GF%+gHGPSh{-XfwfA+i6BHNjhqqYz-NaSd(* zA+wF|RmU^7Zz2y9Oz{2_DGY{%&vg~J*n9JRweWXTr04CxnM`7P;t9Xj19y{6@X1f1 z&?`~I?M?6&J5b0^SWGp+TkJ?-;RMU#PUOxBkDX2M9=lNJRAC;|z?qZd?XasOZ@U|5 zZX8$b$j9wY+9^@sJt*uP8}I4J8}CKhD`C7hg+1e)Z68uy>^j|%ciopXCyv|Ck&oLS z6n0IN_5c&S#SGdX7kkfi9Z zMQELgv<{_3m=F%5QMcABJe)>{#EBl^$S3+I(xGwOk&b-aQKbD6i62d2-`Kd;kvBeu zw12|*SPJF7E!Pnai#_K!@}9?$4v*uGcjV(vAk9dmdLo4bV&jt>dE=8wGZV&hDeMp% z&vWFBPa*9RH<$UKa3J=}g!ie`(yi-z0li8RMhhuy9`^>P(Ir38J=9ZZ2O;5dI$Z`N zghdnvCxkO7>=@_!Oh-Q7XMw_*i3WPM3Etuy3I`@E&NabXoJV0+!eX%r-r{@;2PG^n zFu_|ap-_{sxX=V|aS?^t35y03yv4;7G6{=IOz;*KgE zTHF@zFu{A>NnvPW&3BpLEmlw%-#Xp9sf}x`{h8V}iFK_s!KZW&g(-=3-D`rkxQ{{! zx3xc2yq`iY2K5qK@&Rg_Cz5&41fR@96nZBt9yY;SJOUvz$Zyw289O;){udLx`Clm% zaeUdIoUAgzTRcXgOY5!rxQr5;zKO!1)(!OuXqnQuyid|1sAyTyQzrNoJx!q?VeyO! z-r`vb9bn;$_Z&F0ecV$%&)D{eP1NY$sC9(q&uU&E_f1sDizfJWyaXY0Vq6<9JMwX> zNhif|uQ>8?Ye?HBR{bi4?PBBC9C_ovld2QOuTz+u5Z<7$MO=Arl6Fr-zeQn4T=KU` z$H%LB$B|#vTG9z|+`Eo^+=i_dA0-1WXN!LQ&;3dJo+ ze8nV&C6f4>28HOo{W>;~+k@jge`A7A@>>cWXyNzfjYx%WbXwLdUJ+b^hweuk$z39*IPM zr!XQRY=RK-P4YMaya?h2pGF%9naVhuX-4;KspcGVJM4PCN^;5RmRfF0&P&vCV1iFS zk3vq1M?N?+JFcX5jO~=@Q41J7GL9}}bgE_b?aAM_T*GuAb856ikvme$B$DhzArD5r z44uhA3wI&sgX20XGQpRjD}~N29^J@YTDUtoFL8^bm_lJit9Y>`cdnh@XDCry+R6oTYL4Vb}V{WpWPC2 z&SBOAZ%&@T9@uAp0EEm|-g+Qo3tAsX2GQW4xNw6V`5csz4vyotaOC5LkR~PyG?YSB zY+UBZ8xJEz3FC4IVdunwakvTI1rs|UuL+A0CU}cV3WW)akrX;WNUUfSwRQ=kElu#r zY(=4CYp>DNIwicaCU~zg6xz4;+M3!XoOHyM5K-Wih_Nu%1fR?}3Y}XzQk{gyL?5j-h_S;e@Y`Lko9XYpUx1U7LPjnQMP4Fp9q3}!Vfu8ND z@r}boRqsIU=hk*psddCr%(uWD$sJmFCvx&RpPfzcYu|-JL1KrT1|c&#uF+i`dE?zk z*+ibIDU6GacX#BC_W*_6TIzmJ^45v&W-k-G$KDkBB=*^TOz;-dDRfC}k9|$>7W+{s zOIYl0g10z;Lb~<2>kMi=5?(V+@LmT($Sg<{eHJakgiDPH-eoq0;+6_Hh)K+kE9+oK z-u4jMrdx0DL#cIX@jr~bV`7bmo8VJ9g2HB~K;InxL@t3xBHu?+JEpaE6t#7@Tj2eU zCV$lW?m;cJiCnuMcRdC|W^5wmV`-SE@%ul7bZG#o#5$FR;akmD~UE^jCCT=UP z`x_p*&e5yOrAOl->p6IKBAA=jll0Dg{Qu~lciw+-#}pNuzYTASrn=)vr-S)AEW9%+bAK%h0 zE-uA=Dt^-*`2jx2JTk9% z#IU?}`EC|<&UBtIrpU!g?nm^xVj2;&pUOc@+x)iq!G0lorgETdP zyUw*|MYYa=bsMxiwyyhP^5JzmYdNd#G%css-J|7hbsuTDLtUHmX*aQM zxRzt;W@|a3ZmE`A)IFkQ|GF=<>{Zv}0@`<}i?nQ4ces{qhUAvz2f1_Vu|?+wu3vHe z7Ov^^mo6iW~2E>8J(Y$y;(sbTL99tB2L)k}!j!!H7EKW5F*w9xBeuFM-ibq0fXqdB zl@&qF=ZiOD5Y%+O|3sFvUn<{u3o)DTtRU>LFc*z22t#_krKonP+*I_Ef{cxxpck8R z5ay@arlNZk1p0EYiN^oP84`Ar>+p3{@P$~>)`4aX#ymSArx7ln6NGJ`yD5A*?+}jy zT*m*~B8=TKHFP42jTh*#%wLG*81RL7k$$tGgVUwB^&j-8U5a0Pz@oH}%>s`Hv;c1F z1A4|=lk;osfJFIsYJaqZvi|rQ$3@j?d{q=viXqSwfu0QXLZBA{=w-E(iDGCXTbjTC zX|X@WsYfbAKjP9YE-n~~8QfqIAQ62ErC;TSA(-J1pJ{~JH*Y$0eQ~8<pjh&wBj(e0AaW8O+llVP8b(+CNcn_*=Y9Hi9>GV`Om@)7V z(&_m>rt_cD#}`Qs(>j*K>*%d@^!~$j^!|Ulj{mfJe(mHx#^KW?ZcfF$kT?FN|21!k zYP`rNqeC3FCkmESu&ER4k`bB%zm9^9#db6W=@)QY^;7x##pN$by`M~{G~mWcD*arY zxGmSuZ#S23rrCr2(ZA&TzozNy*`?Y0-_q>KH2+IJ^ZpO{JP7#=QTCj4DITo}I2~jK zUPNqlbaiJ3g{_L7mn?do&t@Ln%X(l2M>hFkk0kqZ&JxCRS#}D&)KBB#CY=A^At=r` z8kBaTi{_uZ6#EBec;u1cmG+o$w5z zd5+t(lC#*%h~R;$6wgsv7|&!e%(^MX(^vfV z1@rf>*(!K1n=Wn3G*qHuoO<p-fySW2Xsj}3t z>8>oPRDG($5*KD$#ks5cgWQ6ly|F=zi-;evV=ixJy+ZgAu z!#L%jKaX`^EdO84L#SHxTgzIC+gyor&ceV=CD=YcZ^Yoda3R(^Jd@5>bI8{z=D_yD zid${ZA$cyspL)7xk1vn8FFi4!F4F1wuASxMa;;dGH@I3T?SWdy{INQttlgaNr|y;R zp%Z6Jri>YPaK6a12B@V25Q{fqZvf(Y??$RPr??4Ao>Sl>Wd59@pvRE%y8C#J@eZf# zDX+UVCk}HP;JjbkfFGI*wat6+cb?Ln$7D4_*1yiH$OxNPvAk|mBK;kf#OZH?D+7EA zmAPiV&_Cn!#IG-1dUAmE%y}HY^KV8hj!eDN^B6jHyL`M9TRRAzwM~dtBam1-7+U39 zLkfEG(&`qb$%|bDAlw=Y3P89m78HPRdn_mb;f`2P0K%QIpa6usVnKmH>6{+53%Qk0 z4weVkgQ`D#>$rH2bS>t5C>Yj0JtQYb9}UANv@pRo#o>jxzQqBcAhS(*Gp4EK=c%Q4 ziuG`$`!*T+EPR+PsIAgOi(E&%pQLL`QT_r2 z=Gja2R^K!VCIg3c7}V|eAdBFfBk_X|S1dvDg?Seoj&G{t^WwY)V%_KALl;H4wNIeh z$MAd#AMHCBTLX)Ouz;BlwHwhT2ewXbH@z0)CHTU|yxB0~$5d&I$!ae^c}qXVPuHMF zW_Xui&JN7LFihdyH4h)u%&9#JjQML>iea5|T0C8Pd9`(n7=SN?){f+-bn|LYfKXOw zzW9D6Qdz)MTt+(#Eo8phDuE&G^2ehy;dJcUR-2+g)NA$s1)RuZp|#0`mBdO=RV^Fal%9M ze75syPl0`=Xk@^3P2Zy<7M0hyRLa^6!3SOsMfH{8i4uGkv0Llh`N-lC+xQynn9hNA z7%M$Os{i{u9LGEt=9HcV*V;p|DLLPJkjhWv1Q_+jzV=q`)vm7vJz$hB#fhDt@g39l zRWhYPb1+K5DSa6=rwrAC8qKXe58`{pd1c60PpoJy<~XK7?J(Bc91O5>668PHG9BiW z!vr67Sp>JP_$p)29Up7vWoDOlMfs&;kO;pWqW!6OL~)mP#codvM;73lVcL-p-`0Kg z5T7Q+ce(p_LCY!clg9T?i|{#@E_tP6k%~T7+P1j%N~{NByV^q#801stXJ&m6+g`hJ zSiaf6q=2tTI!^*UEx?N1x-g=sArds_@+fi+eWm~HX1ToPRRF@>v7i8iKgWUs z|G)LSTOr?l(f-x$3c45m&-=loxTd#$2jxTKrl5+;J`bTCCIy@Vr9=L(&ElrowWX!z z`-a*fulvZ{{KBCXI5RB6FjY@HyqPzr63wA*NgAKWVsGm9n4oqf)cnH0H8*^qL#@@N zT~^f21zMVF`Trud?r~~37MD&$Zt)>6-*#~fKw8{0eB14?^%iKl>C$cEat~{dLX%u; z`K$ZP0V@q7$$o?pX9P27KMg9{m0n443&6`B(C4i~o4k@8HgjLEmGjH~8#O_~EV`uo4Et5upgDhJ!}eQ^s_ z0K)yTpa6siVnKnq={cjY_2xeW)qf5mXAVA>=oEYy?%$$Y1b$$Eezo{UPr;C*S;6B_ zaMwG#sGQo-jN2-vENQZL8v|I3uC&jP@;SSsG8R6_tfBM9StGtVT)ICi2ss{<=g+Sc zKuz&{k^4M`8N00BpWA3TJW8*_&v6*x>%*@E^q79?EPQNk4!-|buy8O^=utSd*QpEy zd6#J0V_6#^R-+8?sQdt%Ui&oD#(+_mPO0CEnY<2V1ubg|N^vDru=;>_&Be7hf(!G? zy5T&g$HQ>3fYWA;jN^l^`r^*~ zQkI)##XR|`kk?)FhCv#(Wlm$c{IW`%NAJhqp9;5$ji9~V|4RrjH}K} zfkHW%F%=ziG8MzIE-a>VPB^8P={z#b$;_%Oz|Ztd!9E2;yXIsj5+^#$Eyf%=I2C7l znsR>L5QKO_v%rb_jnFmbzp5jBLS`x_6Y-nw zUL0APliB=VYBu4%`8BwT7)ozAa5*d=P4!T2Xe?)OsW!A%Zk$JEeHdo><(9%^-(0g! zNa4@Y7qF7@QsWx2k%RDe%n~w=-|S)#Gt}OTq6V45imt(!+i(a&Fq)c!;l_RN6NC#9 zJAG1!UwjZN^#cC!S%ws@*HSnsPvOX(;+Id+$Ws&XKL!6g<9~PjPscy)XZj_>2jd^# zo~q@pi<-RI%sZVGbaMEpuv_Cp`l zJ~fV`dvs{0oNd~a?~9tBif;E_2rj4BUEZr5Mtyx0f@d)5V$TKMyC4-EWl~f_lVilc zZz@bh)jkSAP72QoX`hP5(rT*bj=rKg_@W{n=gl(hkcu$vT`J3gaOND$ZiT6IOhrGS zJXtpo{ySd1b`=HvJ(ZJE^eRn0@Z|$jJF`|7v9eh2Dz z3;hn$?+E>FsoydD{g3-)n0gbF>*JdPu3KA|N{ui;Nk;^(gf6~EWjhz>H)4_tWI9w9 z_)uoV2p?Kt>ERHU8i8>JCBFJMtSR)c0Z{RuyNl9o(76rS*Y`cRi+Py3p3>P|?D7Yt zX~5_j`zb8g6Jf!A91C_tSTF}V=gCdYz=U+{S93BWrcauR9Ja;(T>Njq|0QTGv#{TM zjsGps`>-48jL881r~g&3*{3j-dJNCF+<`l=1wGIs^~ab{2`1hikV>r^luCUyIF-5& zgLSXq|LiiXa~N(R<9}E=dZ6Lp3d|5XGL`xWcfK}al;{Fn{7tG#rRL%PGW@@Y|NoSS zoNZI7=5x_=U7AXL`6RxRfcAV$Wt-IO?c1cDn$afpTwR;grMI+6ZMd~fs(B^;KW&qG z>Gw9NV=-DZ^}uwhY*9LOANsDMASX3rWKL?zaXG1-FV9Kce_c-Mtb1}&C)}Tt>iu+1 zDqDz(aNCdFd4Mfg6omJp#_&}karuCu)j>EgAIgv*JP3Ez$}5LXNQd{qMw=k}Jkm*r ztbfN3iwD8O@onOR;pzBFFb`VXepo4!=1Q3$SE^NMrA(srO7FLo?x{qF*-9pf2ODoG zKEzf!@DEnn+n2N~Q0~h|`IV0yIyVTl@~R-@D$1w&l2;EsFdaT^85@XW7srd<|Fn%;J6`S6N;)bk}sal_h?N5+7o`mw34GWO1eOR^ly< z2Z8@3Gv#P|Tmfcj57XgLGyMgVRi?wy#$SLFuFU_)&gpQB89d+GfOXD-ssW)rYa6IN zYi&aUxw@UG%n~_6YaMBPyf|xouy||ZJzKAINJpGepgDX~jF zdW=zpidsx>+;KjMCT?Bz4E{w4F*d^Is8ZQ?(ai+ma#~|umr{RNCX^y}z1fFla%;@4 zR1r2}DvL{Dc)x?rx#GwmEI^HLop^`9ec%=q4g+64#=7$1`80TqYUkED97|t5O0Il( z8WJWGk+3fx*Wt=HR8d!SfH%(PcEb>iPBa*Qw{lJ?x{ujQ$@I*agOFY-Ulvd7Gv`bN z<$i$rN_kU?9-uc~|A2|UkV_6iZrJEiM%}Ea6h@`S{iLn?LJ<-|74*V`5v+oG9IGPq z@9=8NM@DW^kg?J2OyCeD@F2ag`VLq|*UN-bbPG)|_5kn4V-7;DBf67OrHVSU7~ZIY z@4CBGx?>q#qf{tGjWorhOGu>`OvOP+ujpn*VR8jTt;5ljdAJeFXqmhzMK{o7l}tX3 zIS5(g2=`o4Sxnpl@5}nY8|6NzH(8TSVP}-Y2?NLB^_l*`wukBE7KAb=0qt z38iQ`6W&oK7sTw=5#7irT*V^c(VM{=<$l+v@+wW2Diuo6l{9TD({EySUMgP}lT{*> zn!YX%)3J;$Gby^7-Z&7$WC5ed*g+WN_RQXaA6&c*!2vV7KlYDwxF=TScqj3njmL`r zVq7NP8(YuWZzev_xV`uY<6qGoq{EYqzZ9QtyjFa^@eAV1j2{(WXMBhFHsh%kPomLhJbU7f--m>&q|R!Fa5=3cIF@FB7jd-b~EVR2Sb~Ty6X-daHDJ zmhqS3E3t<<`?cZ+jb9M2HGWjg*)pB|9pa(JSBuZWzUtx^i}@;q<5R@FjgJ&}#D3`F z_ZL58ypy=ec&zvp<1%qEc24KNnfQC-_Tt{yLtXr@=xk7a<1fXxVRv-#YsK#yzaak1 z_)&2i?32#^4spKm)#6+2G-0v$VCi#z%@z!cOJl_ZKfQ-bsA9@mTR|#%1F7 zj5ia1YusMEFZOSj{;xRJrNe!(?>YWbJllA!c%ktN;ya8V1t(4yF2RNzSF8i``)Gp| z3xe=5wDk%+?Q}nv#laX%fR4SL6!k$cJ4oFK594CzfHx`-Rj8;T*g4phb;UC3DQ`*< zhfuPZI2WnuC`JxKt~SEcMyV|30|z&vX|pTq&LvX$g7NsYG@>X)9FWPfAIF(l%+4#? zj8SJP>Lu^}6ixVP_8_Db^`gl^GMT|64;fuGgZKayf~=5;13lSoWR;7SHg1s)Xis5? zkvTgR7hKF)8q0{c(3})?pjW=UzGW0S2VZj7Ax$QW zPl1WpA0|3WZ9+SYy3>l=J01RrigE4mAe^z`^c}6j@gCwgjJFfNXgo^X&HB*+VxGu2 z|8C+-tzXO)e_;F_PTa`58XqLi!FKoM7cVg0PQ1~0l=x{h4rf0=e398v{p!5Gw zTw(m0czfd~#n&6(D}LJe2Jy?rmx!lXKeR}Ew()V|CDtz;B!0qp4{)NNsltZmseXjr zgQxoMYL6NMikcNrdEQ5i`UXGgkfXwG+iZ_Z6aq@?_Y>e=1&#GCF=!%sC$%KPx^NrE~nCc#-if;@Q>~FBflaZQ*S3i*^h> zNj%DqnTLTB+qwooGNlx;C(SO9X?Hd;*R!g%aq!+oyfI0*M;kT(Kw8qVOAv~p+chhoEwyHS;R9nRA#kl&YZKFRz}#4>XE zrR4I9F9{$OwR4x>JJ1p$mtQ8}^2_Fi%MCOF=Jy5aF2C9#Tz(nr@;gt~m*cd}=l3cG zU4EHAm)||zn$b|0$$0nqn(?mwwfm_4x$6hv9cW|P9zj^mJ?Rovz&i|H!3xNgm9CAD zNuGs87s=!z2HnjMT_*ANN%nO`>BvR)N3P`xp2s8CjkLNOKiGS)0o>kj8+NpG_%>Rb z<157<8=ou20H%+hE9QaJ*&iW3-gsZ}W5!d(X_Um-Z!Ml^JjD51etL^Bou#)g5aX=_ z&p)GUOou&e@Bds}ZTzr*5aT1n zRcL3OSBmd6K3BZE^?q~3YmJW(A7WPo`-&Tkr;0DJBj?uQ^Nfdx zm)ViCxA-#S0&t>torzP3ajx^^sq(ntXqZ8GH7-EMVL%>1+{fVgdk+lqjbSGi^oa0` za4NeVTO`Oh2*M?>jlN;D93s5nmC8OwlaM_fJC}EnP=t2_y%gbXy;SxZnOw&%iX4QK zIfjLo9}r|FBE0&L%AP2zVfbZ7@E7Pza5>}gTrx~4MR>O?mEB3E&&P}|i9t-j2rDKK zVa`Ncbja!>CWwU8*SSLhr3lX~r?NRRd4xxLvcJf1gFURND2;Mu-$m*{$Ubh|m8z~& zaB0j;7I2BQf2Jv3%YhXogYH9rO8B$IJX?Ij$OnUn7&u*`r({!F#au+k=wZ9vx)*O3bcD_uGRBxb5)? zwijOSLDOMEx^TfeZC;A-s$VMmq)ht5L>z>BGKdK%VZ}BV<*@p$mDLM44IMXL4R0Ny zd`;erAoCkvAN`45?d23>tK0axFnW%VeS`CUmJvzj6&lp;Ka zpUQS~If)sk5)8WfW~N+ye~oS}2r+`g5)0FJVh+Ls z;pOX_3HbIet6P~M5;}uAp1Ox4r3e$4rm}No!s|S75I)49t8dnvtM5HzRe*s8Uwt9Y zr&xV;=vkPyuHP_WEYhZ={AT;f>w=hrupiGlnSTt+GRXZki@0cKF%-)PuRLI#Sq5Ey#8}rK;ptIC=>X6E2?NI%$B6KH1A^@s#A69~$N*O9 z@FdiXJAk}(8x9beK@MIJ^m4F@5MF})-th|Ycso=t6L+^m^Ad3e={x%c;zqPQ$F<_) zu?sq$DZbWtnwXu3iytrktMPF0-;6Wj_l-M=%h9np|4le)ONVb5ZxH`(yiUBzE(Bh7 z_I8oHN_>+YdRK^lFFTZ%B@o;eo zx+xc*5npcHNqn#ICR`1s!@n4B5U(*_C;rsgInJUaR=jN;u7N};=PO) zhz~Tb6(4ClQ(SL6O?=;NIKH1Wg6{M|RZuz9czy@WTW!^4AaWfL;3aW!&N~`7gNrw+v*EvdAzZR;iiUHzhtn2G09${Tmt~k%S zn(uHk4(Zvh{h@fRHT~DbJ6h9vQoOfq>U+goT2Kav~3U%XEs>Kgs?Z>O|R9QS;#pILYRjgQ!SG~&BB9#{y|CUxnN#j%hK3=8G zv7Re%<5eU4X5x9CAFraM@hLxEm5mu^RoD%a<5fFZ-CvITuIaD|$5yv(&KBp|wmV6@ z+UyS#ceZV_k2qz#y_gd;yY#Z+7mZ8BuNn6g-)Y-6U)*H;6NdlOVG)Yr()(0gY5b;m zjPbMLd#u}e5S-Z7ycyvKsW@hr9Hhbn#@N;zvWoCbG=>ZjkN3dwE5^-T2Km|%hU6J6 zr4?@<1mRpZ9c)WI&wwYBy%Y_kNlGSbaO4)_bOxF5@73$(2ruih9Fz#cS?K?G`n8^o z1PSUo!98wBDH=f26*AQT4cXsc*uoNs*hI4Dh#x?Q#DqAa7Y#Bg8cLHx#J6L|5c@mQ z_{b*Gd>1{9<^jUf}dnKilY z;(6BO+KOMb^?kpb>)QgA=KMbrZ(~jF@8Y%AWS$a#Xndb|g&hfRbn(_imWnyL>(W0% z{F3qU;{Mis94ua8yr+1G_1u%h-TTGqZ3#{^K@9GvDuxB&2rfGZWi>8Xenj>obpmHY zFFy*8SaErLcD2L^=Xrdz3h&&d%8$X=I=K9#>^+L?fUI)XgNxW1FO;Mk_GciNy%0a? zkeAM`bT=@CaJ zs%u$JUShlTt`J{p9oaJR0JC2r9&W8{fq1I5vRZLhYgIGBE#(;2IjyX@b#2=!PQwiT zF(~#SJl4F6y@$t|zi40Mz8^Iy$cX3}{ABB}3Gmz_g4}=kh;_6IKTe9Cq{%dysEZ=| zF6uc(jZzfv-16c}qu7tj1g{6CqNf$qeciv&I*@e}w*}Uv?1PK zu=Haz`9l0M_U?!rgt{;K6r)z-Cmpg8y3M}R)ogNjGu!i6F&~9<@nz!Qj5ibW@ZjRx zi`yIjdKJ@S9$oyGV!YAgd9C<(;}^s~7(Xh0!Mz^I^#0&hsK+Ue>DI0;^&Ni#iLB=u$LX%zZ6d}UMt?t z_yuvXod-TD{>ZwfJH)H4qrO`Fw2i(l2Dj|eJu2D-Wg+J4DI1C%whi`>^5J+y5V!e_*z?Ru&cxMk%b?^;%L2+9To z3L+DDJeA`f<#;@myIT3yLAW`NLGJNX_JD3Z&s@PuW9xSOfSBjDj&By1S*2Yj9$-ha zv%rabXc)G8P*&zndiY?nx?(+;+!@Ev@+x=M!UvOij4aoK$sAg9>l>}~(II*sEWXtG z-5%mDb~Mft^SZ+M|9CmeQ)2o11f0m<@9eX-2{L=~?VhuE?91#KE#ZN0Fsi_9w`ei- zka>tMQjlKJrL=PIZ>aA=pLGU1staUNfEtZ1R*J@VpA(P~-|iT6?QSwdXm`B($98uVmwGJvLu2&PEMFP%(Z-#?iG1kM;U`qFJib-n(9c67kD147!|IqhS3w;!7a*AZ8K(YN zN%qIeMGERL$&=#jYqH`ok;g`z)}JPmZxIolsi2OS=h6BmS@W>TV}zbLK3yg{lAcWy zcjsEq8k7Aa!sj!Jx3k@Yw-tN1>u#>|pGYm5FH=4~7}YDN+qh@Z3$F;nOOHd5{lRpx zf_jMeB3kiC;W`7Rse`OL>DNK_0$Ho=@*Sxxk3)FW*Iy6l0LStA5Fiyi9^ z6u)7|#$Cnt7*7y$_IzJ{aj|uaq4;3iZ99v9wPRIE%qNGP|2G%2{Os@@zb}5vcH`CH z#O`wk`iF4?ur+Y_K-ceY7dE5#eB6)ioX=&HVd*FufnaujoGrWaaB&dQA=-*j6BV_Q z31BbygnGHWDdE*mnDmp$k1+?~TUc|1x0QV+qH(nP37a$sPe4WU#O*7XFu_l0>RvLW z6mbXe4+-jQ)a?-TitsWt9vo6C@1uI@tfx})7FJKVJgnG_AB_aS1P){=v8EzXFd3I+3U6&r0ys|ol?Yka~rz?m1ZLGr@E z@ig&NY<>(sM{WIQVYugD$!bzDD+R{65xGg?fD z^ZV;1Z9E*s;1M+WNd1R;G_t$mh}@MhD=j*XR;y&ivu1xsSy#ZwWTWr4)Hh960+f{B zEJt~KU*+=uGoxI7)l)IQ+1avUpTta_fMs-`5>hvHFij@NM0erIzFTtnWu}zhY;Rey zTVnNPab3m)b@#w+4@#>4>;|QxN5tIr;OM>I9_rV$J)V;lZ!|EWec8#m&P(?m{=}TQ zvo+mDCi~0vV-$Ro{Td(M$}YqYo?y1d->{fFTW93gHU4_>GuT>=>%_HowooI!+PGR= zZk<<^xUF%ecr)V?@m%Yyip1L+r^Vk{=e6-X=I>yq|H6cpK{stHod2 z*;tkMRqG5Z#cvsxfD@geUcGqwi#Ghjwjt7Z3MTFyG@iN<&0`Y3&A21+}Q5I{fAB#Ek z;QU_~|IPSmXK&l~esN&i_9pQI#+QoM*Z}pJ;Ka7!>y&=*mWK-t-s;NH25+^Q+~BP) z8a24-25<5G9raW??zq8CO3A_7JftZOLLH3~gSR|==H}ybK#?1~)%my^yw%BdV(^v+ z6ZVSQ*lzGv$Ct$5ZGV{f!CSo~`UiuzcQX~NQ!kDFMeRa|CRaYjy20rNb*Q|~)5Pan7e8M79O~Qo4;NP%XT)QTJBb$?Z(79i zKW4l^{Ac5J;)ji22Dj|CWd(Tj5$B%njrtz8bKfej96Kw$qLml#;_P9z^IOF+MUK+B z6xsc`a_y}Ym)ohslz;QmeJ#D&&wHxQtG~RCw5{Kzm6zV59ybqlkBc!J^v4z9vLy(g z!1>6y**b;fY0o$|R*ZI`{~h-(JLSxd6*Gd&$O=p#$_Ike1EKYZ^03G*n1XO$g<%mD zQu`CN%w*hM%VeW~#+k`3W;ey`AV8{7XPS?dcvQvkAhRERrg@+JoKIgxAL)ILaz6PK z_53mJ@nsf7`CN;89=QY4{B$z;J!C#22YSgYDpHW;ih9thNmd*P^Ka)>A;_L%5SQ5Z z`(qjXI)DjKirUa?vAib4jBcAjmNR>-q7Dbsdm8oM_|oN zHAd#)3h3&+82^(}p%ndwU^ZW-%VG{fdPUqY*{>!syE`)#aWNd^KcNCNM$sZ(K?w@ ziaw<2y6xzCLCir&ujn&IJ*lX*V0u4J{R8OOGZ_4sCfCX2lbA82#o!mRV#P$?&}yEn zj?P8xEaC2=8_vvG8WPj~k*0r#sgt6&5zJ27j+}vs*bk2}|JfmmnuREO>)DStpyPfB zq-ZUI*}Uz@hs2DDDj0P6XHH!HKiHO57lN4`d=5bgp1}Cm2QZ3K^bUgA`(=85%+4!% zpHWvSiWk4k4xg`x-h_^8LI&SOFnf|rZjLz!?_#hSQLcB1KA}~$tiB6SQEZn%$X7Rg z;~L%88W*1>W`5Umi8a1}WpqCha8mRLg4sZ6eZnYm5Yj7pj8R`yk^3V-dUwDwdQc{m zqQB7OS(yxv8I6a*CPv+tYVVj~V={tXMJ86SV3lt5aD~i`2MgBgopxa*4G0x@&ZcyeLI? z((BWStb&;_2O+(b|Llv3Iu1;4dULy+Nr^if*OpK{CBJW;}Sp;9ZQ`K~b-R>Ai;fP4cD`-A zy|<%&k-RBIm(t`kndn_RG6ppmbrquyQPeH;MjkHa5~-ZT`152+DY}rRkxZAxjQ3R; zT*|0WQLDi8zJvPt@}?9u(B!xAT=6?G2jK?{UM4G6OmsD^-jG!_kNK{T+6+PF>?fEo z?Qdv$n!G4QXVU9Bd3A)T825r0Wd5^fDvB@e(0g<0r^{RK@|;bR*)q|n78yGctz7<@ z6PN#SvbvWEAv=8ihY6m-_FPK)70ay{4DsF7TR2i2QX z!%})952tg9R8D35?n;GHv=2>RmFd|rJFn;fMm?yg+r9TPn(QfWO3}VFSt^rzVn$^% zI8#=vnCKu{)ygW%I$NaLDMFAr`vNA+8E^7OJIIStvt`(!#hX55Ts za2lhoRMaV8dLK)Dio7XBJJIAsnJkGp2ybR^H(9X-MSIa|H(6bW5nSJlIGF1zsw0BT zq#jJeYCfY^g%Y3?ZOH^WD}nYg2O+(ptr_)w#9H8UpUh+z>Xq`=qoAW{vPLGHHzp$c zvE;FgdO%S}(i?d=z^B6L0i!aRQi?{N`!knF`wp6x$cs`mm|h#VW}%*n84ss2 z$oyyDP?Sd8;k}0X0C{UzV+)$xE0bnMk%Mp}gD(HfiOc^5vf2v$1GB>qF*7@Dv5YpC z7p16_3C@-&r;iZh*&YUmF^bZT|@o=fji>TRIoDNP0gntYojPmCGUm@!x=D^^U@nO1+3)hl4%xXwk8 zIXjU{q&=Ia-z#U7qMs4WE|r&F)FcNXy_Em#Tt(gKy&I|jC=*K2uk_wqCXdG)gnwhu z<)1lm`5z&xw%D4?&Iahr&PR;@K?zcdeqn-vOn-MLmHi-=Z!=keNJ%ORQ#RdVQePP>Me0 zYGx?`K4T=tMFoRjFlw@*G#3H9FQL9(-kM$DQ<`ip6FvqPk#Qx#;8%>wS5z~Yd05RQ zQhAo~@5+=?)J)TNx1#IoG2{5m;3te~Qq)M4kKR90Ung%$(T6lyCX=mVc2A*3pUH|9 z6MapqlVx=a*te*I5M<8w;u2}|F}mngc~Oeqq}R6cniVsyWEo`sv!#mSYM%QW$l%ngohOb94*=)=honi16M!l-2 zSzvnaNPW4yDMdHZ zA-$p-7&T2%_k-!Zg8J3+rW9RAlQNmCia7|MWbh_gy~N<{vf_geYH8OA%xy7jcQzETGqkN`O*y3KO_l37iu%&XpNF zjZupgbsL!8%c-9%Z%WarG&x)*_r;7G84RAzs9hA*3}zl)<`Su_V*DJXLMb|lrkl(3 zt(ehsF*u)5`HI>IruPQw$IF{iG?ykHjbIggA2a$l1{cUm6Jsu-)hbynFGB4s(M~o2 zLFR08E|GR`EThBaMJYO(UgyYbo0x-;Udn&=XhqEj(|c#?f08$)=ootMC=g$j&X$nINa=h>nmKrKpw({#?OS_#%!NBSs7!$EbCR;#0%)ev|r< z@}?9WOOr=sqUWQ?*gY6^f`aUxqItBsR8|jkLq)k0t>?O05;^13#L-xJQHmzgt4v<+#*An97-aslT@=+33DWyZ z>f6YhQnW2izAk4K^otos2?kyMnG=`)XJvINnAzbZ4NP!n#*b5inzx~f30@=9!x%-z z(U`$0jH*}E+1|UJ`goa8ingQ4Oqn#q9JnbSc90btQ?v`M#>ncj?$)CAV$iiH&hf`g z{ted5 z;3!5dQxvC^Q$=x!JnYN(0Wv+1!7XTdoJ={}oES51F<8#1>57^IruUK52g#dKG?XS= z$>h|SF_ghzg{)XH(U!F8EGy1f=Udc=h+@ue!Hxb$iTs9)dyU zKf6j%@txvNsBb23-6`%*ldEO&3!}(5tYGy%|ICTY{|U0%70m36;1b!%FusqxC`BO? z+)<{SR!hR~4qy!a z%&6lP)eNThd(=0|n^N>6O{!(`dCcf(8T^$|qZL((oG}mGxkM_zGX6`YLMi%|rtM`K z#*9lr27h4Gw?mlSJ-v51^{?ekDf$OZUXsZHF}rt6qMu~Niiv)s)h)960qkps(>OC{ z@x&^}(zID#npou%dezBG6RVK@51c5g*J%T!RV`{@0lOejU4(PWfNzKb~sxq9V4 z+e=Yp*o4eOH!hJ%XDp-llnSM2JyZF53$C~{<{+e3^eLlWRn*pCdRI_?U*43Wk7#nY zOs2+++F|f>S+NC08)$W|v+8Bd=ru(7iniPtatBOe$l>**=5M%8K1n^dhaYvYNdaD$1Q*4eMi#i%)?0#&slu%r7d++Yluaq~XXc zH@l(><*lb)m(t`ynbb3ij5~h}y8JUIF8@c!suWw3*?AZ`vvVusm&l7!bO{q2FVi1m zM$ZMW=n6&+P?Tn+hxZ8T7s;DabSX{vJO)NTV-CXY8N5nXY)sK|TJioij@o^#MO}|5 z-=aAAEHilumsrio^qQ*#C`AjHz?Dj1am;woguz9OTA-+_!1U&Xd(kQKrWBn<6W;&9 zZS$CMWM%M7Mom=IV_@dtelC&99gIIgsZfgM(X?2m566t#FAOeZ)Gs>rzW}E96Vy+V zH>GGkO*r0!Deq#&@tMJTS+QcGvuL$aR(u4>x2WwAWX?9{5@~m%>5=lH6dg-1UN2)_ zub8nB7-aslvlP|plK@A{n^H7~Chq+G@RR`5DCkJ~8c6G3WV1EZ=1xGm; zE;!mj2_amFi!H}R;tP$_;&sLw51{=|#?9j2jMs=u+QjKKi3c066i+m66mM(XAl}uu zUVMacow(MxM$C5|UH+@ZeBse?mH0~IO7U{z67lBg*uF@-y>VK+i}A+&S^hnZo5g&G z!L4tN_)y~}@f_oo;(Fso@tMXA;(Lwj#hhc-rC%prZ(JkZXk0Dk+o!(#;%rXLmEwbq zOT-e}w;{@!?{_$T8=aZYZWzXow=Trb|vxK2FP zxJF!KTrED-xJrD4aizG{xI}!Sagq2m%^ZL*NDF`t`>J}8`o!*xWu?p%qb3C`zR4-jf=#)8mGng8E>4< z@;_+YEPmX0jrdvPCh<$gE5+{{H;O+oZV-15;{4T%%Z%&9V~lIW2O3w44>GP2A8K4F zKHj)QjBiH!`X~}FFiwllG2XZj%YT7!vlyS}_5N$b_>QjUCh@DrE5&aZH;O+pZV-QA zTrd9KxK8|wagDe*FJ51@cq`*7ag}kUc#?66c!qJ2c(!p`e4_Ejy;=T~jhn@n7_Sj8 zH*ON&YP?c>r*WhBG2;gDTH|_gvvHmH3*#E`x5m}te;QYbJLSjqQz`CiTp}J|TqK@i zoEGnFym2pBwA)p+9`EdS=l&EjFk zYs4dro5W*`SBk5Q8^yaDH;4~1t`{F|TqmwGt`W~St`=WtTqVB6xKezZaf$eI<05fE zp_O0U!Fc2DEPp5CW^s}68u3oXP2z2hSBj??H;ShlH;88#*Nbb6>%>PH*N87Nt`=Wl zTqVBDxKezTaf!ImxJZ1baaz36cw;ro|Fm(l_$A{t;#ZBE#9tb(6t6dK6#v7xLHtkS zdU4P`-X3-0p2jue;l|bC(Z*HcDaMuJ{f$e+hZq-$k1|e+Pd47T8_R#KakKaa<2B-2 zjhn>J7_StsHf|KZY1|c?j8u1;*)#4|OtHjS4SBhUTE)l%}+qgkoV_Yvj*tkx-z_>jMiQRB4u zDdUYhv;3=#o5gP!uMz)b+$3(-Ij*mj;ts}*;=aZW;!@*!@o?ih@fhP8@wUd*;+>4E z#5Km1;=_zf#I?pn;xmlX;){(p?!@w6YTPWo&UlUZZsR8L1I8=Gj~O?LpE7O`zieDD z{=0FV_zUA2@ps16;@^#{#JOGK`mYqXGcFN#HZBr(H%^N)#v6BJ`3D*|i?=jhBOYtq zB;L_@rFgn=qxb;h2Jvj;dhuN2I`Kl|8u1y%)#7uFtHhTYSBkGQE)m~uTqM5VI4yqI zc;i%-|1slc@oM8W;#6#v7xLHvVpz4#~NI&l{~B;wAuYs7twtHlG1 ztHk4tE5#FyOT@bv7l}_bPK&QF-nawHe~odo_&Vb?;v0>d#J3u+6yI&!D1OnnLHw3+ zy?Cv0ow(V!M*N*|wfJY_D)H~emEz6tAc!CT5QoM^;z7n~@i60!+q3**jhn?2jMs=K z88?ZyH(n{8VcaNQXxt#a*0^5WXj~_Lz_>>IxN)`k8RIJP^Tw6pSBy)d=SckZpEzUOBrY{xDc-@jQM`+BgLsy4z4&nBI`IPI8u97I)#7uE ztHc)@SBh^lE)hRyTqJ(jI4yp`c;jT2f0J>uxHq2l@Z}fxFm4j}GhQj4VB9F)+qglz zpK-l-mT{f#~D|O7Z{g_7a13cFE>t$uQuK|iRHh^xLJIM@fz_* z#!cc+jaQ1>;xP?ZUyb5lExtkA(cd74(zsf@gK?F3H{(k2EaMXKVa7$` z%`w1*NA^Kt`>K}LmR&Q;_k+k;w_9z#KVk>#3PK;;>dVo70bV)akIF_ zc#Zf7<0kQO#w*1Q#*N}7#tq`zjO)es8P|zd8P|wkF|HQ>-MC8prg5cst#OICEuP(Q z^;IP9W}FuHH{Ljrd z#Z!zM#Jd>Ri)R?ui4Qlf5g%n-Eq>CtO8mTWrT8`D|A(sg5AbSC|NkrFB|^$jgn7lF zgr*F8I7WU9A|wVSq%})6HZcfG8?!{nk3qyH29cFAR)oYLg;oa9k{D$DNDQ)}@ALV* z&Ut>`-#=!~^|aSMz=1KIU7*dz!BlA7VaVe7O0K;$zLniH|oQEI!%XUwpZFNAXqWuHtLW z9mLbk-ygv8KVtqwJkPvTyw?1pxHl$GMEvH6`*nki*GRZ7vE&wQ9Q-mReZO(gZN(a_f;%^qxlo@Kg~vFEHOHZZ_W{ ze#3mFc!~LZ@e1=F#hYVhM#T3x@mA)8#pUMy;seY(ijOdN6`yMEAU@Ol{r)WfpUt0$ zuQD$cPdC3Pe#ksW{E_)SajW?j@qf)%idUP@7jJ@zB~ji#iZ?eOC*Hz*uy_Y^fAIfX zoTzvsZY--7VYUD!f#DfZRShOa6pA%SsJat#I$}kfimJl)726c{y$Vlhv5e34+-#q6 z1>~d_1J#AHa|MO6ap@h*i)D1~WPUaCi#=hFYk75n_4H<`Xst3Xlo`3{RBCT6?f%df zF_nO}ah=8#GpS<88dJ<9GB@RlZpky+>)V{O zRZ<$IMO*2^)M}8{0Eo1?7q;nisq90MpSLX(nVZhUzvN75?}LZ2VoZ(0bI0^?X=zmh zJ~vMel-3IH2cdgv93kKn%;>&;N4znD%3 zTj^ue;w$x7!2>@-n|g;k{2h*@%s=MJzl5*pW3kMfv$v}0FD8mH^%>gyyRMgBnF;Yc;_htIO zq{6||l*_3Uip))4p!Pb{&g?xja`vv*%Mw|M(?!&JM_S*YcT+W5HJNV?WKl22Ju6Fb z62=1fi}!P{IR3{WDT^m_Bc9jBFXoKbp(s9~U!<*+lOU2aq{UZ8X!FlZkK;d|V#HG~ zlqjBiOPeofD88sm6z9vPUUF!rO+KwI6!$})Ruvp7w0#RzBc3l)jCd}ksCaT2K1|-m zoq#x-EB}&g(^kq!8OamUIvo+BP0e4Ac-}{qh$nL+o`0A26**%8ABsz4lTl7vXmf#1}5ZOC{CwHf3XG(MXrI9ti^eTiKzG) z+SGjI@b^$8$=}G8f5{?g-^r}-SJQIoZ#Dz>ecEi47T4aRznm&d+nSd9np8JMQp)Ko zk(<8Fz5b%TnwUk#H^N~cT_#bV{Qi(y1EuveZNuhFs=OnWCn@k?s8;a>-}uhIOUu@5dsWt#<@DCin+gkVg-{(?&a`Vxv7Vl+VA^wATiI@u}hyHvq?jtjvCB}2rjHij;Hcu9>Hjfvd?kP@V z#Lt*Vh$|79_`ShmuFn)aKzyLNZ{#E1kzXc09(6Fdv-lL8gu&}8S^ksEtHoSvCGuB@ zFEB3=vw@BL`Qi`Fv&7e;;g0-iVyu5W9KSz8%&#j44;KGw9w1(8?knaSl%ZcH9&PR{=BtX4zrH`qzq^P0 zR*TtONB#=&!R966^UU+bx0+{(UolS;zipl@-oryWpilxlG*O+*$mjd3^=Te@E}!M4MCjO&PG{M%6~hW;+g1Fba3~t0c4JVRIH<{0PCwn_|Nl1y zX%FBJ>gglcChtO_P*x@=lpU4MQs%K~6EmM?X7OIwtk{Wn0$lPI%XWa%$0RZ-t*!+I447G+GA1<0n+e?|x!D_rRLGg8o z%uU~7DPQlytewNyw$4W%K%u{33Z|B8HIWPM65Sk{0`a-wQllQA0kQdOuFc2HiPQ0 zL(vszHyinU`;&jvW%;m}8uGL9&}x+DU8tb1%wIuy4q>GD`k^+6Rae^A)TH-$9&eONJ{?$F?$oV9aP2W8B$y+EgDEar&d21?2G`> z$#&SLe5Dr4gHhxI1-zOUkajU=tX50$8)@l&_Iql5*qeLZhODeokAbL4%`N<` z=3e3N;S}ZXL)z=eoN*gKG5n>0@OOf=xJ)Je)zXpSFXv)s{xUcGJzm`{okDNJ)GxK>qXUiEX{ufJ?Q;xIvYY-&jPXiJEA<{aD2I1skOpo{dg!CWFure$BrGfBw zy0m@<(_c<7&irko82&Oh{JlWhzvqna&cLb6U-}pR#+#rQfmy$Ya0}aDKFS$O zl~UySh~W*2>sY{jr1d+PuK&dJi0}U>#`(uw#WU$B?GErHi*JD<&&TY0*c;LHPs+(D zvKZ>!xrJ>lp2+%*_JeyxJejL_CXZ?_e!4e{Z-0u6Z`evZ(e~BS;!2LRc>q-+z8bV+ zd{M!f%6KM2rOg@BS$sLUTJgn-lN7sAD^_k?u&Lv_6GXSnI8U*rx^Y+H~gI;?KwGP4Ka$W4_GssqWry5T3l_9 z@%<0dX?qd#8GpQrPjOR;%uTznlt*c=Be9nl{UwTg+MTW3*MnNSNQ>*s(I)5Ordvuy zYu0s_sMY7Tr}o+%x%Y9+=kTRl%FbglCT;FZcVGs zR|V%p%c>XEmi)lq#{uA6RUQB>Q^)o;lG5*3b@`?)#)kMaWE=~MKT4#5^ncVkL0aXo z%>rrJxoB@YBPl!InH%T(uF~E$=NMZZ##esYwZajWz=hJOi+E(Oa zeFNO0vjm(i$`Uj(e`BdKDdnfOlc%N138dmek#k40c+)`2cqg|?>t-563ASeX7Ba+{ zm+4j#nVW7)?LSFdi;j`A!QL{740c*htpU;+iTnDjN!b`8{rx9Y=&we2!(S$azZ+|> zZ*#^nh}bLhmj=S$PmBE7J!ugBZprlUcMpo;FLT4+C#Aht&N0TEhQIVL{GBYVZ^5kc zE4hVjEh`oA=PWnHKXTI@Sju7Aixb|&SQnS#PKpI>rM;-Nm$bG(ouo}pe@nUE2|DN$ zcb3T9bT?{mC~d73MJ^OMpDpDikf_&bCAC(Rk=K?Yz9+P&$Z_l})SOVpP#?oBLVW}c zus%eR;+gzI2JT>1oPT#wjPs8MbiO6yr1c|M;b3~iSF1S1@n^2$nH(wYt>H-)-y%iU zhiu^{PHjobrNt$f=;Yzt!b#3T%i_zVi0?0WG*-}pPFZ}@eZ2RRptA5)C@GM*9N@zSco>6qWgUt8H^}>0H|LK7enVTMpe@TV3N9K%m{wN-af7x@6!PMGB zTAZ&?^+E?`aUGPbe)FqaS^a(hx~w|+>OG@qi}8;n)sN(P4B_Az6|$iCrQO`FrCH4Ec#Sx`A^hW@VL&%j?j!U=zw6#kyAy?)QRP}~H2W&YAY_{#|) z2r>=AUrxWt>MtJ;W%ZT0;V;)r!J|50dp14 zLI>l^1xFa)>!}*YUu%%4{rZRY;#`od zK4|%o@RtU{-*M9V7Y)JRN0}b}&Y>9oGB^C?N?UkBpEFi(p&0(szwozQTAzX$-*>o$ z?Ip}-{Be&)@feBBO^;_OzZGj?6fy=~nKe`*ZKYfUEny3W3lgp+w8@z(=?O~Wq?Ghz z=cXg5eV4d9v>IQLL4?8^yD!Rfm5aH24`q-q&w~A@{Ovv+-}jHX&c2jBWvE3N{WH zCdigpIZ9BBoB@KP1NsYw1new0FQ7Z2cyqga*uA58x_NDP=09m(C7x?uCVt1fP`nj- zPGNtp_+#hK5PxExBHqUO6UDzcf1H>fmup#S_eP#e>Z=#HX64h)*_86yISUC%(%( zO8ka-sQBOJf#SE#iTERPFY%A&?&7uPj^g#^wOh0N#SQX!tP<~RUM9ZVyiok8d9L^k z^9=F7%~Qmmn{&UXuGWRNTcpP~6p=i1#-45+7*pEInZ#i~nryC_dM`c1xE3YV#`bE#_t7 zXUz-6&zR?mcg6^CR(|n8<|*Q8^F;C4=5gYI=27C2=Aq(I=7HjK%!!zz+gbU=SDL$v z?=W{1-(_CgmF54+yh{A7d6}3a++lyAc&&M^_yi2`X5|<6Gfxo@GfxyBVjd?x+&oHr zw0Wp_sCl6H6muf}v$>b}Qge6lJab3!^X9c(SpM(LtHfWJmxzq%-#k!!oH-Hmb3I|Nmzdw?3GObw*xXTkhk5N5 zEdO2RRpKYj%fxfd3&l&!bH#6)XNW&APZ57;o+w^n9w+|9JWAYV9xDFXJW#yOoQT(( zdxm{+oHB z_(tq4;t0T=8?} z8RAk5dWSz##NEsj#pjvFiTTZt&>toK$vjkiGzPXKf1r4XIT3RpJS)HWF>`k@zYG!i z9mNHV9|y1P#PV-qUL`IyFB5Z6JoFce`+93Bt-DdInxCyKu|j}w1r9wq+L zJXHLtd7$_^b0S`C?j>Gl?k-+$?kMhpk>{-Zo3Q*9=2hY<^D^;4=7r)T&2z5*PX6`QTW$q|G)V#JM%YUJHm6%@|$jUE%+`Lfyn|ZEyFN|V`{tWQ}<|*Q8^F;BD z=5gXD%%jB5num&CG!GPW!dv`aBIb;Rto-7AF!B=IU0iAIDCV;Dk-v5$9e?vGF$c&a zf0>xWIl&9Xe>Kk)UuT{nzQH_2{J43d_$~7|@jK>G;w9#x;!aPOHHO3=v?(GHEp_KHlNgl)135({OcQv&CT-=ys&>21v9Lq~kH2>bK7 z!tL0m*D=5N3dPA1nVU9Hn=2q>FPf4I#f{)zdZ$EsnsSN4BRY{8zwrTS-rr#wMP4Av2QPa7(IAYRS z+9y&QkBc;i`);W)DVm9gR5{lTU3RXmdpvUMc(%HpeO z#t~oIiunEqUB_(FFKjMjdem>dTFm;LP4(pmd6UPa&4r0ma-qmIiBo=?H(X8sNv(;} z;@nmG%jvrGS5twbet*HeSiiH$yo_gZoc7YU$Roadha`)y=D{kyyG!dTM2I$z#5RlX zDHIuBoPrb;Pkwp~a|5Z3qw!Csv%W-9`Z#}<_X0TmnMKC*K#ET?>jh+Jr*! zOpM#GNSs2+pWh1GtbT7xG0sO#u+;g;6{PSr9cGaWMZRB``Ab_-ABIWm88B@=%=D<= z|DqWFGB^C~BklcRjzwC`^oT!`BK{qvqPdMc9+*4KEKZh8xTY4K#-kZ#IsSxk8UE%T z*k;G$5Q-6h<|_UPR{|>(N9T;my%c#o!dCh(+P+y@`gSgCYJy`Nj~noFIv&~l#JSWy zL)!1q6O>~%RU-aOiuiN(Bc^TUjM=yppW)tou?`Q!Q5mXwqd_PXzrc_}cFruu=tp+W z90idDw0DO)c^t#2{VLVr);7XEI5ZFWBDYqfDc zGFRtcvV-<|AZJW)rWo~swxT|8VLwbh#edrDjcwN6RZxufj=9m^ErNtLAOCq^9%p*g z2PQ>*ct|QOIY;!f_D@-l;qYYV%v89@B3-~Oetv&!)7ur%K@_8XX0F=jgsV8>o7XuP ziuxjFw9m99e-o|^Stu6pGqkDcjnSTP#$)C$bHm@C5ej_5h1w_*rxRxJ*M}zAJ}3Mx zElxgWMSIO6#QFKOvL44t#d4g=Eq?QV%#Y*2DT`Tq$Xvxgxk`JD%Nf^Pig7;DR-BKg zN{bWiXmbwJ<9O)xeO`a?tyAQtO>~kglwv&vYNH(enI6|4CPn=DePb-xkaL_Pael5r zWy86Sdzb7)>5lF~cA{_&G)s3PE*kXYP8x{o`elu6~JK=~VzF?L!F7*_ne$$rX zn{WkLH2ky;o1Ej3UEevyS=XP)jsC|FX-{BQw13}IjP{SNX6>J}4n-%A{_=%U+8)gO zxW02)tgL=BH|ooeXgToN*_`p=CKynC$A_9ID!xmk#TjF?S#% zc=3nYI2uc+673z6;`(!iRC*)iS^LN6r_uf?YX{s(WhV-kQ(}?0>=J+eK&r;|Qfm)H z{bsJ}ce0}l=qqAzevV~U_)A++AAUtkjju}M29Y*3xh(3pJ`fiEGB^BvQ`-EH7K@}0 zY(@O_Z7p3dXG*0z{Lb2I79rYezTJ(LR&X=Ha%jB+{N|3#kMmbExT1b*@|OBnCu^^F zs1@~nQy9?k2wUmXtooJG8bjN#xeHaY>kma9k3x~T={#x|q|Hf2EXUnUXMZ5R(G>Cj zRIC|CJRW#M2RAM0bKH9&{&i3uvjioZ1XiT!au5dQTL&oFlq|Ixhe2bTXN^H<^<&CA8Nm=}v5 zHO~`2Zk{QA**sOu7fr*TN#bA3mx*^keikF%Di2q~mA^z3e zN!%T`5%GKL@P(xg#l6g5i7zrQ7hh#wEM8=uCthlvDSpR1RlLSLNxU6yOyc)16Yp;x zE&h*rxOf=uFhYNj_&#$ge#qQM{G7Rmc!{}_co6P6vhw55bSRE7e*7*R5vxKQezM{>HpqyeHcB z&|fUBHqR5EX`U%Q$2?U$);vi(5ZBSH{E=@SExyq_T)facNIb`!ir+Q&5r1gzA?7_u z{9Y&V@8)&iviuvOgA@5*iMyJYi?=l|7GGhWCqCLdQ+%#@s(7q>2$C*#o|ZI^Te~vGsWx7Q^ggy$q4(C#HX1r6JKH;Exyq_ zTs+%6Nc@C374toxto-6#%ss?=nLCO9YF_sh%YUu;EAb8H<>I@{i^cyn&l8`7JCXSP znPM)T5Ij}Pmm0J3i~0U*@MU7o#Sb1WzSlfl{CD#p@s;LO{DZlVcpKbwguNc(W6hn! zqs{C7%kr-=e_16dX1+|klXEx3nxS92%v zvF3HFSpM_OUy1KAFBku4UMyZ~o+sYW4_{`2|Ifph&(UyKaWEm)kf^!=9R&>Kp*vc& z6Z&|C;#Bn9t4>FE7_Z9VCZp;L{4130SaD{dtW(8qg&q}M3;QnUjkF%=B5aa}j)%Ox zWN4&In071E%C@N3s!+Chma|3VT%w#U1%imN2jK>7`}mPzaH;EDuqATpit!N3{B@a+vS*K4^4s@#WL{{03y znWFt~;eKSS=|Zu?ZWLLy(v2V{=S%By)Uv8!NW>D96q^tUJX}En1OG6$D9rubYo%;4 zDgB&3(@zGT%Q^N+zhc(b$|{4wiUSM9U#Jr0?S`abe4fzmCFs3j7PQ_ z)21|dlC;jr3=N@5iBy=BZcLR*sr)5pjL}fsTw082x+S$Xmlg-c<5_BP39{%UU!T=Ck~fr1B=crFtl{qWnivWce{1 zNU=K&ZXm4@U>d@AcJYqARG5@*MU{__;Vys98ILX~ZYwRej%gXSo{`omXeg_iP$>Kc z?xVA1qB>HXtSbCCc3>5r#4UdDG8*9d8c8YZS@IXzdXQOUjIvYY@kowW*4x?M^O*jf zRG5_hNR))KA68+s#`*gbAs*H3jEDK zx?MZwamzp2;a11*83={q4&0xNrOqhE@!M0T@UI=u5ypKYw0kjZS82DykjH3fS*xOU zXHvQ|RZf?R9?O#Pq=i|#No0`IzSP=JS}VX+cPY{@Kx8Gknp@bugsR~WlcGMAXs@Q6 zQN1bdAlo#M?nK)k9mSvJKne}L%=8{oVNyzelX+5kJ!gz0QVf6Tl>AL@lh)p-B=qcO zq|+crT(bJaq^M7Smg?3}6=Ou2V!3{n2GZXA*=lK3(I5=%$Ml|3VN$vaReDP0pqvpt zihZQT>Y7$iYuz9g@vj(rsX7tuB3{2nR#s>4hR8a59=G_JG2AQ8Una%*`-}`+m@`II zDKg&4G-YvtX6}6t)7hRCicCtoQ01>uS(Y>2e5SaywCIWAot!AGGB{Z=x=>t?bQ=7L z`JJT7B%QxWAE|B#)mX5Pb(Qt9Gtzm!Vi_IeW%1n3YOI^Am#dD1Q`jb-LcqKJ{7L-O z&fJIbillUJs=OeTzRV({si3%@Lp^b;J9eAJwE|y)Z>=dBRsuBe%4;lYP1*o zAsdAR)B3$k?~rQ1PFx=Cej&S>l?Mti{+Mtia5a2ncy;f;oL4YF7rTDXPnx2PKD z8Ld?MKp6s(i&QYfrSYTeROa5bgK6!?@SwnIXQArv5=B zrQ6f9Wm36?S!ApVPH{(xtc~fe)S4qL4!TxVs!AS1F{)%|h^&%appE{1$-UZRuSin; zO2*2-YGy@!<6cqUPE=MUtzhp`rbqviN$P(ldr4(L&Y0{(k^NCT*rv#MC!0y@EHJ}& zGPf{T!~E#aF)8|UpB&0vN9K%qJQSn-rh#a`pOw~iU>drR>Cqo!Qk+kBO6As^(W#*r z{V|3s`ePSJ>qwsGQTzC=7oGe8Dzv?rs?q;sQuLpzw3ilL3;+4XSk`~00r{JBlh!UY z2tzwFJ=y~%MSIXz&C+UyPWXQqv)CSBG7&}fpWl?$^2xW1k&l}B^Nlo*Q9pJB5Y{h3N>Rcwy%-K)0o zwM`+$6}_I~z3Lln3y~FZV{Y+_pV2_v?=dOv_f{RkQkUk8i3SwE?~VHNhO&Bb@7=NN z1-5aO<^3q{Lmx)|FWBNHiTnJ{eeTpghvbY49>s_kU5j{KAT3TYV`#7E7XJO6`EftO zq_`g$C{<3p%<2OtA!PNJ2BQA%C@nqG;(R(s zTHDef43#oH>LZild^$oZeAmVLRQRX+ z@$S;U8cH-df&0bvmq~H`{qaCLa!1Y>m!QagV>UHS{n;hb`T$uN`YQg5TMURifNhL| ze1TuS13EuvTi(Z$<9bH@xE^04JJ02eD=fvh9@BbUk4H+2Pj%=vUro&JPnZ<lGngh<7*4rSmR*c{lwhyCf9B(GY@&050t?-S-?0U?X6SM0v z4aD{MS!waTL>jt->2bW76vz8csqodr%zwU>DE~3Bi6Z??E|At+V0!ivw=l>T7PIq@ zNpb!Sle`V*KdDG$arnyq(X?M&ox9FyChWSx5HI*7@M+V8BKai>YKohmA; zpxU#fLRx%BHmirTkd?*sCWwsb<=mnWW4IT`b|OjTNmi%iNz97!ajz&}i?XI>drx6{ zjK4A|#$RVk<$;`0S15A)6*v48IbM}ak`|w>GN!L`3wQV|HXDCuQjEW!F4aXj<0PiY z!B4-R`QH=UV15w{@lhz4f8akfopU4v?$=~FBsqjN0 zng7EnhQD+w+JmE{#YfHb>`&anAm3Zgjt7(Cc=VL&sGL!0D8})ifjA!P_GPIjfN6-& zth4rjN!j?nRIbVyBWo1dAB?sz+JiaLIvo#vtFBOkc+r-wh@WAHtRl{b$cp$VxA?_d zXzLZ(Vp6)8hvH1xnwxW>$i32kGi#8t-UD;*SDC(0dowBJbBLsuR957it!KJaTJ$7+ zk6In1H2_XBl0CVF!R@h4UzIA8^n50HFJV!WobmbwMLw^=0+$qd{wA}fbvl@aPG$O= zQejg1HdStv$~id~ieo7*lNQ63en_oR(pn16D&lO2bn;eiVVh6-(-*ZDljLvGUwiSP zf95}*_h-+SXds?1Z7Qvoz%2LCqw7TMO z)3fDBr@?obAIF19aXh9-_2Zli#dg>$jpIQBaXikK){!&_Lz+6hM8C6xHo4+q|az?CZ+SK@`zM!$r*Qb6q}_*PZaN@URv$oB*WK&bQ*k~ z`AWBLnH(S-4rX=n?n@Ii0f?ld8h zezoo0uALsb7JG8Hh$rJ0@q8cI7%~E9)sb(p)9byth1Z&I9{w;X{JDQ`?sZ|#Xj&-p z{KO3)MIQg;a%nvbrXjvQpFK}yQan#RSt?KFjL{d0;V+$%ze%OEcG@~TTZ?oWe2)21 zznK*Edt<5oo-=w5*ek2wG!XUs(@J_;NrN!7C)3&fL{j<=oqs_p`ywmi$ym~_Mx@8} z^I+~4{Q>qLqrY~ocKdo8#PcL|BCqQX@lCavT=}r-WYt=}URHIlI*|min>s!*c7kPTl=+IGQ{lg71 z#3&(uljp&U(AM#LPP=u4*Q^k)L6N`k0{4yfiAm8u-6BhEY~vHWPjDe8JMM_QMIX^1NmWY7PZls*5K%6&Ow z_=RGeZ*(fox3i^n04fDN+mTxs)Qb*rJz-K@PY#f3k~2D_6ythA193g+F0JFiG&F?i ztiK2h#Sa*mAN!Fx<4BB0`w%1Ci;%wv+0^4U`d?Q&pXrZe>D>O0_8x$MPBrUz42Hf5 z{j3eX3nFXtt=z()o3PE!XC}q@Tq^^2PFkJdBm>QNLTK<~=0|*(6!CedfHm>uOj7?Wxn3$-yg2&LeVE05e}pUME1W5}C#}!G^z0+1vpgyJXk z>}aWcku&=H6r;b-7B%|&yGrZZ9tdA_MW=1+ig*;o$!b=&fyj#3h8_8f-_gK4{UVce z{Y;kcNe{SiMRq;qUa799FDQ%C-nciX!>Rv(s|7{%7w(Y?XToLe;UN^Ge@RcGe|fRA zE&?->oEJxfe`G$}??_4)FaSqMRWJ9D@obh_(SN3a=s)iwtqGZ-OPC(lXC}q}53 zlrtXBQjGSE;fm|?hkNihdNGoBDP~+enohpLEu4Ijs=WS0Qe1By(q11jEBybIV)(1o zr|EApL0Z3LhO`uQTyK~pf0NUs@@vk8;!f}+YoF;jY-jeYnI9zITwomrWoxrD_*qE|Bx0Z z0%l!NF0h`}K29fO?d!lTer7fI`ltM5lCJN`sWQNsh}rd?d&TwsU}b4#Z0x-^(`RXK zy-daHdr~HqDrUv?{w#{TexgcIWW1AK`jD>#GkoWB3xi{r|Cm&nls-Y#H>G-U&Ui_W zV)UPBAo|ZUq{UCp@*#m<=z3CyW*{j#5)Xqffm(hoPwKSKLfVMy{UVAHPsT6ed5p9! z-`>@cYjD%+4Y`HaT#zL5he_d2ckQ)t&avcocKo%7H;;evy+%`Z%MA6RHv989u_^NS zCrhNVN6vU>m16iyr=oxPu(b4!8Agd4kwo(3-Opoio-eA-HWIVt4f?3g?uA|8Iv{2-V9x?v# zJ-CA=BgCZCtDncD)9pgOlycc_0p|)f4LDuUIpBCfmw>|rr2+d2whq``uv0*pV4r}l zf;3=5K~=z7%sJ~&RvYk@;H-d;1ZM}lB{)BznNYk9?N)G;_z`oX_(gMrc%ivo{D!$s z%#S*Ty;||-&aV-#F;|O!G*^mu_WtGK5_73|Lvx9kON+$swLQ!7aD9>BR`F)$7I7bQ zvv@ailbBOHWB*3+;pPVMAIaTub>hF7YsC}HHDaz$5&G5QtId_-Tg~O-+s&oo zyUiuyMspjcAa*D|Vr~^bZ*CF4V{R7z&)g*LjvKA4{NioR4dU(0_2M1Ob>gDAR@}#2 zBd#!4i&Jx@_&{^HxY}GQo@Fi(A7yTPhUK4WZWSMAZV{hrZWfO*H;KoY8^u?c8^kx8 z>%}*i>%=daYsENAvv}5smzt}^SjaoeuN1Fvez};-!o=|?6=Uvu#wFtR-oNc>mLCfv zXZfw--OMfGz0J+y)Z8RK%-kp*WNr{2YpxfcZmtuLG}nqpn`^}9nybZQ&6VQ6n#;x4 zn@hzHnM=g8&24j8{%6gt;udp@_+4|e_!D!Jc;k{hevM*&lr-YsATBl6i?=e@iMe=A z=+}z3HP?u@Ggpht%$4F@%;n;~=2CHmxkStrdgAxmo?`hYnOnt&n_I-!nw!N(o14VP znj6KJnj6H|nCrz)n(M^Rnrp=i%r)Xy%+=z>=1TE$bGi5- z@wOO4iukmM`%~W#>%^y;YsH)i8un_$W6jm#i_Dc` zP6G}7a`8XRrQ*lUCF1wZZBMfN%gwFgZ_O>@pUur;evCGLuSr}mH;OkhH;DPg+R(2T zcQ)6Fw>Q^{cQDt8`B~f8zgo<1+Xh#PIbSrmTwGx;6^}NTh%Yy{VSYKTf96*4Rpu7) z)#hgLQ|2b|JaeP?MRS9=*<3GPWUdo`WUdu|W3CZ@XRa3iX08-hZRGNck2aTzk205t z`GwnvSKAXT|J~+R@dM@-@l12G_<3`a_$hOv_(gMrm`h#7@70T2&2{3>&9&km%r)X} znDiL?SBoz)SBeLj%f-XYrQ+e{67gx~wmB^S>E>23R|1RQYY|^-ZWcF~o5VBBjpC=w z4dSQG_2OsEb>e1ot$3-qM*NPsTD;6$DgM%2F8*mn;w#KG;#@tNit@hEe( z_#$(qc#^qX++Z#h&o-Bc7nJT5NHCG>N$&TX3V8b3lU| z#Jig7#mmff;`hz9;z8yb@ep&h_*iqL_-u2zc#OGJ++Z#dH=5fXWBDI4w~DzKTz3A8 zxguO}v-o3kllXIUqj-}|bNvSKR_1zf4|AQkXs#9aG}nlCGFOXxn=8fD=5q0PbE%k9 zKEwYK@zv(Gf3o~Hm|Ml1{F#+s%q7IK@{76bT5yw?%OwRjin;tLE4FEclY>&^AzJIr+$6r#+$g@%+#tTjTrZwtt`pyFt`+~=TqAzaTrHkq zt`t9FE*End!-!w0_$hOV_<3{NBP>6cK@9y?@p5yE_%m~}xJTz)ze&sm2V?(6@lECi z@ge4V@!{q=@#*GTG1oTCj=z}89tKy7Z#P$pr{&pSaXYbyt!F?y}3zzqq$Lhm$^ZFx4B;YkhxAg%Umm-W3CZ5 zo2$jInk&VN%;n&1UC*NIbet@r?QjrbsQwfInTrTAELxtI%VM*S=m*O*JhXPVm{Wcf##Tg9WzE#kkJ zo5kmuo5WX`8^za~8^kx8>&17P>%@1PYsC+mYs8%DnVtXQ$IX@ESIp(&h2~Q6VsnZ3 zU31$5EdQ70R`FNn7V$cBvzVV%&(42wM{}dNles~>ySZN6-&`l|XRZ}jn`^`a&DCNq z;2OVQDL&C$EG}nvk z&2{2y%(dbh%{Ag%&DG+6nk&W6n#;v6m`lYA%_ZVx=C=D;{*TSA;!U^A&>O&26Kscrn&7t zmj7{ct9XvNMf{|>S=?-H62ES46u)V15Wj7%7r$q&6StXb#VgG<;`XKa@u(JWX|5FS zWiA&FGM9>vHJ6C_x%)VO+NQJoXPH~Ye=@g-Z!$NF>JuDl!e8pW5I8^n{%_2N6t zb>c>It@t5xjd;GfTKtZ=Qv9>IT-*s05yPKSaeH%#cyn_b-t6m8e8Ai)?rm-nZ)a{6 zH=3KoJDMBCJDVHCmF9Z!KIS^{Mdn)ZCFUA2ml%%nRExP5cW|Zn5p%itU*=Nr)8-QK zv*xyGEdTT7R`D<97V&y>v$z|k8OHB7iObE6;=bkv@!sZo@qXqyacZs=SD9 z_2LEQI`JZNt@uCY8u7R0YVpRH*q9xE@s{Rt@xkU&F+W}&`X%DS%x(9u{QM?)i8t`z^z zTrS=YlM2ILsdy)IiFjXg+ubbx5$0C$0CS7@ICHbO#@r-6$J{9Xo4G-JrMX^QZ>|$x zW3ClnYpxMbGFOXlHdl%p%;n-K=2G!gbBXu?bK6vw|DWbo@#E$e@j`R6c!{}5ywcn# z=Gxy8{|51TbG>+DOa;u2zj#w~t$1^Djkue+T0GEPDc;>&F6LCu?D&hh0C{kU_;7RE zT`d0)bF26QbBmZulE?nd;)~2p;v3A3;#i~nb?6#r%}7nft+W0bd4+}m6t z-p|~22g`r7xmA3ExkY@ExmkRQxk-Gwxl#P0xk3D#@{cmNibtDU#OIlt#TS^H#N*73;tA#k@m1z} zF(++CdFsRun`_0K=Nb7m;#uZu@oVNv@nUni_&sx}c%`{Syb&fVhW)nNSpH7tRxy|S zkNg&KPjj=lx4B8&$J{91)7&7gGS`c*FxQFiG}nsnGS`UtQGxKMT0G5MDSp6QE`G*b zDxPUB5x2t(&8++lEdM9YZxwSgXI6gkDs!{=S96niQ`>6<|DR<*`Pqu9;g~&v*9`DX zwhC7th@7rdm0}JZUhl#Gs!5p6h_9zr^e=SdvY#{Yw5`xBZNetGA3bj@`}ri3%Bs?5 zv^_VS&%A4xSNsS&^D_-JqJ8iJDaEI$s@(K>Y7dk4&&(oY84CP#`jSL?k@BHn!Ucoz z(hA(<6yU?T#T3}rnLk&mOiG`lYDcLaoinCCQ+!ccG>~#3n&cDQn&CwsOqimRA2OZJ zW4#`V%@UcLzDDgPY2TbPUTC5CrnDHf^lfVK#X!6bib)Vv51>4SA{P#zzg*Xj{%YyF z@K;OS$={*c>mgbp<6}n@!(SQ*fBQ>|6Kv@3mP`+SIY%e+m$~6@iL^OgMvV9BDTcrF zFZ}%oxAUqON(rML@kclU=bTU$*ej7hdWkL%Hmsz=jC*L z7IviTN6|pUmq}3{)?$zdt54*NcWDe5<06Gy$y8Lw_pjQG+(s`&09Erx|o zKEU*dFN2oFm$?z&^%xz+2l8^pf)o@ZzKmz8_`WYKKB>)udKj|k?>^kZ-_5BS^?^y@ z@BP|q-<-4Ml)_&c2!FW(0al*@)8Da74}UMC81;d<;qPE+^BKGtU#g)P{?fnjm!Gb} z>sfg6NGJKkl1}o;XBK}ZMf`uq;{_~}mUE%V=a=a+L?H~MA3{u)NsEsr>Ewpkrte6l zBgGFSGB;g8?MI}o6>i9QL7rKy64|PzUs9`HTD%>sdJ^qPyfmHF-wTnKg}Nu67qJw4 z4#-l>q=BfvOp5xO$ktamV<{%=mDOJwi2B=AT72NdQtZq0sJ~h!CfYORM*VF?K32!d z8Lxs+jQUIeB7S__7H`zkNe&LvNj|j6>I0LaKHMtRrkqh=icud{QdIrrX9(hzb~-r} zXLeQ}hEt6Ca1}+h4+ErqbYJkyN$HALZhDrl^@okzumcozpJ=c)L$lr zzn>zU@E~Wbk47>4rGfC5%l6>IW?=gJBGaS(wo(j#nH&C2miD(f<9wqS{?fmwzh_H} zBSmy_0MhB?_RNp?Gb!SKfK(68885S7udM#kK-Ayv(&Fo|bn;iGNBwPwq^$nxWm(nV z|Kb$DQa{X!`m1+cqyDnKM*VG;7Q4e)rRAMj7T+6i(@fWga|_qE!ZwR9lOn!X$-tj- z#+8<0#FqvlzNbp-eK1|u8=(>3rBsRdGB@JO*$y~Y;7Qg#=%vGmFa3-7ZY(X{+0euTIcD)?QpA^E8NqwNIpgJjiqSsMK*Tq`40QowK_}m5dc;>>&x-bexzRpcCz}`M zj9No6;>&nOd~2n3IJ#?DP`^V@nEvMPcNx}NN*z1V4&|JnOi;V%t@za6E; zm!0VE4@?h#yCEs756lgJKR_FcwmxSx9TdY~`WOB-N$XWGzv^`nx3FEq{D^-YMV^n5 zn|{hx@Cxm9FSE#4oq^&iiL{k|L#?6G(pycixrphXNkuO{{a2!1a9U06-K70Hwa9pB znr}6=N!*#@FVrf5R)-=xCedAf;97L2%lZaP5$qW-NpL{G6@m)_#uAFxqaznQQhcL% zhWSaL&O`PUm3r5khoy(C*IiHQ{2PcMSO#~y?By&&DAXbB{`C{DH1`xAX6_WGWL&T%Z z2Z^6E_Y*&B?kRrT+(rC>xxIKLI;vUu|HkrvYF;V+-u#yMTk`_(F!WDj|JmZ9=IP>b z=9|R}%@f4iqmP=EU)Cb=$ZVPD70Me$1q@UeQ4>+dXCPJmIVi z4ij%*C_6sOIaxVKR3|-oj~d0R@B``Bv{1Z;B8Q{mXVaf(XSTGu!5Q8O&7(WGbDKle z&!x(w^ed`fE!EbXv9vU=HTeiGgIhyIbmBU>U0DhOEIFuorU^*^xYZib6UmDYx^P1iN#9rZy&-mDK83Pi5rnRJu(#yMlX zCyJ~O;a^&y>ubMTiBjW)rjva6dB*hRXme<+Us>@MSS0;$oPh>bQ9XX zO7 z)Y@BG$DoZ=e5u`4Dw`uI?Iw}A>2}oKNZLbl#`;YZdrFJ#Y`P1zR-$WJC|-xUQ}u!x z+Y8Zm&BoIfqFbIt{YUJ;s4wRhQJ+QwQD2!9_4PK{(hBpezZhF&)_RFFkaEN$86&M3 zu+36jk8Rc-G*FEC%G{{02T8jrXDmrcG2%!6B7QxjwJW;qbn+9V)5&GbkNV1_Xb-+a z`3l9abH=L9*h}>Ri+ob-OeeXRHw@4qob1o^s1GMojP`)J(H`6_ZH;F~eHe&@l=T4% zno;DZjFXF`RYcXyf;t*r)8Ai_L4Wz?OXe?=!rue6*WOUg>hA!GJm2uBk)r(N66|Q@ zaLDQJWlRr$*Ha9CnH&D{{svk(W6Ty#W&YB?@b?vIag3Z*c|5nU{TJp({4b>#^_96P z>uYk8_PQ=-EHp%s^*0-DFQe9Ys2$WT^Xbi%|E)Hg69os{MKgl>$$!az_27$oQg_ zqsWhWB(tP-9&FR~O|Z@4+lyixf95Kl$pmR%o-@uIimVSccE&f06|obkMfBI6sj(sJ5fk24Rg2yMe=S8TKRY6Zt=511S6 z!CTTEi6Cb2eUc*Mi;F$Q3fi10tb0gcMQewm$~6D-}b~>_c`N$z^Tk%`WODLlmFL%8Q;O&!uDRw zXZ$gsOmSz4%uP9ho4hO@nKMd9v9D5TE3Kr~G%-J(s`z4??yjV*DE4!1$_JClSn;mR zB4e35imAjN=oY63Qfm`UhMt_(Q;Xg5CjV2=)j#QBV_bgy778 z{RMRaeF?>S^iqS%#1qY(#k0)o&!_$q=GEe7%`3#8nU{$9(bBL#U)!^gn58?AM{&e|GwfnbD8)Ob7%1l=JjJ){^!iA z#oM6k8TM9)`brz-XzBkp1zA>P$ISlq`vK)jE+ zuej1&CO*sDS$vLp{a;xAd(ErG_n23R*^-BUOT_!*QWZR3e3J8LiEGW%#Ali(ipN#vvLR@VgEI!;kKs?FZS6qSa zZP+gpbDSx-v$)B;9y1j?6u&pG7XNHsA?}3!YV5y6+}k`~Jk~r*e1&Jh9xS>B@yt8?X_#E>H@p;ULqcEo-dwgo+aKAz2Nx$Y2vNTlf_)~ zHY>lF%i#u(5&y$HLcERcjw&u;hoMMZv#L(hpa&6h3he4DjUcBlYK>9IH-d^7V-plt zOY3loZPa3OfLWE9p`)4pwN#jtuA$1;XmKzknKQm7gczhhNlWv7*HP;gX}yZxTh(1C z1isJ!E#Byz%q^T8!o5D$UQCj|$xYhpl$`N7AByxp49MSvpZ_To*|Ve}_CV7wq{1Zm zn;b3`b~ZEr+0T^!_|y(X`kSyZ#`q|@SQ<@1It{W5ntm>W?0qW!$xmq4@d+;U9<$>y zf?^yG8i?cZZ)vg5MMF1Wn|>ohOiI7UzvQ1%c`;{9k z(9mzF_xNB{&KQ@b81bf45%2e;bqhKt^o*S%8f0fF{f`VXDP>WUN2SVsk{F|z6eHd= z5b?fRT0;;38tRX2%Js%jZz!&!p);g%NzR2L`!-p;8M%mem9)-5w;~H4dnk00Jsa9) zk0*UkwwWYG?B`_u(t!L;R-$u(Zz$0q46&<|ek4OolD|pJGCexyLh(3? z^uJJ~Q}Q?AQZg~Gm7d*-bQO}N$#9{=D! z4gC$<;l4*{w=h$s;L!mA2-{7JEcue5;D$>(Ziu^et*#FRg#jAPlj;lfEVuCZ%su zC1#o4moui`QG8okbShm&Ev~PGj~1atqh}l{q`^0tzfh`7O5dPr%rgBkXAHJsuXL%j zXh8KN`5tv3COgy6J4|0970uUep`j&G(WG25hU5^g^nHnpoa#ryPB}jGgsw*xzWdM% zqLZ8`OWT@I`;zw3+*$gYT%f%)fj0cV3)=F(P^1C*n;b1IcC%>c1Ew#MAtuS+WH+g> zr#-(eANlFERb3&m3?eju%w)l02EOKV&7M6!y=kBVfGJPiFS`uh-e z&r1W_j;7V@z3OH?(ah;_Y@umUQk7NUBt)f8~V#h6gLE218U#6jt(Ey?- z_<1p=4O5JG)2WE}Gt!!Yo*6yk6ki&AkoogvP_urUX>hVsHT9Q_(R1vT#hV7Q`Y$bZ z^=N1T(_fJ`lhVaB#Mcz?8PJ^Zofm{Fi#H<|@s2S}_NlV)eU2c) z-y~+OvS*n2&rV?){?dT_O`35nLURqi#IlKf4kOXbv@F}s!`{l_QbDYAYf zmr3h=Fg?46TNu2P`Efj$6vyLOsZP%sWAYT^c+fyr|D`nmJwF=ijBVB)F-h%F!ij+B zSmlf_AyZ`gggzBVTY0@rcs=V-ti=E5Qf`M%VTZCq0y+y03+Ny?BH+hUsdiz&D#7Ie z%L&Ex9s^x0u0{_a^5=;kH_sG*W}YhE7!7skPZD=BUnZ_Jj~2gg9xh&D9wc6EPQ}0e ze@vZwfLBxZ|1b5yLZ)OXN}XAo5$U_c~|&zJJV|_1bIgwfEY4pUdZ*efA0NB<^e%Xp3y z#8tuTP9?rmf>(-93tlE39=uR|Z}1%Pxpr0NHAAE{4eeFQ#{!;P!(039a8~UBZ zCkHnZ^FDy*Uw1O`Ul_bnJU)1txLeeJp?E;>95LVic7M~wvw|mzUkx53ekXXS__N>( z#9s%WB3>1Iq`0YFNM!MgI|O$U9~!)q_@v-w;uC|{^&|evf>(-p^6CDUiSGzrDE=jQ zj(B14bn!-ZvE}(Eim$f|Ip;Crk-q?kwPS^VP5?IO>)lXwTa zZgSp9To&9+ykGFTlZgM8;FaPBf|rS>1TPdn8azilJ$SnK{osk>c6Mc!#V=kP`k`We zb-Vro@x#HVi23%X>yH#~W*2VGsd$s%PGVlXa{W%?w!zKB-`bUz>(`w~{67V+6dxYE zOgu4op_tc^J^vi>vf%0BHNg|bo7>fw+m8_+8$48ePVfcdn&4B!sa-%QL`-<;Q-K>XL)Rhjcj zab55-F`puH{X%hl@Eq|Tc8%rw>EdmJCyI9p9wX+vUv58CJUjRT@ms;Ch(8ZLQv7Xj zDn8n-q}*R8aaHh6;{L(S#C&GU?bjVo{G)?citi0xCY}_$P&_$!j(BSDbn$1w6UAHE zwVIbVMtpGaP;tND3&h*UJ-<`L8wVe0{D1BN@?vSlAUiwQJvck(SKMwF0`@AVJ<_e% z!~PYDPui7O#f|pQZY$VDT*b4x^)=4^cRje!W=Ff++@J5w720fxDv_ym4z`oZm_GbrqLAL1tx(Wakcy`8LQV{O;BPm}(UOh`&U z#pKt$$^ClHUfq-xQj$-lT1{@7^3cH6%KQjZ)w%cyBGt|oI-s)26y^F3l~;ZhB45t4 zJ4T3&SY0ElW2}MjS#Dd!S148>@@vIz8X>YaOLB~?FT&d5IGuFjD-=me|AR?qnM}&r zdmvqbYHO)%+If?Tx2ytof5t>YT7^R^{#9}PuC%|TXQ ze5t<4JKH@_L_R#2 zbeHOBW8$b~Yh~J-HFny z5_5-%Za218lbvz!hI|(h-;szmeIH*Pz~BHDBrK9}r;iuEjrZa>m}ylaUIjrW-{(fw|3Z$j|)zFVpv$!&4G$=1qz9Q}JL z=m|vMf6;2ZB-P6GNzOJI5z)sFzI?nND64kXa`^n2bRR#zA+rA#ifDbjG?(=-tSyeS zNhdzLWsLY0p|0!--;}eBD#UM4eIQji2Rh$@F1EuRA^mA46kms__s1`Y^oMJ8yh+B% z!FHA_JN}%C==H^ykN5Lr^(wy2=S`%0f82`b^+oITO=VrQN)b{k+h*gPBya!iWzsQc zJI)~L`1ALk)bK*%t``=HhqJXZd!YCJI0Vu6U$lNaeN(xP$J)v~j&vViB>D05VVRtl zvzOuVjh5<8a$8v=G4c4uAbNagJ-$<9{V3K})+Ew>e39hwB{JdlU$LKyJib;^F@Ln8 zpN(;wx@$izvwduU%?!ypvL5%=k#DfIN@*>VXViPV5t`1Dh&G+WNLbJXUvK4HC@w^N zRaW@Y{+T=|t8J|qeEvrI%Q9Jq$VH7ELQR|U_IXkxYbJOTXdBXBk%{JfzmCZ`zM{`U=}Lx4^3WkLv`$=cY*cEFFiFaPJ_9w~P|5=%I$l0D4AaZ?>+#}VE#_VH#*;<(u=)FIVMx;Mn ztM*R@DAyHOTbcbZ@pwq`@pZ6FM&@kq*&xy%$*xkd3(0Y9T>qObC zZ9rMvr_ACb$>aM-CcGRZE)?0PJiZsD`eY01GH%4#P0P(q{6d!)Oc(8XUZFUat<_{F za&h0*DvS7}M6_ug^}eVRs@rq6o5Lph*UBfGzS7kEVe9cwfbT!$mR=}sZe>$Y!M54{ z!)H*kc+h%08_N1btQn=GbKBU~hd|_-H2F_Q_{^L=E?plb3#2;NLS|^TW@}~Mg{hCn z`w+dq(0YH}rd*wJwr_nS`u>A2-+#`R)s4pZJfC#$uZt1cf2{2gIbSCS%KBxjEsmL_ zb37;%N%H>LK_+kJTqx32ewn?#1EyazkG<_k6A7saTPyxQn7$x~D-r$pg;wJ!d07sc z=WLHh5WT+m^6_<-tS&Ofr=I=!@kDC!v>*QZG@nM_CJ z*Q(!)_RF`gPxovOTi>;OUEqd>db%=gEKan4ZFOqzG)yssZ zjaht@;qg5$6?c&+i^XxW@pccQ$A{MA8!hWsv9_|f*ObLal8>)}GMS%qp~w#{kMBsS zKC(Lw74O?cfL*+{FtLYDZXHWa^b1IyKW9hK6HTN~_hxJL`wm}ss881;-XjrhI*G>p zemC59&)J^PB2JMNzO?@)^JR5~F+NWr{Xv&K_}WW9y8GjVKSTg7Luh#@|O!^dUPGG}{v3h`M~ zPLqxUzmNI!XXWw^peU$v#4%1Jzi5;jr;#)e2{f1AAZaG`4$xNR%g6h0S#c{BpMR15fULQjnm#NMZTc8KkC*ix zSX*=*NcZ+7$;bO%GTAR@+l3Js?@3Fk#uyXF@ocTkL(xxELB}Eb{)<-QCHbl?l|Mb_ zLh%elA3yl=@iSXiPa5O%KGJ>sJb>uq1#PPFa*M3r!rJ0^iFD$#i)q9eRQ5cXe2}yE zN;(r&Z>i?l?cIvi>Kf(+5Yn$WwBkP_m-mNO>hktStM*T}kb@?cE9;M@h+bdKG0^em z+cIj@8{g(r6ArvT+GFkYMeFr_QP#I&eW+bO*w!ytZnqlWZaV(xE8@4^G4!NeYC8VV zy=H&Og$DLy9_O$vD21r&k>jK)+L50#+xwPI?OsRk*TZij`t=7|o$r#Jl3p92z6%AhltXrYrwl*8e<9VylxbzLz$|YFvaTlm zC0UcCc#>OWa$nAN9}Q9QT`CphG5f7{zukt;PG`gI4tBOTG8uv{-c2R+Q^gc4 zDZN)BTJ2BCj&i$m&K3ot_opUSX#e`PNEeruF@4eH*w3))vPBr2F}iBtJhclgXf*ZN34b zj?b@3#oUanYnquzNS~Vt#lL{5_s6@4etbi#_D`;rgXKBfc>~ewi!a~5`pN1-Fs<>u0gHknSYi&yOT|`)?u>%`x%wiKdt6_s36mr`ryk)=cbUJg1<{ z56J5M@e!gQFVOn=@plMUvu4?vP3AoV^T>?@Fo8CAXE;2NRF)3`CC) zt;ctytZ%~F%DRShkB_A6{4bMRb1oFwr~LY53#piJlI>Wt>`_M6dnG2)d)&36CXD~| z7W-#ECJ;HExi+0(V)B|jHLxouRIp7NLiF}+gmhQ*Su^Agfx_`70&~vtUt~`^!7)q_D@(((AFx=*^U*6USE9q z`Mrs(cvytb1*Cg_5NlRnv|eA9cCl&BSX)Tnk?#95N#6cX$z*G*cQ*bBAshcvU1-dX z#XKU)Y=z$YV;4lf-qkE4+CO2ol|_rSm3cTOKE6ou@s-L%YZH2Wl;QC))!$bkq^zN& zdwdfRy+5=@A^UT(+Wr-a&zg#|p2o!EBgx}q&&Xyz`T3)%?M@ya*O&GMgH7`XZDsr0 zgS|Gb{i)lwf}I>T5$v8l|4T6I?63+bPH2+*Xb{&1FA`4)o-2Mbc!v0y;7Q^+!DGd5 z1P>Fx6Ff+~EV#dTX>f1x(HrFT>n{F2^j*Y12e%fl32rX#7WvojN4(vGSBa~F8^o*& z;_b6YJScds_<`UV;u*n{#IFU96@L^wO#E~3Ao1_P{lzUy^74C&y99R^?-ATZ{C99` z@#n$K#b*bv->v?&7tyfgbt303;+C7_+*(`=ZZ573UcVRd4-8%-Qx7D}z^wM+G;CZwg){t__|mo*g_x%ojYe_{DDoj}mjtg8-xS;+X2mKmZ;_Z~tDNVGS-Z-4hM2XgoF|D{ zu*!L?m<6kxhlw|^=RwYc#9IdU7qgU=>wAlj3hplM7u-dBMR05J#lg+Rd_ltft+&Zh zCB-$ttHc}IGa1)6h#Nw`Nc>&!T=8GQGsNYQf0B4hdrac~#)^*${V?&M;6dV=;Qrz} zf_sba4el;}IJk@Wh2YlW*Mggi-wa;giTJ+>UM2oMxIz3+@FFn_czHZ?#jN7xJVV?k zc#`;};IZOUgNKRF4<01`DY(D*_Tb*)hl9I|9}DgxUK-q5%=@BVzvklI?O~Gh`i{i^ zui#Z;78i4UgZRqeMdJCvbH$5;XNXq>PZF;R9xE=f2Quz|n3!eCoCk?n!OXe8xKnU% zaj)R+;sb-bh>r|zEgllwTwD{pz60@J6TC`%b8v%rX7D2Mtl+ugSAu7V-wd84ekXXW zxPv`u$>JCP5c)ylpMv{~n}mIDG3%;%{_bKHS99(nE)8xi-Y>Yhc(35~HfhrOKX{e6 zcW{H46$Rb@BJs4~x#A~-XNW%yo+RGZ9)5WKvEr{oKTNz$=m&{^41Is`AHluFe+PFL zZyNc#h?@ns7IzG8F76V%emCMzf>((T3T_bh3SK0x3Z5%IA$W#(a_}VaBf(?Ew*(Ip z-yb|k{9tf@@r>Z!;+KQFi{B3JBK|PAwfKwR=HiCn_3erOhu~G>-+~*&eBdnWfANOF zbH%Ki=lU69mfCZkB;GA}toWGVVd9g52Z{R!_ZOcU+*^EeaCh--!Ck~-gIkNI1veMZ z4_?13@xKwgO8i!EgZP8sMdJG4x#Ew5XNW%yo+RES+GnhI*Wh8|-GT>+S#i+YufLcT z2c3J1?+)%RzCXB&_~YQ#;$MQBi#N6hG45}DJK`@5UL|f7+#qIELbqQeJ|uXqn2-Iq zeuns%;7MZELUjFDG3ypO4-?-M_JhP@g8Pd{1osw?3hpi*AKXQJcW`U*eZkGeGlSQ+ zCH~pLtHi5=8^kQdn8h#NC+a^}d`$2Rab@r%@x{So#gl@EiC+vJBz`ZrznB#rz5L$d zuYo4vR+*{l`xV!lH;4b1m!L7w-1~(U99lX8`@w5J?m$ynh zGq^$gO7J4_o56F%9|g}4FAJU|{yuoD_^;q$;!=COr|zE$$QCTzp3G`qsqHBhM^;@zuc%;=6(uiRTB;6+aU^L;PIuBr$8Dy8p4_4TFan z|DTt+?z02$cnt_Jy>lhs~&a} zgNJUKe0{r2wDisdiD=V_ST7N4z9nok;CQ0;pu{~9A2Bg`+Wy%}VR578jaD>VleqEx zocPzc5&4Mtp1ARMr}%;3k>cIM-{s=+xbbqfn1w^U;Z6{@j307`in~NZ?j!CRysPp5 zY1psLaYc7~Ok%Ij*v;$;zFuHcqV2zZfT8$@1=n@|?8P!`_JMXkKYNkv0uz&|R_#LZ zE3-;r&yZe%imyl6w^?yyk1V&eZF;UuNJ=ll%I*WUGQrZ`j4`srF$39oAhb2B^Y1pwnQ}zs;l<|-}B>P?L zr$GgMYwLK}U6HKG&axXoRQGTjuN1h0-LOj!mIIPfR?JP#kb~QEE)>a?^5KZ&P^n(R zi{(C-^h)I>DLo96GMVt&yx5CRk3zMvR157#A$2&{_7S{P+crH=UPwxbFZtYdSerm% zzpusi){Ny!S->}WO{$$NK601XHtnw5B&ED%mQ0dKF=tyW3Gr}LBcz&d7d90fgKRx& zyXNlN$Ciw@-vV8`TGQAz-9rv9HPPF=l`*UNlFqgQSBYHxjXmtH)E-GIsd(3#I{s-z zqzA}^r1T(i|0(A6XK|rOol-v9k$frDDR%KeJN;wnc+ngp-m~+hbbm~r6*n_evCXbV zq&<>*q?&^l%gwykbl*ryd6bz95qGnz1hGx`MD+1cVdp*{567BSi9Yu0hq#*UbuPBC ziW{lf@4P*NUeG z4;McYTqFJ_xLUkp-21N*|0_<3mEzjqa`D-A#PIr*iCLG-xm3&-cAZPaqvGD~>TQXC zYH*{N746)luiFjS`>TQVsvG}dqD4u4A3Ae8ozaBhKyptUO zTwf<{5biqn1X)GwV^kNj zX_a1Xn`F{HShN=u+H_2>Lf7Wl^jehHqbyD|CtZt$HfN;&mU3WvHCv^p{O(Np$?gra z6Wh5TafGa>N6IY9q?@b`v??;`?t8r2wQN25D`eV$c#TA~>2PxWy*Fj8%h}#dFbC<4 zvci|at5N>R9bJ=j&kr1Dw;W4KGo}sFV#2M zP*ygrO+M`*ca!vbStp2IU$kD|CEajzG}acK|i#HjwW9@hu|#VP|PX z-u+0L%Q~^qOdOlrR`J;oE6d5!J?BD^9YAx{lMkfoz-7k>YhM4IRq?b9oN}dP`R1xJ8!x)(_wj<($IC~1QL`~Q z7m5!fdi&zb+joYnzBb0^Y|>!oxD7{T2q+`v5;`heX4<-jA`uIkx@ttfS2hZhfD?=c9eevbv zVOduy%{RyJ$(I^5-m@=~F}_{v^?g#-S_i;Fx*Kb6f4%&#_P<#s-=KmEMMBVA=j39k zm>fkM+p@JXe?#y6u@=$CH(Ed5?5|wg=WOq`BKo^d_|n|%q=l>!V|;cY-TR{)k^aa& zl*Zict~Z=<#trgh2n#Ve*AmP#D4rLYQkx# zrCIVf#AJ?Tn)|-BvNIK{YibLpD1-HQ6ZXgNyZ9e%>vNm6P{1TZdjW@HG`D$?nc1SL zIom4Lh|^?6U_O_Bnyj|6n2GL3ODDQ7(ED8Gm54r<8LiLN_O%3l&ACwg9q|eIZf3qb zI^L6_yu`}jkE?;V;BG3EiC7et+BSQ4R!b4QVJ7zbk<@pv-bmI%u(tlaob-7zA<5sJ zZQO$_Lv!{{^mk|9lxiEhFwSq(AI!4aE0NOwN}zOE41$%f@E!E|cW#f0#_Z%-QZ&*skX9mUotl`Ahjr#q5P| zX@5J*M55z!Cq&ndT+>xN_tmm@InnyNLSJ>FW=G|0cL)$?D+9jNzR7G^jW)*TAkz7b zYoBsN5B*M8h zSu<~pIG9hCz57R!zZ>_EOs3^*uT~*0q(-Bp+GLC98YYO*HGIj1;+bHU^#^m$)E}-@ z`zMFW!D>|AAIvz*>WeQQ?`>rDAim9K3(~zm_ClmT>==r;fJ*(+0bYW&h4dKdKHf?4 z_Fp8E^*P&uycUA5eKAuiR!1O?UD#Tgo1*vrXpZRnFIs zXKrg<^QWCo3PtAXRB%0L_gl9z@ot^Qxc!}7`h9MBiFqy{64Cnj9VzRFu(m$Bn{?jgvlrM9IesM7GGXRcc076BM86BjyFdGx znm=qAFG;!V`IcyQxZ^7~#QCx1qfW2l%Fn0oA^Q0Vt%f&wRdpo~gV#_(2 zEq_bpwTD%tANSpxaLoCfKhyna+vF1y?E1$Hs2)o>c=b46e`$YDnV!F&O|~UxOrQQL zku2#SCMI{t#qgZ74}-3k6|Ir-NIMxMtJAEZ=lr`FPQ>?#kOYVEIwhq6G^bKS}Qd+>| zHJLn;bD>BFr_E4Jm5Nzg6+fwKe==3qEA29etrgD%xb(j&em3H7649oA64Kdnz)B7M z4y6k}w#0objlXY9#vXYiD~&CyhuRB{gU=s&xTLiF*4R^uxfC$~&K%f{OTM8=!F@`>1-!q1ZxQ^@c+n{>vT9exlQU-ou4 z;#OFvvR<0A9kmgCJWy4Qhh$q>J;);_t1r{Z@U2fqY$k`yI7_#bh&J5@-(MCfYmc1m zqwI)29`NPk;YC?(#WN=J`55Uf<>)U&*0HsBk9pk0yRFF>Su+8Qj@gNH9}gt?csN%k z$L8#O{JAhOD^ zJrqVP$7%~%HL-z>Po{;X#Aoe@xTi$4DR!-EzX(;@F0C;`5|*FHByN$$qF{ z-)Yi)Q9UFT#b#@)b+$btyEeHApB5e8*PtdnaKL!B`;CY`e$o2)Jwd*P=4?kMMBo4M zrS?sjePOpNjPW^^bU(h$MD+b1ZMOf*`g5!;I;Nau?Msp$&l+rAimf?o_0HOx5WKya z(qcb+j9Dx0AhxMJd9|&d8#$kiHyi#q_Hlf)Ue5D-7WGeZgkTuNcS@_ z;q`I<7zn}LiHY|Y*DC6->{B88W8F^H40(dv!nRrekmUWdflTlrwtn+M7~JpT8*c~*Al2h<>TvBM6WNte0=d;IQy++|M9tk zbRS>L@5<_n*6Yh!19oALwS}|?>Fh6_l=AR6=^_(8S10xm(galtsh+X_#Bn`aE3*ft zzQ0hJto_mY{_=$iU@hycKORS2d#mfq>UYXaBK@y_Yu^uhH z-CCbGhS)Z1f0DfY2g>BrobBch;=$x*-HDPSKmGk7*F}G9U~l6e;&6uGK!-kp-5h!e zIyvkw=;P2?aHc~W!MP5lK=D31&N`Qf7X+`i*Un3d3xgZQ9|YHn7YEN1Gq1<})ro%y z{bcc9!L?!@L%IEMF{?~F*N9IIt`^q>SBb92o;70NK;Ck@}C3$`4iMI%@6K@$jS!^$yX7SaEc?y-qFFqi+M%>meP+VUvJ}$UQ zd~VoRiZ2T;7he-xCcZ7WRD4HpiFiiv>b1nrvnVgWQ9LuaUi_cndE)Pa>%>i>zLUjU z1lNl94<0T)D7Z#^XmGWdHFLc_RpQfvE5+vrmy2%;E)zc|S$hl|Gr*NATkt`M^enV82>ZeJ??Hn>F0Gbq=uw&%|!#s392 zig(;N*Vl`82%ab2HMmY(7Cc$JXK<}}pWxx*1A}YCJ%g*oy@IR6M+8@jS^C=RUoJi~ zxJ-O)aH)8BaEbWF;MJ>%|DoVU@#DeuVjkmodGo|P^>VHg^AQH;$>P_7YsEZ>a{X}e z8^JYVma%qywYWaGO3WiF*H?-^2`(4&T*~!j;)dW-F;A#mUn2e~c=a#D|66dQcwKP4 zc=Jv2{PVkT)aNGM%>!& zk9hgj;%$Sg#5)F8iVp}b7k3XX6Y~hm{gsMYyxX}%Tob(7mfE@dZ+TLssO`Btpgf4KPA;2QC{ zVP7r2Ft|!QBDhjKD!5!cCb&#|TX3m(d~k{QvEbD|5&w(9jpCPs>&34G&l7(cTqo{n zPm?^p$>L3dYsIYpoy9NSCb&ji9$YPcD7Z@ecyOioli+gkKfz^U9$9&LrQ*$kOT=3S zul|wv%Yqxl9fRw|dj!uD?-N`n?iD;)%=~XJzgGM}@Nn_t!8PK)f~&>N>`{^DuM+Pc zTq(XfxLmxYJc_@v-!@x{Sa;=#d{;{OGgi;oNcW#S`)OT}Y?OT>2sul|Af z?+I=cPY$jZKN37o{6cV@n1_lU-(>Mi!L{Pof`^M21=om|1Xqhc4XzUZ7+fjdz@CeE zdFA5Gg3H8P2bYRl2bYN32e1B~_&WqQicb!%7oQqDPkdHzo%o{Q$>M8*YsI62hl}qD zt`ScTt`H>fW#U7FOT||OmxwP3 zUi~fc4-Re=|2w!|e0}gd@rd9$@e9F|#jF|b^{o~E5&Gfczk_SUg|M#{vqHJ&uM%$& zTqzzJTrM6MTqeFSxKw<5aEbW-;MMjp)2{!68^u$D>&1@+&lArGt`pA*o-CdlTq|yE z&xJgm;o>htUnBl1xLVv8TqRx+Tq)i={FRGWg}zL@KDbnTbl8`OYl2tXH+xHp*9A9< zhX>b-Zw{U(zBRZ`%zEM;-(>NN!L{P|f`^Nj1lNf9Vz=k77Vl#ZeX{-+9}!$BK03Hu zToqgD&k(=>gB}WCAd+1RB*lcq2PJq z$Ajy{P3@_Z`#TTF{^+(4;LR5Tq8a%xLSNdaFzI!;7W04d(z|n%EdQ?zD#^$ zaH*KpyxqP;{Cn`~M&kb?xKX?=xL#b0^5%(m4XzXOc+CAz7IzD-6(_;N#XKl;`x-~C_}2wDiZ`&QM_#{r@wUP9#2tg{ z#7XdE@d3fL;>zIR;zNUL#3O>M#a9PciLVQ;6ps!r7mo`r6SL;H*S}O;A6z0{61@5= z;{PJJQQW~EM`iJg_XwUR-aEKXykGESaS~iBt_U73J~+5W%q(dyuUgEUXXh&MZNZgd z=0dx^T+G}!=Q8m=_JGB?RLnDZ=Mr&g@M?P$P*Us~+$iQjl-t*fj|iS8J~y~d{7&#> z@yy^_@oT}u#oqCojKBTozm@<{6pm%f(%T%f$Nxmx_57n8h!y3|`$p z{MQ9HidiE(i(mX`@H{b(&0Jq6W|?p2$>Mpzwc?M1hl{K2QJCA;hvy#Mv3{cx)|#_l%TV_dt3S25BaRM^LU?0-d9d!}Qr8`+boitFrOq0PXq z<%R9KmKOGZ*zRW7OJ7ggCb`efB=+Xl43gR$oX*sCVEO{O>(CV!S!N#ky<%JC@uaj4 z6Hcu5^codxUxq|{ULr-OFJZNxtn5itldk`=R|eRc!=i1|CuB-e`V6L<%k+bsZEh># zELq_oorBd1yPmKYA}mZEh}tWTHn&VBw(^_JEt7~geHm*e@Yro z)yis`JxQpz*J@tSJ3!R;BQv4C(=qk>lH~P0Rk^;%**=$Hk5;n!>Lnu8cVAguU@9C9 zz{KlIk~ek>nQUamXZ6>6Jk;MNX^~2O6Q)R6z}Df^>^n=x;d|)4{Yg^$C-Y?bea?mA zT15K89i*?}@IG11v*!V{Q)mgPPZ_&x)tisMnblRcAF{s@|7ekIDf_YTsmIIk+rm`}_hTu++-R`}q(D$rpB`#D*;ntx;3bxtD7nazuPzBHHvL zte=wgYdPCTe-J;F6-UyP=#$a1ddUt%6_49~ZS%BjI942?kxY5n;bEfPlOhV%0VN8} z-hNWPNb=)jg?wo?x9^{)q4MJ+4*dAIovc`Z6GtrEnLaB=Bx!$4el^MF1e#&Cf8LAe z`zMw1{d1A5SUHlK4YDT0;Wy}g{F9{dkno+n>_cciJ`S*4*?7Q#A8)Ra)iNAf``%7E z>j2yPyof%2(Q5oA$H-b!V|{$IvzF8N@J7^lNIJ-h-%LG&Et2wD&Uy{7O zEZ=G$jLq3zw?OpcBM!X2@5yR2^G$tOf-$SFz6a*@MeFr_K-OF2Y~OxHWdF0NPKb=( zEUP!{hYfSuwzRDu z+^3t}bkp(2xp<-S9c=pa1Bqlwd2=bbO)lQf*(M~*i=8%`Fec73HEsR9veDG(Dzf!c zw)^aoJR8sJOhr_zI7d_`V9N2@lhUQ+YO7qDEeIEitVfrAArS{@BUXRgq0?TlG2aZ8 zO>CR;tynuyB7P}R^ZUNW`h8iSi3+xN4G_J))X(e7!yua=XqTu|@>5HvlDx~J>)VDp(yC#&_Zy&LjfqhYTf6&wjO>zc!jt= zc!~JG!3)H{2G0_Aw%yD9O%LejL0)%y;fRo+aYa;00o?R$V_!d{*#O@rA(? z#0A@5+nU#C&qt z^|QqNLqAn~U+@I+Tfw8mO(Opg@$ta}#S?@3iW`D^iB|;gE56t+VZA=>#YfoXr*lg& zAM|xDhz|>1`!4a<2Con=3|=Bm?V{21FA(#ETjyEg-Gir!M+Z+3KNCDk{A}f zzky<2pmOdjKEy5poqLJD3H`oezF_P6_F^tyom+~V2N%Q#2CrR6{09fG5KjtTB7P`% zfp|*rEb-Lfsp6-CCy48VM~T-44-v1hi%GBVKygRA1ampCQRwzl#eB`vd4l+kupcG9 zKX{0k&xyMIKr!DGb?z(XTcXar#9M{`eZ{=Ub&-C;(sT2 zh4^&4*mV68@fpDj#D9eSEb&gEpDOMfJVD$qc$E0Y;347%g9nQL3hpc3)UGzYKE1@n z;C;nCgWHR%gIkJk3NDE64_^Bg@$=TS`(GihjC;{b#Jncr`UT<_gJ+3(nZxx{#k|zv zJV87lc$E0OxOY25d`<8`F|SE@{=Q<~pm6SG{D1EC@o2~<)*L>A zey~hQO0U3lzD$?o?77lwP)(DnA zJU(Z;XMpJSrzT$iH)M5_^&CILPGD=*`5FEBa!68oF%IvQ>BTwQOPh$^KREFIxlC3Q zjd3)F^h@Q4q;v?5j+4p#IcN8@hsuh9lwOBbCt2}*zKUK}9ea!2F7Yd#Q1f**k>=Zu ztrf#p2-B10fTZ+v9Q@FhTzr5~Y(HQT&qDRSRQ-*+CU)jPEeB z}*Yy^)IW0`kqy!0e$ECtc)^Pv@{!pADBqZSlJif zEGVk>@g$AMV%D~8a4>|q#@NQ*f!;Db5GKEOtzKjA*g(O9)ZaCw9$*G{`q+qc$zVeYDi~tjwfk6 zChy8*HYy*V3lJHfeqc)(kI7V7v95K+xh1IXv$0XpLF4gF`-zsdq!#(ImORLkC~+me zj*u^s(qr&-vV5JBbGG;w<10Bxs@t;MV=y^Nxk*Zo!(?Zf+?%s~3Ldeqtf)zP3RY{2 zRI8JdCqoA9I=nAv~>DOSo!P7t?c(( zMGuWLZgp4O*Mx@XZerIX?Ys_uR{y9*zW z??`nOuB^r-C6?zvOyZ^|N1~w58ToGKaevt3N%- z`>(G|^}xo*qn_0;9_?WX88rS_Tirg+j6-wu6zSf7Bzgb&r_Ddl*P z{szmWt(7UZmPPdXQxmWM(XzVBE~aQRZhPZ!40<1bB>DI&lj&Y&n)Oc)L?3@R@bSlo z4y=E0XpZhB-NzqEKK?$H$+J1z@>qyI{c(uXa2}GRJF8DgN_Sz9oGP~mg8;=fD!o-YN3pf){EohrOi4=1Fnv#^{d4wQ z>29ca_u6)XEcX?dv{7!7(sr1PlgYI?+i3x@gRE$yvTCJ~~Iu z8Zm95TqLF2lZ#m}c4*7lc6Q69`X|2J!zFmJ+^3Pgt#Xr;?nrK54&|zxZ8t^q`co6H zKg-Y9Vhomn(Z@H}a5xP8HgZT(x&sbIsbll`;T z$PtV7FF8df3|n!b$T2bHxaC7E?TFPrvU(McO4SB0mV0Z`3zlvzjMxm5Su)`xWnx=)0C6i>Q4_Uy za+|D}bU}6aL>Ufyqu)rTB&D0-@NAj#)iSZo=Rn*N)e%yiYfSDlNcSlRB&C~UvYSjs zH15LrWQWFj^D!A$V|C8q1F-#jVhBX`L{`$cVw@0+RE z77aqA{>jr)>CvF&=96S8bEmWAWlAu)RVF*4f^F$gM6W+J@%o=5tKW(>!NG?%$@%T9VIu(UOzcT8S6pz^8nWl&-KSlI!K`shsUu z65>i!1Ep$a|H=I;>B|*3N$Gc(^ppwT0TbKhDk9${EEK6px*99=wlmv*s>4^eaCjB^ zMwyb7ev9d9E5)8s=j^%CA5ncGRYR700VZE7H%aODm^>>Jtr#3YGT{4!nP+ z$m%^~9KA*QS8_yB`VEeJiW;BV65GJEah39^NxP~>{28m0<%kb9Rq%7aP`t>F^jY(b zHY=L%BDPkHo~FJn2PCD7aIk|MT$Z!_UPN4sYQ62@b~nKslAEWgDR-1TDP`gOWSLA( zH50Kd`d5E-k!nZ-JCN$qTT?{8C(q`ps%{QOM zO5ac}l2qU18}0Y3$CA~bTwecor0Qu*Zhb6+uZb3lB&D3@l1F92H?YLEiZi0upPG36 zub0&(c9}+-@x>|}UW0yt9FnB|Nc{I2AFayzXG6=C^#=~rA4yj^oQ*?sq=(k;$q`9u zJvH;=*^fEfvbBhx$Vy*T`W!2c2PMV*?E=W}_q7`i9^ZWNCBZYrLxZP?M+c7=-x54Rd|&Wj@uc7Z;@QD{#4iQ+6mM$3Grd0D z#M=kA74I0_LcB+CQ*pQ8HO~x%i^s#bQ3& zmG!^)!{C|XkAkO&{}Vi3yefEv_}AdU;&s6T#2ed9D=)8)xP5R>@u9)p#773V755Ep zAs!suRQy=*nx}|=PVjQ^o5734Uk1+?v&g>JZ>IQQyX)mVMSO1Xc=1MdcgXc4#J7Zg zu=w`i0pf|leZ+4B_Y}Vs+)ccB_-`xTD!7HXU2s$JZozA25dU7m%f{A3R0;b?|uc8Fqsz>woca!Gp!Ef(M9q z3hpD`A-Jcw7~D;q1h*9*6x>35QgBo8(BL&s5dQJaYAb#&^ex0ogPV%K4_@;)@oy0Mmy0(EUMxO5c)s}D;F;nJf~SZt z4<0XmB6x)O#o)o>6~P0Ha_E_lsj z#D9PAa`6Yji^a=>=ZjYb&lLX?JVjiL^2dw&2agb68a!A$G7!7apGjC=m3Vs587udz$Nk|OuJoR^D};KgEY8M}VIm?uTfGsQfIah@Ws z4jwQ5D0qbUf5C&re0S0F4-l6I_YoI^dy4lD?k27XZYw@4xP|zb;HKg}!E5aKb4jsp z@N)5K!HdO@1rg&}e6mfmjXS{g#;1S{^ zc(Ax{@Bs12!F|LR1@{y`5Zq1tbZ}eolHeBN--4TpH@ACC-d<}SA^z6E%f(}Z7mKe5 zo-ZC6JX3s6@D%af;PK))!6U?P1`ig089YE-X19~F{ulQQ?kS!S+)eyoa9i;U!7apd zf}4uD;hM$&F!8SpUM~JNc(M3QyPxFt^TmIMex|r(=%Sp2AMxA4J;jTHyNOHfE|ZtnR=jO+3-NBjO~pq9ubD#pgMycfFArWUzBzclnDtw| zyqRKFhjpGJJ}r2>n5AG{KSDexc(Ax8cz}3pa3Aqq!9B$f26q!b7Ti|MLcLyI3-J%Z zO~pS2ubE8zC3Y9c?U#!;3tlYVB6z;ITkuTr55ZH!`v;E~9}zr4d`R$M@iD;z#ODY1 z5!VFw6b}pTCVnfpt@!ic7UGTUj+DpORJ>{M8oL!zQoJyDxp+?SV)0MG^Tn%!XNp;~ z+Wk*4{y$UHuCoihih^Cu*u69R%~rv>jfEnslUCen|Lmj0cBiG{dHYu={?Bd_RlIBe zY{6*z-}NN_BIP?)mQ7S!%%)Y!i_ghr2VisqM%x$KoSA-tPMk7XE;(NMn@lfue<|x= zC;LnFF3=qGHOwpQl0woU8hr8S~g9<2v=mvZ&S+REfkSo)EyN%HtElgUXr+XGuf z#n(@&+l(n|H0d7SEr=c;T92=jtY603%CbXa9v?{_-zGAdpR@Ov$M;i0=-=4Asfw>G zew!s|BB36}){6gxTyLuKyIWHFu0*uyhbAUZ$U!yMR=hq#`L;|*N*7@=S|xBP`_U>ru(mS0knZu3p74cRH-R-FW;wxC6FY5tVTUq}i{dt*?l)i+?VKTWOXAdoX4OM5U zR+HP}o5j}3yc|=HZwR8tht}g;yAO5XttHCjZKW(el03e}GWj{@LXk2&z89q0&RUwX zHneRP-zJD2A6k#^W?A>d+RECQbdQfDkMA6r^vc;Df+H%vqojJrIP1!BCK75jTPwaF zrc>2mry@?5h&Fwi25Ke;L$S8vFC=}MOh`(f#N@lZX^oLN+p!k04%K^7O*N*hdq{s= zxu+mLB@u1ZDoE>y2nS7$G3@0O3bm?X7C{@zMr}gdN<0nXJ2J(&CAy4C#&Wp zrH@j*c{1HSXV0bhl1HVg$a3?&=Ja9ZCMkW4+&9RiN6vmOO=qAwPbwy#RV=c7$Yzk( z8Mfjp?ZfX|hKk>GWWLoz8m1pxYnbEk#l&-aCXYB=BHHvu+?L9%=2BWnS_R@-nP?S= z8!-8~oZL5)1-8eLh@(+`B-LbNUcDVh`t>ql+3IwZ#7QRl3%Ns#Nt)8wk@Y=T zTUirG_xMQi_{PfQiJZM_J-)$S4ZF*l?btPTgO^a-vbEx0B$xLu_nNc*MeF@rE(b?p zZN=;BqTatGsXvn~WpZ)OHW>m@{rhWITH#@GTUjGW_x>G;=>3Z}9Yd%KWZldvOIhnk zAEDMDN&S&bk;zs$TMHx7Kgmr}O(wU+cO6?Rb8qw>-}#6>e$je-Rm#Ph8k9MbbdOKV zY-s%MDU-WV`S_&_k8c~P-Y2*1*l(~kFHfVtQZ*+j9Y*!O-;<_zJ7*h&h{TsHl8V`+ z^ncR}IEoXpu0jh#jtP?|750XAWxmo%q zJy#;y^dhX6b|H=itgS3wk5A8*2}$Ysm^>$wO)VaAp-5=y#i;I;>U(42yNs=s$voC9 zKCLz4@uBtj&Qh+KSX-GhNcZ?i^7wkl;JI^}HBA`lhdY^k0#uJ~OC=8F-pm-sIe_4ysFk5ilNZ=xS0 zdl-{;sX5@!<0Fg5ccvWo$Awkvc+&gJ1xbo0=`NFVbGBm?BJm|{rMljjCb)$3Gn9KM zqQ{5UL+8m_+7SE=F8|$m6!R5 z9v@nd@A}S^`IRwcHjwV|k>v69m&p$~+uTk>#n)4+Gq$kYwnOjB*1WKYb9$1>Bq=?O z>TNI66LPlMfQZDG{N0H<@VYR$FC_hBIBAK+cc*M503}S+6rc|0CZSkFM>6Cd8dXMi|M2`=x$9Ii#orATNIe>JJk0g)p zWSLx=v(Liz_zse)j@(w(bWA+Hrx86qv>xBqvS#%d%6gS_kB=meZ&e4H;Fp|jwH8Fh zw^*vZwu-Jib4zn%p)&u6;@4x^N)6V@lF~AXXw%(jpjtUN0&6S2JLzp?LQ>ielZ$0? zT+TKJ7qJ7X zH1$vN-R`u)Z(Cb#i|SR*lb>_;GCaP^ zq}tE+AIfTF+bq8Jh#ntWkFS@knG8o+caZM!k>v5Um5J6Z^6{r7ix_{&CQ>chCU($! zTSTv(Ya&r^$JT1Xe9UxXwHp zZ?++}Ks8J%-e;sN-m^-ZDfeZFTS-KlZj1G?vL1uAl{J#|Eo4GcT8haYGPylx|59kW z9ja2PDlKZ_`vWgl<}yq@zV8q{KC~X+=k1Aa2Xa}No7pytk0g)pMVWNX+2*t&D!xfl zU1&^Mr<3mSX+E~cht}h}MAmO$ZDma$-Qy$4<2za=Z|7_WJ4D4-F4ec&Mpq^#5-PJd zDgJ9r{Y8#%5jRlVp-l@k&@a0ZYCbP}L(846x0|lnyzHi!ERsnpRIp6|Mcf3{OsPgv zrj^y7^d>T4`f9q7M6~HOsa$IyhD5& zv$ZmRLhtdFSW*@rT90pQ<=Po*D|0K-JwB2YPqL~VL3Pa8j^BuiZ?RM-8h7nuZ-1~g zFNdQ4U9Ch?`nQS6G?^Zqvn^?6qF?j;WO{6_F%$mi-{cC}pKnIE96&yAFOs~yPLRn3 zIos#y5Vs`v0aDG{(fXZtHtqGm?PAA15Yf-P^DP6dHIA*d*7Z1OP|ZgpE|-Wl{m#T> zd0TujUzm&sl^+p80Zt5EGP)q}>wcQIQlQ!8?Ld|Hvq<3sE5HC3)F zv9>aYknZu3T|`!|&NF6ka0 zNgm&}GWjNF`%Q$X`2H*sK|kAnxRBnEt$A6E{(S{UQpy)2llNtMY|frb@g>hnbwifB z29pn!o1}CJxo?+AZO(Rg7LnQ7$q=bnK{&f)z83MTCe&<&S z)7cWyrmx_uqkQE{o-HB$d6{V5{!5r_EE6qx274LlYp8zIi>7B;@s!2)V$&C8!Ur|e zxf0Q)^Rb>Q>r1eedqW-Z4OG`jHN}|tZf9#{jzsVAjY0JI z(0Y7FDA&DMTbXx|?(vb7D!$!ha(~YDPz+J=Z7$Wz#*{UcbdT=|M2`=x$Jd}&MVDZ0 zWz8ks<0HxAnmh)+pGn?7q| za=ILBL@q1-AJU(Y2}vmnHYW$lWQUxyFRRW%wTo0Im`GWbn9Q($h2jy2{vsyY^acBu ztkLPWzloG}66sIdKRcBp(jSRGe;SjseeD{N{z?3K#)IaA_;zM%Wv)f<@o|Zg#fR48 z^ZQrFV{K&~M!LsGlE>%2pD)STj=_kEuZKz2hW4Kw_Y1b>Wh(lqRn^U30yf{zfhh>7bD5Kj&6D1Iz>NAYXHn~4_$|9KtpuL%A@+%)R@nYdl>J7U%? z@$zSj_Y8hqTp4_?_+P;{i+cxOB|bU$d@<{wWbuoK1Ro(D6?}krLU2d%J;6JQrw4B) z{(nr}d4N~b|3C1&X`~PnN@T`Fk|={*9aBt72BncCON=d9Vrki1ENN^RON=CA>Gym-&%Mvz_mB77*W;YmIq!4s`@WaC_kHi1*DQ(sH;?E1 zU$7hHx9pYj8}?H96MMeA(Vi{;W6zX3Zd(Q+GmgnWkc%Vb_3 zCARM^^I|B`-Q;WRj`9S%wfv&pd=2N%E2YHtjWVyO61`I9g;AoH%DiSu^nAIc$2(iz z!k#I2uqVr%>~S)$o)Y^TEgx==kdL*?p*>k%WRH{Iwnxh!*(2o7?K1f*ySL2awCVh1UhO5i zqr7Qe=GO9-b~AobJ6D)*H_DyumGYkUQh9%Sz8vh?avyu9Txw622ifD~a(lEq%pM_+ zu*>8vHqYkMTi(jHOvCc59gzv5ED~S91Qmh)r~({HVQBe$ZYjKWxvJXW6sm zIrdC>fjwD%&mJf9ayaq+N6Wk>PV@+w*Tjh~le^fx<$dgKa!adL@0T7JeJAwO-G$rswa z<%{iZ@&vo1e1qLue$;Nhg7g2|Zj`s&BAd@jd0Ts_{HQ%&=Hb-1K4#13+B4;DrysPV% z%7@$Y<&*5$@+tOAnb+@$HOta?QSwJza8s4 z%D>pHTzx@<@B8%uB?_{wB*jv>H85=9P`2N6S~)BjhT(OrC7_mT$AW$xquI<>&3z z@&daV|4QTv7uk*SyY@3Og^$^d@-y~I`DJ^lyx5*EFSlpQAKNqKRrX~0 zdwZPxn>||QZ#%^Kj*xf5al&-|@;-KN`4GFCJjCuOpK7<3&#;>>=KM$5jdG>EQr;1V z0OS2Hm3Oh{%g;D}w*0I;Q+~~!EHAUi$xZfXdA&VC-e{M}-F^SPi_%qv~R{Bd$ed$hc- zJwonhm&vtuZ}~rVH~De)BwHxK-_DcCDd#U`3Jzs8z!-(npWnQ={ zdZzpv4qHV}mN(kt!b~l+vKx2JJd6nH-UTZgB z!1@1dH_DrOd@JQv_ELFUd%oPso-OZX&y)|bC(8ruaWap4#_^7p2iYU!p>~}BC+MX>xZ_kt$*puZ& z_Bi=nd$jzCJwpD@E|Yh{F~4;Fa(BC%Tx@rgOYGM288{-B&i_2l|3te{zR>wAWnT3w z<}a0bm9Oae@?G|9`5}9z{Ioq;UTlw(f3`=Mv5UTHUv=KObe`$l=K>sQLZ*-Pb?&Yv$2 zv1iL8?3wb#_GEdYJx-oxkCtDwN60VRW%6rwZ~0xjoBTh!qkJw7gQfGA$Jov1aQ;6! zzfnHW^(*BPd#TI|mBs$%%e-1y^lX_|CySmbUujR4ueHa?H`t@)TkH{XwOuCPY4?`z zvAfCl+a2Xc?AG$*cJnCCe~#TK^QdJU|4Nw`NsC@8|IeN;ueN8)ypmcvf06+KVMD>yj&;e{jd5gO;S4#gt5wKL*QLBAJTaBw)4WmmAQ;IN+C z=M|KM6Pa9aSgaYTn!y5k4QDdFjD_)p*?@B~aECl6_R4S^Tgu^h<`pULM%2r(NjQmB zo2%--Y>H#TGnvBC;cKr9PhiT|Mf4Y$zMHH!j&-6uItDR@MqafTAZ!K~`7s*hog zVF{NQ19pD42z}KHi^5?{ZL8F`Gp9c-d<3i3?aG<(m(e1D95RPHilget|6l-S}+)@0k-*iPihz1}HOINh0HPgcFHs;0E{k1X%16c&ZOnKDZ$zh}l(pcxh`iz_DZtGY>*vfjh- zn{@5)P#{NEjb|3;*BZ;Pvs$qz?8;V0sTGg9$v8WYA;+Iyx?aDGjMhBR82H~W&aq+G znJHVV^#hsl9Sw#Ye|qV9p6$jl@GuU?u!i*=)C-FOzj~Z3(YIuDjvSr-m_QM$=BSE4 zILFrfA-d2}DJ%*FOqr~de>3A7ns_-0yD5vWEMZS(ouMr5tt~kNk25YuiUa1rw_mJ^T6o#9z^+Hwg5C+Fk!zFroi1q8#3yZ>^?Bx!n^5}+)--BWJFRQLl z)fSi^Tere8tXFFmg};~*FI}Hx#s$n7a$iSWF`*@g6E9uQbEDF=!ylgG$aoNged}DX zM)l32u$Fx{;~fA$pq&|KLNMg`lU1t9PUzwf?}Q)KS|@b<%9K}>!e6utbb4wQ$Dcf; zDjtB~7%I5L81`rCw@PJE_<^aHDV4`2WL(pn;V-N@QB~Zn&(_@CAJ(Wfi^5M#;d?Hg zF4$J$&!@bH!Y^^-H>k54`-Tx3NR9UpHNg{JA^M zfWI8TG3ey1uhCyD3g074_>C-l@s}OaI4POo&#aoEs_WC%SF$|LpGE2Xm6G5-)A{r6 z)A_4v4a_m{H(WV}3s}!N#-i{I@2ICzzhf1RXD>rO-pTf=x(4%O>#MO04N75A_>L(} z_+*xzazn=-21p-ot{6SO$vev8<;T*s^AvVia%9=n|G5J?e5?+1_5V-VH!swSCkRpl zjb|D|jz8fCX1u$y7mRE^%U39cMd5R%3|GoFxKBB+kaw@~C;YgcSI8^-_dF5T0p}9E za3^l4S1&9I|6?!tO6`^zTOz`^!7M~QzwgM~@+`(u&ySTT#0MQDvumA>64wulw0;u) z6N7iN%-Gl&#^(b+H|hDD+^(!6@DF6k6uh3}vj5n(RC2Ih-T2efCG9q0DfjTE>vlfc za@{`8CGPw__Qi|p$D+V-C%x6}99Gd-hYT07svwRF9kO*xEW;~G(QgmD#uWbc7%u(H zDmvbMc!O1|RmC44i>H04+<0BBm|FVi#`oUK$5poPuunhC? zCl-ZQnKD)>eCw3)crvVG)yb;jPS$jl%s>@~!;g6Eu$-xnt3wurr`Rf9y8f=rI2E7a zGpyQD9rA1!w$=$SPpGv{fO(oJ-{TR&9pF9#oma@a56`k{nX0(YlVjk%QucBM>p8<% z6!`1%$-_$homKJI=GiLDVbvs6aZf5+AIb7Z)tW_NHdD@2%4wN#@n?o}mBq~_JjblQ z$|}b$qx4madoR-!#T}&_xZ4B1&D+?g6CE0slIDpR?K31?Mg zj;+EStQx7RGWLQQ9Kw`a)S5-%cBb%){&+TI&MSPI;a$q&iV62HYX@cVoBrwA;ci-v z>>Mu9_lZosR;^eRCbHF+i17NF8DGO?$nhtORmC4lWNYr^4OME*qHrTqYLv2lX1r%J zNnQ;XOhBvV4P*vq&8(?ew4)`@{&7yEU zQ+82`E~roA4U1Ki6!L{A+{&yCSY`Mef!D{9;d(XV_vlM{=+$U7veI>SIYN$?yA-v~ z*uhEai$&oy_Vtwdx+F8YWq1~=ZdX+e%+}YioR>+&`vSw$nR0yDQqrxIhBKi&*tHHc7m1 zvpWpxNS2?Y)+`DaFy#}a=y%F#yw$PlVud>6U@WtqRTg*GrK_tQLaweHm*{&FEW^oa z#iCHbR#&UlR+;k(*(z}SNrkF*hS_=tmXB0x7KJmI(pM?mB`D_=^6oYMWH(jmd;S>1 zc_?Quqga1}dSQ{)f5Ow*@XDMyy@bCWk1tfkH(9pUDFG*{HH*Tj9K*{>;chn>r`Rw& zQ(4@k!f0mQsVwe1$v(p~oPftIekYwPYCW=fH?OeOVd{WI;RtrX3sB-`+0aT(zsWv` zRR^i6531O@gee2mnnmGArtqgqaMg#*cpfl3hE;#ztpKkYFvoBvm*|DNjlv=7g+-x1 zQ~6T{xF|*D*eaB<>UmZ1bS1Xtc{QO_tyvVfZ6?)9;r=BVCy_8bN?BYnVFlp zkggr>VB*O1t$Fm#GwVVxwbEDR16%R`TU@s2mcduqc!; zWrI8@Gd`Fwm%74dxiQ^NPK2r&cId6^p`wOs$otWR9)E!K}JlRos=u*4)Jv z_IFV@h$)xIt?;jqoL9&lU7?RkxsNOKV-_FpoX*OO`@p&klgkf+*tbiu$_ z`RB1jX~d60|A@e%dH=@E;Ct0LwRg*UtRS@Ny+bonuRl6;RnR({PMC2xn9+}Qtc z`6t&8l)tkRd0)IP$NaAH-gXChh}}vaW^X9x_)oOg$k{;?V_H_9-dy?G8^BXJovq#Ct+Qa3c_CWb0JCR4)UFFm44)XPOEBPUN16B>b0dB96 zZ^s^)xIS0N)9fYk+4em7BYT$2i+aWO)8()1N%9Z&SotS=l>D1LTwZSvl>f97`7gVx z+y?J{@%}r=)9hAqYwW^_^&7CGGFRBnUL$X7uaNh&m&gy=^W^vKSu!somCj%8hdn#d zljH*IREZudZ*Py1zjXd^d8Iv2-e@OsE4S||Z)`C&W_E`BkdzAdB zJzRd+9w`58C-Sd$SGf)LqQvoZkhip3$=lc)j^_Ngwb#hK>=p7s_L5kS{SdMLdGfig zpCymBr_0CMljMo^Sb2gyO6DbRV*kVCQhT7xi`K;YM1IQdDsv}KI)C|lyOqp6Jh6Vm zQJnvHdyU-E^IIXevX{soIDekJ-kv3Q#_opL|8)6jx1S`>vB%0U+oR+Ld$_!<`x_{4 zZzuAuc2~K;?jZB>B5^#eB4S@KAGx_r7l zNxsq^E8lOAl4se&<)`g|^2>H2Z;4$iaeQ6nO1p!6f!#{J)ZS3W`Co6Zk#De9$gAun z@^|(;nR^G~{m+u$w5Q8Fq!sHY$$jjxGLO^6`cX0u>O~Ki@3sfZGwnn^6`$o}epmTq zyMsL3ZYA@#iDUkTBRKzY_8NJby+Yn-FOi4iKdIP$o_v%&OCDiQm-&BN%%3E4cTMzI z`CNOH%pEkbez<(6Jy3qqPUJ;)SDBapi0wPbU)inX-|P(oIsc#SHS(|a3YmK>Vt-5I zz3|U-^gQ_}dzO5tJzYN1o+LkMkCorCN6EbWMLK_(dpx2C%Dl`)bRs`xca{IPJIF0O z{#Nof_J+ebe_lW$_P0hp2fGlWSIE4gL-Z2)5__I}n>|Z@+nz43vnR=$yZ^EBZuTg7 zpgmkJvj@uj9m{n7GItF|ca<--JIG`0R`Lz@h5?-aQ}!BpjlDu{u$RcEV{b>izj-ou zghbDhTiDa(UF=CR_qD|Qv2tg7l*}D1v3|IGv^`LsVkh#$c2{{Mc3i~v9c1oYiEbrt zYH#Sz`EPBnk+-u~$nEVVawmJ9JlLKkA8${WAFwCMciLm+srD$DJ4w>{%T@M3xsRR5 z7u#LsOYIKwyLK!2ReQr>oc|y88hLZ zB{Hx67W3!H2iddaGJCo_*q$VxYmb$AtTXmEO1{J%E>E=w%D3Bz{HEPiUTSxcx4_<# z*ncaz$lg%O`R{J8f&b4pe2VZ!UUDz~d&B`YeC99di+_}H4LkgMSF!{Cr^gj8@VDo9 zT$c=cBzhi%;|5&rkay6b$c_pF5GMR0MqXhZYUS7<9LcI3RCNYB!k(a=u?+pxnnhtC zQ+~rR@N=k{V{!lUNi=naTq#*khR)SNuV%a5$@~ zRdpjK%GO(88Tz6eS7l>(7*ob5r6Z;;<5!v)9-%C*kT8f@+%buZ1L6O-bYI;D{Hw~5 z>01=&TVIjbPpw!KcmO|Xr&en+|mhY<+ z7KL6+8KRW+nX%Ivr6DMbTTVEHSv(U2hYj)HLb}WM68vM5t|)z_0E65Mi5z4%w(5vK zu_zRWtM@G8NAmeE9+Y5piULxJ2JaV;Oj&YAgyoM>Tl|h1jvr zDmu2(_!FL^lvh}VZrS=irfjVg76m?7$rPphmKi?}%`lFiBZ=eZ$x^sdDa_$a=Mo(b zWc^m^kVPS%9hNBdxy-RuXwRx5Rjo-|*E6N9TC*r{gGn}GWnk|^!783&hYMk)t*5bktx{MN)-h$UQg~cf#z6swf3j+SRecF_4DWJ@G4MEd_+GuR zDE!RSEtJYHC&+l#G5n2HJgpF~y_g?cx4|;}pw>D{{tHvyRtmpc7-)R|fZ^{7xne>y zvmRB}ZTO6zZd^B_iX%IhOZ0s@Q&*`Ki^A7z#eELgxH4nyFy#1?p{lwB9kTTlmakT8 z7KLw_vaeFE%8XxHXBfxNk!ZY08)flV+&P??C})Q=SkIT5SQNfthhO4ZjEg2CRmMf& z7&fwMv8v{?7qq^MS=^YyugtniS$*)~GClG+0iT1@ zEs9r*;~@9p5_j_%Tk)ka7KQiNK~M)hkRqqonEQxTg{nF~ZLQuw|yi_p!AFCQvwJk=*BcG3>oMX6|^>3;d7KL}1`l3>6Gh>~hRXjfWU(|D)w;_e= zH@R849oQ|pYma4Ef%3dU7KP85GD<1kGvg~W4CDIcnu_bUR9WNjv9@HEUcdN#4z8{t zT%zxROy&4uQFxzyZ>d)0tfKK|$?#)V{i^4EPjuLGf4uCV{Dl5^k8JTgDi`yHdfvEh zxqaYEXUL7)!}Dr;P-gsSH^cb+NU@M$f5zTU);&)1{{vT}v|B1Qb* zHuxZZPmZZ#i;cee}V6?R*BE}mgAe`7Ds|6;rfMX#0Lv{%Xe)D!EM z%a_^<<;U&0@<;XqGCvx{_EY8G?eX&8_856fy#2-ek@6n)V40tgVtrrv2D^uRGCo(t z`T}{d-B!NV-gp4#&ksT|f31AKy-Hq)k3g}0xy+A5(F^6@?YS~P2gUjas1*={TIn=mndGmR=(a|CG%@R zv3|MCuV6(llpnC?%KYA3tbag$&YmhSu*b{G>@hO`n~Uv7%B$_c@|O5)5$pTPJiQ>g zhs^U9q6=hx=!tGC^W>7~jr(!_XV`0He!PkGtK{?Tjz|hmnZf& zRld<4FW+vDk@=A)=8u%`u?Nd-@rfnY_mvN{d&u|O1@dclTX~tiv6%C}5}#UPe{1E( z?N##U_Hwy5KAgn-g>p}Ot~?GOGh+P%a-}_0zQFn8hZVN%GcYgiGC$?S`Um7o?Wr;^5E|>p%lz?y=rQsw_DJ~u?1&nJ7v_?Qm@U44iudRe z{&+XObcBx+B?;c+@$D^q5-H*LII!~sAA(8_!6%u#f*~b019=7cJ&W_&_sq{b=d#3XTpJYB?la%F4;CEPNgV>Ny0L)8?{sUcp)6OePgx3x~56vMQX%CdaEu zb!P05V0e+T*ipEQS^Fw$70hd>&SUunO8J7}#R^#)#xi?TW&e~p{jtWYmBm#Ts+jfp z`5e@JSc@h9K_R{eiLmF;ym&?%?q+K^9dABEjyKk7e967)V0Tu<@#4r+9B=F^T*c=VZw7B?FZ`DKq{bWXSQxp@tioRivyuYzrLk=SX4Sk1+Le zrLJTce@BhA;X1bZ@jUkOcV>Kpm*EX+z`nxG%z8svo!K|~+??gtD}`U#3X>GFHr&eW z>B{bsIj?X}hSkdA1{>~XR;99T#7F0nOL3n#VGmU$k7}*+oVT7w#PjO-ABBD&GOkaZ zY8M}Wb-?fGYJ0$U_Zf2i;vX1>*Ya-KC~G=9#L#bGd0fADGK`NuYtzU7T((}28JB8j z$n_h?7j9vnFDmOFRP{Uu{{wT0zLzpJuHTOta{b0yttTJsD0{$l7opvpXoeBs2DWGOSS+*LQfFSxuuk zJbp*3~MkhY%X2gG;>ER$VPh!bwuhQ^my8SbQzZyBMGS$~aU)pz(0v!oTK zh}~Zd<1=tGhV!+u?nVPX1IKZRXW-@RV6BG2qOcBOGFN?Fl^NG8XZWYG*g^Q0SvM)` z379`|#ltE=V=sIVVO(dN(=ep*mdz`#kWB)AhcX$UF6uJlbYzCxXlfjE*q&L1${GZ7 zGw#VH9&TQzHMCUf)(l%KWNm26R*h$KEhL$-lZN4T%3@z(M`kTj)~PW2Jf7v-DrGps zxV~Ad^_|?M?9(#ipGzS&Gc$e~})CGO@5wu<8&$B^TVwHja2 zLmfzd3sn#GXg#R(t` zyRpybm9-4+c@Yk9aoG>&%&@+rQs*%&Q1}YMcy`(5aC_X&M(gah2YeuINrk#x!ge%% zS&!kt3VBE2P-Y#htpCBBOg+mFQpyJm`zT~>=*R4>mHlOAoJGNKptATB2uCw(&6!$Z zd3YRd*E3 zg}|)Kl(jF+K6$0tu%A-8GfWh+Hk2@Xpt6fI%RLd3@gPgG#RR`%%x^ zAho+#^_$^!gk!8ic{!F9s?*WGvk@khD90Nz?}Ns#$uT@n;S`1!G3zL0?X@``ki~jo z`Vduo*L{*pOt6}%!_?{yh9@dyZ8()3v{46h;W%W@=ZDkdjk)J4e<|}XRLDCBmm*Bw zLmCcw!MvjtEI(fzH+wvPQ#vluqFiefMTP z=ZoLKVR)HB)`lzDYJgguo*8EzF}zk;>?=%UR-v+Z>Nfj4pXFC8p z@9y=?_=zNjwWT>3tJ$J?;PB(TXL$NG5i_Pl1KFbZHJKW z9KWIuzH@xbzK&D3ED9so?WO8gr)uq(XKO&S2JHWp!eQm{5C`pQMx>8J?z) zwc#vg@2c!WGvjTRVSIc!K0Ut4U#IczZie{)oWv#iK8p3+Uhvw^@JxlQ4WrrjVzoLe zGhWacj!_o-3YReJ0cE`cv(H;u9=B(H^ErKdS*yo4xk%YO5|KXM+>5Wr8wYq9^6^cM zR2Fxzr>{u-7Bq*>V{E(|9zaXSs{_#-Z>-h$lGf^gJJ!?jwqnTf;!JUdSMYAWK9%M% zcJ|4Gr0ICM-##55YvcC#g0g#M#_u~ZjN2oJ8n?&WlyyGLC+x9YqVF=+^ZA93_YB7= zWNjGFk&IBQVVQB#DZ=>N<@)Y{YTlSTRZV#Z;SM$}P}A`+?`RCmvJltju?*w-JPTob2>7@RK#RxHCF2(mzrn5! zRaaND9gTen4BuABhakMiteup_D-@LQun<1#qKfnSluOL(d8R(ER`VFnSIFA1kR7Z% znXSIej9+_VxJX&-E4;<5=als)%s$t#{57Tg!7z@GwHjY?gR*&KGaWCFgT`(8WwbgG z)tm>HpQ@LGRlg-BFc&UBId2>vm&>tSh1*)(Hl}4PZ`%ta>xck9wZ#=MSu5Z|gdC*4 z9P&5P@fwGsunDs9i?0mx*l_hp^kr}y*{?`_4Q0&Za$Du!t$MuXwD=wMEm3wS>bA#n zciaw0-5<+1h){+wnW(;bNobCwmiJkz6n#zQaD}W5M=|?&WiQK|SNH+LAUr3M;ZjZiPc-Ox0Y3V1iT9(=*a62Hi$XW{_05U&8dlNx zoQE*}v)LN%h}&$W{NEe%dgE4x8(weObTGnXrn=ez1K?C!U>V~4Hety5;iCaV&L=rf z*}Rr@IzL{m%acs4XS`EyM9Zd{J zD2siCk<4lw!4aJWv(J-Qe!NmnW_Xf9)`ruV{fe^B&Ww*449`*)*MB&dS$8RGHC*zp z9t2*Dn*S;AqSbsM7{}B&US8)qKKm0i9f+0#vnAr;h)3ZTn}+idCW(5V#x7{=LkxSm-Hl(h{u zIX(`5pqzd4Jd<#-Qh#GORv~M{)oe9Mty-X!jDJZPRw;{pg&Ubwp{$>)`pvyy}z<~O>G%3-wdZHi%*F#jageO>vOndww@PvGK?Rj&p^oc{G_+;9G?UtY{yYYTz;WiI9>|kbpuPWrdhB}1F9Ch&y z%$e1(e7;g%XSh%yYr`UDk5~4)nekf0@GWKWK?=*5b%L_GZ|z4a4#s@g*J9!LOOIp(2cr=Nz=+9DW)WZ||xX-a)8Gn0$_M>|o>_;*L77e5q1) zVz^u(Yr}`ko~vwrt4+ptIv9SUERH{X!K|BN2;=Y;z$_bt zCcLqIY!bdgnDjvz&R%Cz8XqPZu2IN42tP5agR&}MPU1M0f1?y$5?8f8R z(OH?(ZxXIk7LUJ#Kbf^iS%2<;2jzOKO?)vJC&!e$p?`^{;P7OHAC6zZ zl)>lIVaUvGU&G9yH#@LJi|uer`l_pbocK&lyeC5bkl#1YG-jWt>@zdx6<)>gEM@U|70zYW0A=w44(T2` zUMV5{KkF}Kal5VM68Cr)TXD?z{K>FPA#1~6_SHOuRdt#1^QjDnDvN!E6PWd(vfATr z*ymla6@7{>L<+PFT~AH%BO z;P{nDK87n%HX6%uYPL1jb$m_E%I2efGU{fko{vR%0AVs)eNE$I^B--Lyg(%Mc&$Sj-y~%?OppZFtp`5qJlwYU%&CoN)G#j^ZsGG04cU6bC59PjqvSFy>?G3~qbma zu^Oi8U2L=M5XKLTW6?A{BvgVBm$NPG$R*yz^yBug=nhyEUSnVPs;@4Y@y%_7aV0&2 zdgfe&l=rb*jT^2~!_;pPCa0n3_|ojtn8Wp3tA~f*bK*wMAJ0Zar{Ycw~zfebXi5!H7rVmdpq6)~ALo(Xb4KGf_4oU5>^Q zmrqjtmZ4W?R zLaww2xx`AFfMvK<9o);XS|Mx0-Rvu;zMjgApVek~ud>)zc!*h_m2m{CVD|X|%V#KM z1w)QA)`o|f{j{=Ivx>$e$Z(cI4mHeS)+A-M#VmTBhO2*ZiN1el{e4PpW>}+;wc&BL zDp#wPnXwf!d`ekcA&mdfJpw<6+afk8P?Mcd$vfDN`L8IyBg5AevNpWI>|c-Ih2nOLaz5AT;gtyVCwT~HHhJSg{%z=*}-IWa9U=3I%UZ5 z;xholx0rQ?vc|*g^AeWF@m|W1R%m$R2q-v-sZG51q7<@m#w zZ2H$gcJ(IANj%Rb?r<9GIbZxM&F~|ItPLyKYOz`^$c)|13|A?OeTA=?^?SBC2q^1rX}7qfaPYlofipz!z~ zUNJf#?5j7gFWV!WtY^z93}3)=5XV>%@?S7s|B!E9|FADUKCwuTN3!a0dRL^Rk53Up zK0dL7u#9*9lCpZSBdob@Oo@-r{tV;x!`it0+^p;pIDXXPeU3rdaxCNeJDRy%f7p@2 z@O$3LP&IoJ=07%`|1^HnIoAweYa&R$^Kzt#3NhMOQI)`mQ0KcnooSViL_3d1%E`5=UCn02$V z4(NbK;w?QAn;_(-*N7C}&1$CpuDki3VY5QkhK&f5GIj8CX1s7Ppn^L<(>15$~Zp;~YYF-r0+4 zUJY|1qq)SL9?ANhm0H1YSB0z%UD)b6wc>Y$Wn6}z;a9DC za~STea3R9@9O?wKtP@)CR)RR`pf28EK8=qb3`-S$q^A5#+6(^nFdT2eau{yOY5BApz%@!oNFGJnCma>k>kbAOcaF!6tXt-Mwr~GzIcHHIj^uQ!@j7( zx0)CphA9j-%V#TPBg450SsR{X_CjTEkr~I&8NQ?}z8QrD%$lLB%XY>@Pu-N= zKZ&Z6d3s8XVECn;Qaupz->FVq;vK02mf=?Q#iCHnzK&L3g_-g6WO%o-_CgppZLXj8 z$mET6kF#mMnjVHEzL4~C@?=!b#I5m=c#HGx%YNg0*(A<)Ia2UdqRe>es+Y|$ey-D5 zsGf)A65OzjG3{N1$#gZl4dx-A30&e~9;>#SqwRx8`VVfWA}_oB7k&>ne7%kRe58;~ z!%Bone|33NX1sPXT%|1DQTUo!1wp`kw}KWGiw`V?THPMJKo!I zi7jCx>f>g^_5CGpec~;)Z;L#&k4-`|yIPDCd{SZ+jjfg8MuohCuvu?pJ)kUJCWQ}p zH2J+0{^WH6k;vOU-Z>W$~#MIx}k@W$oJu z56-!pu!9CvrH|7bgnXQC;}YxiI=1>p!?~4VPJOX9Y|g$KO4z}y%-9?lZmBHx6}Dy8 zE6Q2~v(Fbo}%n`Gvl3@VFzV#sG$?HMk#BPPI0`v>J0n-n)O>L z^*e_73RxT4vsJNLHD}H%{FmX*%3@z(S7vRgtX($;wH)?lpYxQ(-@7Q;TWfs?LayrmT;gu_V`?04DMOAo)@ppokoi z$&lm4Ccv-@?`DXy?u1JoY{9DI5T4Kk4tV?hE zpsY_?J_yTGaKpYJ_1gyh_JRlC_5$*UVR=>>)0h39_y)u{7|EgDj4*i&_4wG487~S9 zZ&Mc6Q@E2^*DC8Dm@Df&F0rx}uzsRa-(@&iA#1}_wklJr#>_Z=!0--bv9B{%^xLnvdVzf{Yak8*)#4$q8h>9aKE~~GWb9jox{3`ip z=U2)*I=@10;rw#Btz9a&vx{Y%;hFYdB;$L-(=Uy_t-V^{dToH$F7oB+m-THc7?pD*GIYB(k_*^wTtC;c9FcjoiFcZ=j1)? zrVX5bH@iVzjL&T8{N>l|I{9+v*UBf@HSz^^wLICbl5eyt<-6<(d4^psFSJYLMRu|L zmR%&jZRgAXvvcz2cGDl6|JQbd{Eb~N|7h3Af7rG1zjlpWi8?`v1d2ilc#AG<;x zXP3*9>{5A(T`W(xi{v})eEDHJC(p8*)^q;z>;`#(T`%+Gq_{oQ$&2h-d6``!zi(H| zIec7Bpa1d~uCJ6=*%k6?yIlU-E|q!CQtYo-<`1$(7s2e@@=XZu*_`-^^~1 zTiW&VmUf-It6eJ>*){T>cD2kim(uym1MNz=7yfOF^%XKtl8P>u2ic|aP`g+jW*5oF z+xhYdc1}LsZd%9rpKCYB7uxkQPj8Cjsgtj?Yvrr$8u?ngTE5?|lJB!C<%jGF`4PKZ ze#|bFXWPZ{>voa6%FdTtwamt!lk@DR-#Guac7wdHT`wPG*U3lNwen!QMjmcg%O}`X z@@aOZTwzzp=i24+d3LGHGoj++Q7m6+7s)&wD%R)A6YZSL6Qg2%QxoSu)ozfd+x7Ac zyH4h*QL%lk{IFdk^CYQQUoAgnSIN)VmGVn=h5V{rE-$c4Wu9ym`!AMXw~J(+HWlmh z<)wB`UT!!2%K7ueshHm&e`wdsE9^R%r%=WGTDiflk@-W3vA$aV)vl5^^Ygt@-pa0! z+u7yv4tA-$n_Vn-vy0@t?R=T%O~vu#*N7;t$c)CBM-5w z<>Txs`6RniKFzL>E9`RlOuJOR#4eUEvy0@*?R>ccyIj)w%Qw2dX)WhJ*=~@h+V%1@ zyH38-u9cs$Yvljf)$%;MN`B6+l;5^1ZiSysyZjd|J^>RnMPTs|?l}qg!xxZa4KWA6T^Xy7_xLqNi zY?sSt+okfkcCmbmT_jJj^W{hEocyZY^dslbYp%t|vq9#C*P`p?AMHAsS5QkIe|hsQ zGS|qw*kG)$mN#*ImCSRiVtu9D#;%ZgMaWoRF7wKm(WNp^wTdp5544NqqwIW{=Uc`6 zoP4C+^aJNV*lv)A+V%4BcAb2pT`Qks*T^I7YWV`YO1{vplrOa_T@sr-UnEWczI$)DNz@@hLLe``0b;r!Rw4f5}Hy}ZG$ zlbh{Y`Cq$6-nC8k_*BcC?J9Y9yHYN(E967$aye|B^;as7b$zjXm|Z0IxASG5(3L*_ z<#Be?cbxxlyFtFlu9q*j>*Oo!TKP)5MxJh0%QNgM`60VfzSpjh@3YJ02kcV$X}ef{ z)-ICYw)5qsc1~VyH+{?be`q(z$8VXfuX>p$g~jz(CpXx&^7nR){F7ZR|7=&ur@8-1 zd7bMkllQipzTy0P+70pncD>BsVov8T^L(=C zTKNdOM&_AivA$a7WpbmdWS&+QT`8YpSI9iKEY_FHqwG?dKlmK$i)Efl7F{G?Y3Iw= z+d27OyXkArf0ErG-(=Uzx7&5{9d@n!s9ht!U{}iv?J9Y(T`4cIE97N%x%|FeDmU20 za-&@&ue0;z4R%i6WUFj_HGReT=h+SNwsyU|gIy=@XxGZYu8|YFTJCLE$%ojLazDF5 zKGrUmhuWp`@piF1!Y-0|23p)6^5s+QoP4I;)WG?VvK!=U?RuFfqQ(B|&s9h@mU>D18+C}nQJ74~fos)U;TI|1RHRnIy zZjgEATCA^^7uj_(PhX4mwem8%M&^lZvA$aV!mg5e%37?il-Jl5GS6F!_2qJtT`F&| zi{(Gu{_i+l84#(@@aNXKHY9w#rdCYH^>w1dig@TPQKKxm3hWm zTpu;^c)MD@*{+grwJYUnyF$LpE|+K6rSdCwvHXZ#Brmk{-5~#B z*UP`#b@D%Ut=z7y=P!4$tK~iIDtW8?EWc77;`$1Cm|ZTPW0%VOA%?iVi{%M+kv!SX zmw8fL%+JX;*-f8w{?FMB@*8%&yv(kXKd@`%kL((GrClxmY*)#@*p>38+hpUbkT zZ>uiMq~61z(N+pd&bZkyd-h1||Ampj;{@_u%)oY+NjZ#!S^Yv<&_ zcGF7EpFeUQ=i4BUwd-a6_+DLorC$#!F9@*bVaQcD=mFu9M%e zYvpBjjr^fqE%WrkIKC?R1G`dQX;;YCw9E3#?JBvCT`8B^74ngGxqOUWDvz{_fS!LF~7JJ{9oj&_yY$F7ujbAJ^w&n%43-*P$FrE-Z~EcdmG8 z@f zFE6(10&UVvs&YveR#`*?%FS}koz^;=Iv}@%)c8xsHu9gqAtK>m;r99HEkQa2w##1g| z;rdefGP_v5$u5#_vGe7}?VLQvZd%6q^Bl``{_<0Hz5JqGC)e4v@*=xNUTRm%EA1+o z=R3yxtCSn;3Ylj<#`<#k2fI{WYZuGw?IM}yKF0R>@}_o9=2?)jzUf`gzqQ>UceU%~ zZg!o#mt8CGW7o(%>}t7}T_qo7SIVc`74k)PxqPKvD&J-o%hT*4d4`=YKW*pa|JqIO zaQ?5^4e}zpUVhWAlk4qT`D43A{?x9PKe4Oi&34Szf2EvfSIC>&{8CqHS|%C&Zld~3&Se%10QyGnk=`IYkPc7^<= zT`s?4m&#w*#d3pPB!6w^%iq~K`A55HDd+!--5{^C>*dWn{yMpfT`Lc?YvkkXYWYOF zN3^X(#ext%Zb49xg^&&luDO>c4jAK4A^$9BEkYUiwd zo&1gKYvq4;%Ia(6M%P!%-`Z938oN^d-mZ{;u*>DOcB%ZUT`d1@7s)L=o_u*TJ16s; z&Ghwe3FqI&ZjjsC^>Tq-C+}j{%DdV%au>T=?rvAfJ?u((U%Ns+*e;h7yHpN#v3!VK zB=@)TKW@BImS?Olm4CB~WuEUD>x<-OJ6~?;=WkBl#BN&5 z`EO=7$lKWU@^*He+}^I0ceiU~p7t5XQ!VdhSIK|cm2!z)AqTr$KG`mnkF$$qo*0_W zUp~psm#?&Q@(p&=BF=w`-5}p?*UQh_b@EGgt^BlIBhRy|2=OO*C|_n4RS}jUOw2alMC!xd3U=;?qOHU#dejv zzg;Q!vn%8QcDX#>E|rh6i{)~=NFHYA%fs!Qe4^b{$N8URH^`^h_3}u&PCmn~mCv+m z!YB$IW?Rt5c zT_?Y9*UCTGHS#ZZwfwJLC2z7zw!Kx#`F4f8on0<>vPy2oOGmBfc;hDR)Y>seHONL!HMK~eH@Z?Pp?uI`&A-@Gqti3$1;Kb|~^|r)+-S|a4 z?wm>1bw}JO?8u^mK4DiaPYhjHw}N#AqkC@8pS+7Tqhrki))Y=h$DuP@6h6nWt3uvg z*qiOAE9)QLJ+5B#9hbOP#A?=eQYwo=5mV1s>K~c&3Y!`3p)7U~x-;u=W#MNLb@Fj% zEW>U}>B?|Vg{%$xFndR3_sNW(Y+$&bvbcIe!mQu+;`qm7rKK0V{T)@h;4POJZv|81 zc&}!t@xH27Q#0fG1`OkP*+Crd-OA$6#_?q7W|qhC?vJ8$ysVAmJxAI4xj2p=KWD?L zI9`q~j<=t(nqUs{Auch<>scSyKa1k}@1WG0%=lqFhQ;ce9fSk90-CzCZ@F?+t9% z7v;E!3d6&gvT;wEzjQ6*D$NXeF|;_+z>A?JpD61cRB=t0afuF(U}~H%i{gBrR_ese zcxo^ls1DgdIGPW`zz%mhTNBlU&3U_-I&P;W$%D>DCZUK!EmUuxMsr% z%-UaB+w(QxQLWzEyg1&mTw=UmGc}HvMRC0UcIAEP_l)>>Vf$xQ94|YF<6WVwkJ%B% z`(KvF@$$5nbiAyM2UM3}ASiLe_>6%x&9mMA=i{kTj+8*rS`OLWX z5W^DPBRdGCyvOsE#b5eiN4sGedMiag{=@AzDN~Am>?dx|mobamGk!gSA-CUTH)XA0 zM;O_IT%yC9SkLEgEYkLn{Mm(G#HzS`EM^$D2X>(CA^AXAJW+(}_Y;=$T7$T*FpARc zfwkHml1G)j1AGF%%iV&{YrYqpkMiusx%2su`DDhp;YTCbPo+Yx@o+i9q+DIz(b`-1 zH>l#|PURAl<4GjpB(-8uIE}4#R;#Nr<8r4A&r%jU2 z!YGBT4IE#xMA?^Q#t(oojN|3_;&^M6wFPF+LB5P~4)Ph+pREpA6wYIZmn-#?%y_G2 zc#*Q$LE!O*WQei`utN-TYnET2ltUR_tdO-~EVDZ+n_p~?uaTV3rYK_`m)9%*4(3l% z$jv<5iZEHT8`s9RTVqWhr)~YyExpo@M9BHPhiuMg5nILiuqe*wadogFGd357aX#!I z&gVL1@#la!pEFq==QEmNoDXZ`e2!K2%*?pt7Q?GGbdE1nap-$1Yv--vAiqU92l+MY z~`i$#$lCm~%{XVJ}kcSX*rH?Ada`Y zvYv)H-dQY<<9(8094~9*c>gWp?B2?ZYx^*a+XKfJ$GbvVJL97!2e}287-SC1bp5j^ zuKzho-6}I)(HY*T)x-|MEnH1EDyt97L3U^P1f}Sz`8*hgS8$e2VfG2i9+Ww+a5%$h z%HrqWFr8WZDT~j~5}qxL>*?kr{3*w9?`;uYqD{H;HV7AKt$&ZUJu7foZ7wmP@$4(U zey}LMetfnoJGd<~e(nNcymsHwxG%nD%|QxpyzjU@vgf!y?o;!1aL?{|VPW|=q~UX- zy4ef^;WmE(()ieDzUQb-TMSh5#}$tl#`$vialZYOwG`%qGMG!uVIb?{~XAi^smBrN^ z9%k14${Nl`VgaU#-!@_QSm#5z+#grS#xkzWF~}c}+ekFwjraWkZZS7Jf-o7Z?)YUl z8COta_=K|9b9kCrdn$`xVdF#|VfkZ9d4}PW3RxTe!|cBbcpv=2nv9=oz-Yts%HqJo zd}e*5tcPH(?P@Nuw$Eh!Y^Aa&%w_6qrRwVIG=AQiRnIA82jL}VO;8rEg3duc%JOHF z@&rR3&&8Fs8NSTyVanEp(rJ90Wz~Nbayt(^z?<|`*5lh@ZC7r>tQXrMj4v@)A>`2a z=MqC-$5wIuvM8?KwY#v@0hw{NDu!|WvV*vO-%?f$%%StEUFrJ0pJ80Ttc~mU9%a{N z#z!EAas6_9as6Hz?-@hyc@}=d3gtbMyu$xs885lU_oWi#+?Ourq{~;ajQODsVY0XS z>4JV_d{}1qrm_xT_ztr+SJo)r8)nd(<%^WU?=6M56tXrfWA-Qb=O3@lnep&5{6JY; z*f*qe6b>3d%mmmS3M9T>3hZse zwGT7n=P4N0#}&Zvf6S^?R%?VDB){FdL&9Sm__vfDV*Lgz!$PH$ zFpS$TYqdQjyD6K;snhLaC_`?~_;DbH+9kgE-zAW%0;0$IBzy>3APz7{|-nINnQ?-H;jYl?>x}IlegFLCPw_ z_P{~rxWpiJA>X+ES)}bZ>8#Yk%=l#!hTNX;u3r|# z^~*cNH83;h6}CXDbp5h}xPD8Obrd_q(05{a+#U{N7}qar`(Rkaz$^~>?a z^~*Jl7XxfN9ONpLbC92~KCWLD#r4apJL97XQq$LqQyIqf%MRlDy-!(H>=1)Ihvjko zUd}MCU)IL;J4V@WXT}d6FpTS$>ocz3Bb2o@Ucb_ndNZmx-o9L7ygV9{j+aGoyzSKL ztju|Z7ch+DWe0J*KjE2&|BYdecRI`Cc<*Hx$IIF{-i6A3Br~oD&M=ObtwjZeaX&5(Wu#kXNw$Bc)7Z$XB>n z8&)y9qp}}k6^*@r48KE~Kxo-Ds;kE09v#^m#bQzK3l zu8cTVI5%PdQ8>eW^pfY>UF5EKp^y1H$W5-#lh@empJ0ExJO5kxFV}x8|7*V?b7y$$ z{{?wZ`!TuLzDw?F-yol1UnZYopCzAe50kI42grBZz2qjli@e_6LH^6mlMnEG*U#eo z-`O;q&$se&`(ybs=f5FeYri1#I6+(=kICFm9DSGkuziDE;QlX@e{=m=@?Z8axsCG& z$ZhRj@^*F?xwpN8yr-Qf54G1n&iPl`-^w-i$MS#dH{>_%7vv@OV>0(kr}LNJwr`NX zu`iQ1!9Q^^|17z!Jxo3DH`pRnl?q$==XlV?{luN-{<%J{c+~L zUf27&u5;h#InQ~{oVA^}o9QjY15B?Yo@pEtKVf`iImiE#@d5E(TnW@o3{d;(KC|-c|gXaXaxY;}+s~jq8X{7{|mV z#z&TM{FQ8e2gIqyyT$d4w~HGZuNTLSmy6Feo+sv^WWRi7iaQzSh`SjN6JKrIM|^{E zSMe<4cH(^F7UDU^b;OsR63ss*UT^x5r5t}}(+`M~jCYHj@pf^k@p|zglq&q zH#FWYPBq>xjvKERH#S}_e#Lm6xX5^>I55r;-)KBcoNL@i{HAeN@wzI}_}Ym#7`G7j zFs>sWX&e(zFh24$$De0>Ks?uYxA;HC+r^uW*NYDuFBcy%o+oxVb{nq$;*Q2S;!GST z^!hOIwZ?tKc^2PQJk_|Jc$#qw@m%9N;%ALx;!li^EaCV+Fg_sW!C>E?-C`c$^}Jnt zmGOG4y76{#J>&J_RO991 zbmMuRaiq+TXQuc(;~eod7C%hf-?)!>pmA66G~;&SEygXxZyVPUml(&y`;Ct*;`qNZ zJ|Ozx<&h)4)_9nh$DPB^U)xg+I+SiMT-!(o`!142lwbu`bs~PVW^T4#%w~HGZuNSv9UM{}Gc%JxD z2$Djr)j48g~^xWZX`?(71(onQ0ywbRjcz&&D`F9mBFm5M4Xz?w?6-=)q z{?qiBn1`qR=Xqoy$KTHQfVhwGZgH;hcJV{T>&1(Wmy4em3kRwB@r~T*Y|1_;lm-;%>&v#c$S& z>dg~xGoC44Xz@AXM~sJw*BSQ_7a4aIx2zY{Zzt|*+(O*ZxQ@7saZH?Pd}Kby-`n_r zINNx)IM;Z)ILCOs_zvUc;_1fo#P=D`6fZE&5id0!CSGmaNBoU(SMg8A?Zl^?5iO4v z;;P1V#N~}+;=aa5=5hSz86Ob$GTtqI#CW@SuJL;DDC6bg3C8opQ;lbeA2!YrFRLH* zf0+1L<38f!7T;A|$@F&OTE;EJjg0GvyBNpBS;j}^a{Nyi9}quayj%RZ@pf^|hEadl zi)$M%7uRnP>GQ-l8qX9DG0qW>G#)1Y#<-98JL9h6ca7VL%ZyuylTxGk*Ad@f{fmh^ z8y|U$;~#E(Kzyt5ZgH9McJUL&>%|4e%f(BK=ZTjY&lLY?oFlGb{T(L0*tn1QGUKk| zS;piQkfF;-9jljGJR=RWjPfx>N+*)EF;j z#5ALGIKjrH)p=~vs<=65gE7!zX*s;4y0M!rCC4khq)ZX`;_hK)Ttt8T)N+_vN1T#L z@@Ek?pmo!kFPEFi(9;z9IVG~sa`#g@(uv%>oX?J)$#Qx)U_fpy{=@)+de_^TOl28`HBDk3?7C{eYja0!QG;ftj)s1I?yHsEjqcQuj z^p92uU2Yshu2;ySi2XcV4yB7Fy~b=Tg7s`sSbz z=i9-|euMrI%BIU@Gvrf+9EupP>7vPXIVh6UhhK(!v3Zct&W{6WrS;V-s z1@mxSD8(gp<~*@9E@X=;XHmaERp@dZ82YDUPcMo%7H5|0L}{<29$;qc`u6t9rpsN# zkPQl%8nGX;yO`3Gk~TpKSC9oPgzn5?i-Hd@tAz^E<=QZ7n6e&?7}smi%%F6oq_tpX zKTm%vWz*%-8PZB28zPRyIeT|5r4&h3@!_x!U%}5RpHgq4Ds;J)4E?$T7s($H<0>~~ zxw9zkkW`OVkbNrs&6G`-JCh+x6_Oe;UJ*#MEu~qKs_?hOZ#M3S#I<4&TdWmVGPITo zUPseks7KYMvcTmkFp<%i{RsMNE1E7>pCQc^GCg9P*Qc3AsfwgOz+41;Wecm!rCvi- z=yIns)W6j8mx!@6Xr4i7>xEo8WngCiMgM8arpwh~$P$H=!#Ksbqk?7wN;4(#hJ$de zXbF?usn3?nl%Yu~NSCX~tRBj095GgPnpG%WAc^P9n9Xx*E?L=hxk?PFsgMB?;|ou- z8YR9M8!IiCec*i$tTKiAKXFRB6`~wN-&N>zN@SnqVwBcMdM3<%iXkVIO_wXrkOvjA zEMmV$;ZC7+yQE8Tls(Z9>m1%0js1)S&+^9NJQozMEBjd<>&iB^SXT;JYma90I?c~z zQgvU!3>vEJ`;5kr-lG3Ah0x{pGvru%&SP)HxXhg9HcDi zJltE9zLC_C^TZtwKH0m2wg)Udb(2WYsh!_`X(|nUsfutc|X7l|S?iFRz3vCO;48{L{2W%%Z6V7PN|#&7&}9n!Ct_R? zg)Fz4(rihMSp|J)K>rG5)8$@Z$Z&<66ESW;qq&CCRgwna>j1mQPS_=a0TIwE$q&9Y*FxPhE7rzT`redrzq>zh_R)oIfGK^xtzfPFthj4KUvvy zxw{y$Qz5@a9E)@I?jB03B{jo`!#P)8$4mA&3=@wle8Jk?Dh2bP&QqzH$yTMvNK}b3q^AP zrP`8Stc^u-E4KEyn*TJIen(?c4VZpMgAXJRSDQ4LTy1_v4X!qOS*wxe_$|$*GO4;& zoWt6)S++d0(7zM(#}z`CYtE2|6v7k9;#i#XaIGm#ki=^SxQs4jiz;VQudga}xip4$ zS14Z{BgQ}EG@DU6TheV{X7h>z*HGDXxyB5srVyU27Gv8+vjwH!+HwT{f;sMuY%%U- z)a$4UPf5E5GO22O!K-bV^#hpm+(myqh0x_vS@>~<9E;e`!!@ClE2%>bWMkYJY*B^h z%3V!Wq07}}=(P&ftx#m#pg@V^3))M%ILy{9Ql~3~E_Vh)PFF~mh_Uxelb>gBES=RZ zKGi;Y-h{+Oz*Ej#1P?N_yb3--^Awp>T?z|qRDnH=M(5wBzoJ6ua#a{IS0Oy-EcQ1# zxf+xvOKOJMa}oR#RyoGdf794Ax?BZ@UZYUm_e91Q8d za+*TgN9>2}s!}>~7OTAoDcoXAgURj;VvB;A%=%T`q09XVGuW)G@e$*Y0nOu-mPslA zGkXsGzbl(Aca$MB6vEToVn2KL52fLfjxig3c%Ln*Y-8w8szR6hjiDDQ^w)^76HD_5 zrN)xt_@XnrHd^pf)lbW`IEN4xuAmi9# z1-Xa?K2+^NH227)>ON;J|Dc118I7Jyp#Niq(B(d3$au}}$%wJbPIEt{{*rhr7MI35 zY*FP^>bq2hF82{b+bWcgB^QS`aD7UtmL$HRfZ65Iy7!e$m*b6G!LO~kG|q@P7Uz)N zUP_-x;`6z~735x+?9TOUQIL-Ycbim@F1M9gieFhO+5$ z+Zl4BLN-Q>gL5?Bq108>wC5v6UEk|ZVLBW5;F zxVs{S(BO!+sifMNJr}`I_*vyo>d&eQU9OO!^%PnI zp<;X&X#R&%Su2k3I#xk8<qqaIyuHAD6)q)){7kDul`N}D9r;jil4Bo_J+61%gN zEegKG&?gY;U2YMxW+`h2C9=%R2ANX=I)e9RpSe;QWoze;XL1={|<%F<)*UmnF`_ge=(LR&ATa8mvj|A0gk&7 zTaFv8yIoc2a+4VPO>>UBWyJWeizdexKImX5nAy6`ZGy7ta+4XdOxe2ajU0>fQ`hGi z%$CGQpN4yy2U!S>2kc$H|VLXc@g7( zahd}uwUhKBnAywdzfRe7xqb|(r4U}VA;z&lnpu?oYRYl`4Q3yHXNxLdP|s8qy4y?8<1}HOi*T^e~wP zI-SwD8UG98_Zc^xv5&JB6A*H2~cw-&2d!lvcC|md1wPVP1g-oJE z#_l6cM`@TO-e4E5AiR2l-FcKP3f{}mxU%SS&6$;PF4vSHeBc4riil%zt`M#jC4c^oPb>^K8@!#5YsKdX;ac$)LsL}n zLz*>ZQgwA%pr&fqXBKA9N4vTj3ZcuL&X8a5zW{#WA`WjEJcH85lEyL{i=b~<i#4gQRlpd7Co1EE)N%U7$HeK#ihKy3ktcbA>L9;fc9+JkT+FHTq zO|m=hu|+{XztJ6U#6i&I{)HLTSJr`u@gD-s3M}aVzv_X4%GQpCmN23~tZ z+S{hBA*WUK;!;5q5Ay{RJbGTg(eD{PM{X zzh|5&{>V5XK5CpUz9>1$PZeKjoFd*+KGMr><@kG=UMe1HTp}K3Tr3`ETqM53xKO;< zxInzZIA6>s5QLw(&o?d-cQ-B+Ut?S#?rWSc9%h^?zSTHeJkdBye6Mk)c&c$iJl!~5e2;Oe z_V7k4nu6(@|d#TOfA ziTlN(dYR&$rYFRA8K;Z+*g(I2rHb>7Q^XG$myPE5A2Ti$FElO@zhGP}UT0h+-e_DX z-fUbT{>(UE{Izke_)p_(F&|MFe*eX_jWfk(7$?MyjMK$kjZ?)}8K;PQ8JCUX_y-%8 zif=J45l=EM7SAv)5hAMnc`$y9}?oK#_8hI zj8nx8j8nu-jLSxH{H=^j#XXEm#J!A*#RH9t#5t9s&#O>;r|AXaNv7wEXPBNVzSlTg zyu>(5ywo^Tyxce;e$F^uyvjILyvaC4yxq9$7LNaI<5KYl#wFr?#>L_RaY__lBu+Cf6gM$05Fatl7k4+#75{0REgol_B_3~_DZa}%A->l* zUHqzXs`z8$6!90vWy3lCGUHNlta3EI5^+uAVsR_uB5_aSLUAYK0x=&V>6dT5c&Kr% zILA0!oNt^Zo@1OTo@<;CFE&mWuQg5;Z#7O4zhzuDjN{*0CF)m#Sa)~i?1=x68AFB6puAd zh-Vw8i}x9)iVqs6hK+n-(*}QzTLP`e2;N~c!6=gc!hDU z_(kJv@yo_p;`fX*#fOX&;^W5Y;-nhU`j#qgZJZ)L$GGeUj(-f!!lz`Qk^7bHzK2v&A16XNf;G&J^?Mr@p@laq_7Vr;Cr9o+>V9 zdWyJ@aoJ#wzqfIzxTSH4xUF%qI4~{}Ut(M+zS_7zJkdB`Jjpm$Jl!~3{E%^$c#(0Y zm`_~|$1h%EoG#vOoGSjnI7R%MaoHe_|G06fxXx)&{St9w<6`mI#zo?G#)aa9ae;WS zalZIA<6Lo$aklso<1BH3ai(~MaYFo>ak}_j<5Y2}af%v$`Qn+zx#E1|Z1F1NEOC)>rg)oiLc9X!t^N9tF8;#wRPhU@ zr-;8Zz3h69|9j(7ae0d`5jQn17Pm1j5_d2z6pu455a$@@i{CTO6@Ox!Ek0$`q@u{Y#it8Ash%YuS8_4nZGAEZ##sp7`QDdJ|vWdk_=vy4l{ zJ&jAm*BKX!R~Z+H*BBRyHyam-KR3=7|6!afPQuw{Kb~wcPr!T55G`6?ZaD5%ZlBzJ6JMj{gSZQt|D^CE_{8#bQ3?+UFOE`ABBZgiGPrUS; zFXp3zJ?Dz~pheHw;zPz+;+TEjnc_2y6XG=Eba5-=RB@(piuhxkjP>&?>&NlmYq?=#L8e{Y;6{?#~BoK!FBe?r{AI9+_5 zajLkpaf&$0xU4V7Ki0TZe5Y}V_-^B3@oeKF@qFV#ae;Axc)4-Dc#Uzc_V0-zIeWIu6UDiws@a$miRB@Oz{!pg!sz((fHEE*BYma7aFIC?=UXw&GAn+E)~x- zE)hRwTr7UcxJdl6aiMs#ae?@4<9zW)#<}8#4Ws^Ni%U$;64x_5Q~ZtT37_8}%1;+} zGENouGfoi?GA`@I@ozOQ74x~&e)~`&{>ZpkTw+`#u3`Nv6gMy~5MN}RFU~Q}6<=kX zE$(NWCBDTtQ#{T%A-=;nU3{-`s(7|>inz$Q>^hGBb>mX;`^F{WgT}?;80Wn(@VrL<6`hh4?4)jKMn~V?ZhPlF_=8DgbR7f!|a$$^Y(HuYvWHWo{GO2Q)6j$ zGh8e+qe)EHANH!5lr$96%BD$4j26vzd7J*}FmEE26rPX!Q>6}HUfB77)8d#Ks zllD2(<#JOPGE5;yDUtnL-84#9O6tH~bi`F^Y*D2NS~pgqbh!x(jVrWW#JGx!=449# zDxhn?%)Xlb+mub0o5+x_n{dY0M;wa}qp6W-dHBJ+rYJrGBD`K_H%#{Iaki*^C$omB zHeGHMYtK~HrijA_5U~HjC`sRi+21mR59q>;X*9DLa=Ai&jTkrQ(q#XGbV+&B0cMWKkl=;?rsJ z2!vm8-0h57q$u7wo@j(V;?*7HZ9!cElbt-9EoPH~)@7;yUG7>I;9dE+$~BrD3RD~{gHA6p(vkx;P z#x3bIucP$3r1!wgUQhp(%BIWl#Ua5$g&d7I7U$!DU2jF{mihsVnxLo_6>aJ8A-(Jw z?`3E0|1hhQvUGd_gkIN^9y)p>(;<41HCh-69TeuI@tVDM?dV1$~%|)+Llpm%D@^ys8wJ zzeSAOX=rv+6gNfgDn{`tL)?Li!?6jjzqoB5+p2Jlx*R8c!mnQMO1{5mvc(+hqje2b zi!K*uEq~Qj=ZNu26PnE_@d_hc5DI4Ym-MG9n=Z#&0)k?NRKPsNc)t$KmX!V@=_@do z*$%d-vWa?KRiVo@WN4m3-;EfLBcR!s(r8J1-x;%$(K_Ci5WWJf5ksy}2%j?R$hg6m zCJ$!#1>;&Vs;Q#(;}l1@ba=Nad&V1FS-XT;yagh>=d~uYO7RndYi22tafLcf_CNSg z(rOfBb}9We6hfCfogu3g@>#^#qSIvm13sh&zauyU!9HBh7FBdNXk}HQ%T;ISEeg$y z*k`#~l&+SvCd_`0Ayt)4mphdqZ4|O2Vq7Urv$mqR200!D3M%?S)onGp6vv{&1@#Z2 z*vScO(aDRL^#_hMd6zo|GuVoKhgf_CB{J?+qIrVSbCRl|AhRo>bw?CJm;0L`d|fks zyduVJzBH5Avr&?=&@=X-DqB<;PyJU_q09ZrDtz!0HqQ~`@=2PEFGTn3F`aA`Z&3XZsPtp7Cj{?trrBazC>6 za%Gi6sMu$z|H1u|s<8^PPhrUS%BIWl5MMAtA$20gEjBcL|2xuD|1VJ#-}lAtT*ej! zJ5xWXf^<3F5fs!_C=Z8=@jFKIH%k9t9~@hBFtcx@{|9B$<$h)euZG1JIbytE0lQ1? zu%fu<V2(`4*+}lA6L~A1bj$ zAAX>|5#U{}h@qe2|1`W`5T+P6i_mDxXtdi9g=uRx|V!g~kvn z_F0ZI3>Hh`^H-UDHbY)eHeGHFLwJlLynl;~%`&C+GPwph-t89jQB>~fwi@lLWee&S znCxUPwwTQ~%$lnLbh!mAP+J9tM2suxX>!2@$Ln&ow};td=%24_y4;ft*`tst5u?8} zmr&xHiSPwQ&)A0yw&+76w2rs4pAQm_#p%-LAH)^%L&UhV z3l6Ohcybm^|M^45HVxl}aBFob)|GH;H4uw4{67AR1on3YTg-6^3yjem>2kMoXgs2f zr57>ovY|PN(xZ|xP>|W>(Ymq9rpxip&|s`WIz$|cbM|gBrQVWm0kaQ7*rJMVK;q++ zz02Lo(AEmo4M=3H>Z~%JQVmIWhS_|#jvK8Iy4*O1@EAXCF^w3H#>3KZIf~+faZ?zz zT~TYfp!~LcGEDaDHn!*)pE>GoP!?V8W@bI4tlJ~TE-_8^KbRnC37FZr^xvdxy4-Mv zT&s|0BgXnmll>3cOR9;FkbNk}7FCW>zg|`7a@-^b)fCD{ii&Y-9L-^re#4g<|0{;s zE$JVmY`WYKhVWKR-1HQ2EY4?zx)F-v8sxGW^{k@!D;};!7vQ%hTu^-2C_91iRY5+Gli7Sw zsB_Au%XMam-(Ti4MaB5fnWpbQd*b{5owA++vpe~0QE(FV4wC3{omh~+mv|~u#NnH! zE~CWl3-0F*v!7oyohfg%8hv zbOP7+_HVS~ADH$PIjxEpKNd9hutSlHEpmf6z<-!tUm?EOc)pkiGQ6HAZfZPH+{$>k zxV>>-u`})_o^0G+%r`9i`Ypv-#&yNRjVp;K86WM)k>?s86hC3SN4(j1hxlLP4dNe- zSBOiE=Zk+c&J+J>JW<@vme+9cPdN19$J1BL2WoomCf;XydodrK8IE5((73Mn2IETN zr;Lv#IQ}YD@1VH4@g8x8@eXmqc!T&-;}zn|jpvIqjq}9U8c!7WHXbfsYTQ>m#kiX| z&$zvKp>a#`2IIQo4~;8{j~gGoh~qyM|9$x7cThYShfzH55%Xz@o_B~}Hr^oSBNM&8 zLcGU#zW6*G>hXG>xRdcjabx4*;+DpJ#chnciO)7}FTUKkr8pM{U;O;)iurIp&y~c} zOh4*4emj%Y$jQ5C-8}AS|uzWtuGC6*k@e1+9#`DE}jPt}_8BY}dYCK$gI*#r5 z{`3{|X>gvqi8mX!7r$lPQe13YSNyecC2@HiiShN0c3}VCH9jc5$#{?WV`DzdGCBU4 z@dojJ;}zm!9K-ST=ZpDNG|zeB4@{pZ{@L{5;ulTtD=vrQG2!^d6^+}AAHY!rueTKQ z@n4?nimx`VBpz>k^g@p3dEeg ziQ+Qj;o?(p=*HLUD^4-)CT?ZiUfjjFrI_!P563U&8{|D#68A9X!z^(ZjPXJ7bmKkZ zM~!!g&&GibUvGoBt?>%+D;7Ur{E=~<_zUBS;$+JoE{+-Z6<0RyCg!{0{ruaD`GR=Q zEyWLGpT=`t@k7Ry#C+0`*N?X6`1zzG&j-c5jrWMNjCY798*dOVG+rUzY&>5)1BXa_ z{XFqh2%=8TS>hH|{2W#kjqAlW|M&$HsNVCB~J+-x(im$MGLBJ}5o~`%b>U zd&D)2cZi!AZxHu0ULofHAwGY;_#Wdt@iWE~#r!we#}60te_GFd#XL0OxtsVYa%?9x>mA?s2&9jr)qH8g~=l zXWU-A&bX!c4dc4v6ULRq1L{WoJ9-|+&nMZ0;}`cZeUF$A!wJVP4vaU5bB$MsA2FUU zUTmBve$#lO_-*6i;`faEigz1#6aQ%3UVK)asDCZR1C8s7?=-F?e%AQtxg0;=VjhlP zT=jp(FXpSw!|{vHG2S4)$asbLdgJ-x(t1&To|un*@%1K(e=&Wyn9qOldSCIa#@)oZ z#_h$g8MhR-uzGdHe5JXsS4lj^_~oA zll5Nm@bechF@1x0v+)Y?8^-g+=hlzLmnUv#JW=e7hl}}M@$mB(^X1~6yNRDMZZAHo zVWhVd^I;=CzOJ~H>6OHM;)vIep3U*`o#LJkijNrY5w9`cA>L@bLCm*}`}`H+n{9sc z#XlM6iOZ)(@e{>-42I7iF6KE)&wa&wJ-6p>;s=e}i}}uOueTI`YFt;$XKQ%9lK2zj zqis2UK5N742gQ8ghUY!v1I9bRCtU?p9Xsj?UhIL>a`>Mw(E$J0;}kUhX51P}J3k{m zmR2L9R_sFFW)9Omi8g4Cz5Q6)=>i0~C3K!D=Rm&9diEdztbW=TsBj@OU3b~`QU6teUASm!vl9);bnKT*rK}w z8TthNc$ZrQGvHIkaV(P(8Bd0z$?*sKC4Gi}eVP3({k(f0M;GC8Pch_Gg}j7$ig6~8 zrtd#{;``5ghH+3A{bP5cD-Z)G?{bS-aHK-}Q6l>+x0Dj^Y{tu5SOwkT)6o6L zD3|{v&r--BO8m_6v>KYrWpYh&d_hAHQv{U_d?+Za~4<8CH@UTtL!NW$u%^sc?O!BaZ z5HE)n*z<$p^2Sre8OCG8cNq^7ziE86xDqxxzFtRh1LL;h#>S1rX~xyXFB_j|#s0O$ zGVt|&7B@29FRo?0OFY>4b@3qMRbqZO!tsl@89ylg#dxZCFFtY~KSsPBUkJ~G#IG1% zE&kcKqqr5e6+XVL_bH#cr1Zj0@VkFPF%$@oNbj{jHVpT%`;$9%uI%ywjV ziI3TieE|L84|DWxwdD-e{N-}IDlsU-+7w5^A+_?jm6Ke${HU#-OK3(-10v;@xqrg@wp z%@r~rVq953ll>2>NO}m&KHSL`RkEr7qAGN`KN$K2zN@%qIAS~;kLEE-TO}<8GkXF3 zzbTt8#~tKgi9%LHj0H#YZ$)v9aYCW;DN~v{2GBU}ir-|EJ2P%at%>l0x2(7*C1jt{%^j zV7G+kK}PX)0JsbU$K}JN(-9_nR-P?tA7Lmj$Mr7v0kaw^OP7q2aS27LPKligq07C;kO2xQh!|($Y4RyLc>5R4<t0QlJ2i8im*Ybj4~O zu2Ib}&~TZ3fiU)W8(YlrRTl97fYId&S?hcB6i=Xx7-#co{)bYrq{Col|3Lpr^@J|B znjtF{ay()@nQP2A=nGVTFE}Fg`ZX0QeUbnbh+mk%D0?^JNjgw_Ay4>>&X`zsFBgWOgG+$H{7mVY-IYE-5%5$0d4HK^bXU}+*GHZXu&;`n( z%PnTsPON6QHZEdZ08Eqp4^~U!4b9B{g#IU$O_y835I$W7*WPevn~YTzvseFvagum- z7yED;TU0rP`aFfw7pFLYWnX|HeK!>hJ1ld5-zIbKRV=CyqM-JnOrdLK}Nl-s72VX z2>;WY36njW!WOl40nzQsqRUNU*4@gQ7BM!NG}-@PgrrBp><8$dplrI_WQKH6$lQoy z@r5*f|Jf7Y|1?GI0kb?qLUAa?+{N#8H`zd}0u2fvv zn0Gqj%%E|xc!qJ2ILDZyNsixdTp(UyoG<3vWc~bd#ph!e#B;Xzp#6iEC2on`9j|AK zR~aY7=U9HaxQ=nExS4T^co=?reZ4ZQQn>%y^iuJ5{A_!jccS8XxW-%?@w^=4B5`ly zLh(T30`XAeeDN6LTyd^(wm8o?OZ>2Lrg))oLcGj4UHq(Zs(6)gig>dzckPqo+l))a z?;4kgcN-Ur_Z#yv_T>1t#{8})$1kwuTOhv3IA7cmYo%Ylx#Ax9(s<4m^NZ>^OFY9k zQ=Dg<5HB!J7cVtV6@OryBK{FuV_&}vn<@MQWXy9k$$I^m*Gt3|@T=vySe$BHB<^Hf zD8ACTK-|Ze=UDK(1>;=tNaJjAu5p(5e&bB>YU70XCj9dI{-uj+;WyoLs<^&!ig=O5 zmthNz=f4@3ivMHGAA{uhYsSUm?Z!po_l*n1Um6#P4;kl+|1i!K|81NtZf^a}5}$3H zDPCus5WkC`{c!x^2e5+@j$izZaf|}Vo48Nku@$-yJ#R=mQaW~^)G5=5V`Fzqv za-26wc`g*E85f9oUzykQ#k-Aj#h2JW?Ac;owC&@w#1-(@bEdemaYD?uba*{o+{idp z+}=1v+~2qibHet|xKupJxI}!nak2P*<0A2D<3e#dma^|pfp{stb)NHmyy>~(myEN; z+l{lt`;9Zj-x?>xrN-&vidf72{8Gi$j8nv`tUqN~^2zZRjZ4Kv*h>2R67hKBV(~8H zBJrojh2nGUfJTA%PW446U*pMZj*Aa@p z@f)0RO?d32aqL3wbKrFh&|G(!JgDM$mwCX)hvS~3h;cDJ4~O(p6wA2&jJiir%kWdf zR~_ih#XS|Gn`ryUr0NDTx{so(;fF$uQy17*bvG!Ay>vG-Dnn88u@EzQVIQ9VRiXBD zY`z??KE@05_^%Nk7w=U!m|4fgk7J`D#*q&ca6{!~Eyw4{2Oo=@V^w6$+E`KDjdJNV zF1&{x_f$Z2qZrLYOSpwGV%#W*b*D(>Mft15_Zlw}^It_@pO-Wx$9cre^HgyKENahV z#6Q{3+aU1_`+2xpe4TC1JBq(IZYzG)HqVX3W3Y^U{p#Y!jZYvFKgYKD;K`@t_$K51 z;uf}f*d^{^%zFp1`)ptTRX*Q%5%{Fl{dDYSBtFH`#0`AdB}#BV82{m5rAoY~FF|cM zG6u%d>SMS6!uPQl`Rs>J)z)_%+ZDox_lx~V z+?SMiOKdDYhTmztZ{$%7ne%*~p&C}a6Th;)^HkklW=&8QpZ?ByR^nIrL(P*eKfdsg zRK$KBethkfeK{5^|MfZ%R^dr^_pYkYnr0RCC zHeZK|*DNy&v;U3$O$wpQZDq(c3VAJJ+%`t@ZA$)-6c3+p5!}KSRc_=~?q%rS;J;J*Byg(uL~vLd3XA09mep()SoY z)*TFj+1u#%*GSOi7BFO+LWV|+yM<{krnFMh@A$drxPQR!4##~uwuf#Gbi5#u=3_Fc zYJ9uK1XKvLF@7rLYI4lA;k*0En?hVN|T>wz!#@uy~Ykv zq8>J@vG{TPSR`g?TQCT_p&6HAy+yQtP0#g68I6q5VS8uTK7baNksv-CKU2f;YX;j; zmECKN);*|bx*R{>pshl7M(q3GKkr(Sc*{K((F<%*T zH2wG`9RV}@cl!B=ew+`W$=%hX?_iFy*I^%#s|MfI#8u-_wC)~NnM-q) zOufm8;|uyLtB_fkr|x^3sSvvK`3CKLk0ZwFNK>D814+A?jd5>fiz;tWpQb8wIqtXw zzluMK7}rM8#fE0jq8hf8JO3ri0{NtvFGFJ zR!96cdOjq+%k;fsUg+iZo#I`_+>+zALF1L;&iGOH@!V1*$Cns$Nha$;Ij>I^Ut;qg zDZbr!fOx!dcQG#p^Z6ab{~EUzC)**Z`r=IdlKS{6;;W2#TN54uZOq%AlH=oy_llo1 z-YG6H=G7U=ab8H~>+|X={L5s#K>WM$Z1Jn;ML2#jcL_X?6n}3#K%9+F&FkI8V~jh9 zdBVZ#t;IZN;kmx}bA0hVR}o)kd>l(EIexkEA@OnJz2alWJH<)ZfcknoIGP+UZ@g0M zj2DO>H=ZqCXgpc`zVS%$$HoK1-xzlne{0-9{Eu;KaT0#m!tskM7*`SVgpAjZW6ep9 zH!?mXPBY#s<~bf8zf;WL*l_&fbBtGt&o}1PgLuTYF|Wo;j=yOVaU z#N6rg++Dl_zsH_Ch`BHBxwSYKzr>#Fi|;h9B7Vu3w?X0%7JiO>{2_5YVdL52+wFg_$zmS3@%bagj~NdT&o%BY?u*}0AKyW|$hft5 zv2lGd4}ALgD&qG|KaMR|a-2`<@cJR~$HsfbyN!2>2UxvV#Dk4_bRs$42EV?(-U9I+ zw{9~*ZU?=kKm zK5X1t{D*OUaa}tERYhFi_&9z^Px>EyH8yk^XUEcpWu(N;8icm(u;3%@zCDb@wnO~2 zGi^uU{3RmWW(Vsf@|-I!+t&32ZEudn$!$jlPe^WbgmOKSNtcZy7w#UShcHG_L?plIxCB;?5*s3IYK*E!xu!1G_7$kIT(X=O_wUjXy{v@jAq7cEe7_poXsUG*pK+2+J?+1^dB|)ly8H*s}E}T$ji(TUxXx$3v-sPTV=y?jA4XJ+@ z{JJFdh4bK(Nl95@I|S`5p-n%hTfq}BO$q(e!!{4CpRJn#GuVSzJcuov{d1iCScTB# zMlocaLROQxWbpqC&Ff`y<#g;%@Svhfz=1ntE?iJ{{OgB z!F4coMmDF0q1^;+;8gN0=G6oHl8$Rezyo(UPQlVxYVR|ooI>bw|BOON*+PcwCI1e_ zwPrL+DSa*J4>13!`H3y6d`JBwh0^7AF?54Me|#4NXo(vy<@1vC2y{e=pl%RS4G zI~2mpxZNU26=^;plV5T77^ALJ6c4N?_~;G%b4qhAs^A}gnCxTn zYfkA|NqoQvJH_kI*{L?vt16T(7h`CyLeC@rGm@QPmOBbFxJlAgU|!YV32px_*j6XK z3$Y!v55x9TwEHpPFr#9y1DdoITn8~b!}fi&!D%YUvlMQ-;(1QPy&;p!)xE~3AMvAt zlMdkU;+GLHIgUYWF%JG>y7|hY%RR!Zmy|Vxe4iv{xw|PXkTem@Y@S|l;}k-d8_kf3 z3b})PlccFMvt+U-t{{ueW^XXxvDl9mN~NXWOGb$(MhU z{V41wPU6KU*{rqfzxer(*Pz`H+C^x$V0s(Vdze1Kv=7r)m=0np#dH|cF--qrs(1^2 zxiFoEsV=5yc||SXjTqT%oBkKmcV_528|?+5?a*F~sT-zDOxI!Rk7+Qbn=y^TG!D~5 zOu3lu#xx7l987aDEyT10(+W(5nDBkZ8snaY8Pvc$WAQkct4%}t=P86P_b@|#n#Yi4 zLtF=%CCa_OA(h1jnfsOeNEW*MmrGGjhKQF z2*8~=NKAZ)KR9?!liyZcVoei2bujzF%;<~zz}R9uUC_D~DBxYLF>5tct*a>UQ^Gk! zn0`ZY@+Vn}4JjvnqQUntaFJ|S_Il)&k$yd zAGQf-{jb?71g*n#8{#;<655;5`gr#$%-|-~xrcSRp2p%V>0Y4JP0~Xwjd4Ff{{n^3 z<>oS^nL-{T-!ExC&6zT}I32%J!HLIMm@kA5H+Cyva%0C`N!I4Orrq_*qRa6c9lWKi zrQ}RW%yO4gDwMPe%(SXOG&(8$TgA4p14#-4OJA6du3dQ)7ES= zVsXBj+Lc%64w(Ml$sdN}n}qOR!uC(JK{Ms^IGXzr9Md5*cYso5NqmcSMvqwhW7XmM zy%^#fkN(fJEad0Wt_kf8Xp2I73tBvhn6r2tX0QgiICf56Cy6h@cB^G_Wp*nWb-$wc z4(i0cTBDoL#9l9QYrxF7G8T`qZH0&TGHbF5@Fm*)yWmgK2=Ew8<5?}CYE|KPBNfLI z?q*6&BsBoD)aht_epiTBVY*iF)Lkaye}9BsXhgnL5BCi`1Ydh-=!7?v}RaR(mBwgX~TbU5qJxxw=unU zlJ*JgeVD!qeFxFv`J0^I*D!;|n%`~YPbH0~`H@U6f47TKe?QEu-QdIteF%@ip8Ty>E=yFS$wM|)k6S!L-=^>bYb({uX0C{HEKEU|7ihl+{+!)Mf-el$RW#N9i z&<{KSVVnlR9vbpUv_Ws>Z)V;NU>szpIZ)#`(+!#Nvlpx032|mM)pnt&%EY*E6Ft9u%qhRmQm9L7n!{J_uXddqTSe?KhZk zjRx}EewaZ^)rpZmmQBmx)FAgZq9UC63}d7mJUed8xjiJOUVA zCEf}qzX3ex$5o>?T6d4i(&g@A*_CrxAeB5p60_V`N^>M-fSJwrw!1+Jq09AW$Y_O} zN4`c9XYaaG>M7}JF#Etm`mBTpNbAQ0V34#*&!j8d9n%sTY{p*V11_A#}Nl z4Eg>+j-W5t{{z2!Xj0Nf_&yKYufvwU?_vLpDW=PO-48Ok^xU^Fg94RW22T90Zx?Ul z%@~eL$=P0pO99aK=No#H<_%3sx*FjpPfx=4G^S@Ut-`bplh1XlVFn#lo;UfrWs+Fl zJw>UhB;HfaZ`^%o{nu<9#KZa6e+t{&u)P~C?&7V0{HZX5ZxDkAZIZ`JS_spZxEA~( zfa3bh$rZ z23IPJ*Sxz!l9=Vbqm&_um%B529Q_|Dgf6#>At?&UBX5<&i{ITQne2&sg;57*bDl4Q z*&Sa0&Vt-Xx~CLMms`lt*A&W2;N8QLnB^Xzv_ulGerGnXig%M0LYJGskf{oJmpn?+ zdo+j1sNAJNz8IJDg8E!1yfLv*%i>bB!$rB{=N|*yA)E3{2SQM-u*;rt)vWQqYtgwqDnJ{ zeyC8oTrorMQ)oJQizH^b*C}O7;uZbO=9T{L1%=S%RxqTyLOPQRBwb4LahY5&?omcH zQxwm$CU_tXhc96Aih%3bVvBeMTEAWBiTJPX^HX2gSs@QW>*L)Zn862#!OsHnTrWuj zRRUkvq>kW~kS{~qow3Uldo$;Saooh5Ksj`|^B6KiA*0A=O5#ak*Gwk+?a~-^y`u8K zT&%flQE(#liVCI6B{B3Ih2Bj*as#`{EcYACppGP-Rpw^m0s6mC$ip!GW?~t5OI}ja z^I=PS4eSjkF?~g3OmAZfUWX$VU&4Buz_=Aj^=c&He{=9C$ajY=?OCwroW%6a4S6Bj zC74!V!uxet@@bgCK+U36C47*p%26tXlvtlc^AngEWAUTF_I&&!ht~gZ+aIZeF`b5N zPB+6Ig~`XdVK9Sos{F3yTngtEn6AN8GSg4JVf*>G9x#Jq`0>I4Ng&awEf>?trauEO3XLsAr72D5*cYDw6`8;qkO$S4WhZ_xe_ z+P{SDpJDqq+8{&atD&a*4U9XiVfvkN)~XoRV#``VlH$)`A267@%=d$~zAd=H_uvcRWo>uBL2nsjv4klOPbJ${r>1f?-m7>et%dFAL zI-fj660=+mrJj;51v9%7{X-Q(mmAEGwhHM+?k(vmnmuH)C+avhuz~FiU^Te8%G~EHwYlLdby`%x{b`oqS5ZX8!HnOt`6 z8koU&$haO59B$@U(!8%6y;m}d^NYoM!0g{;AjVdNKl|?T(-zooV|owMCnxzMec%7$ z`|5x39X!cbdXmjLhr!1%{dJ&kE*aw!&Da&-;3Q8)0vpg#uUXw?FI0;(0}ns zdNhme#k3I95=<*FMLC5h+4QXi zzl>=Urfrzs!4&LRgEMP0}()l_}#HE4dTZBiMc5({PSg~>VXX5t{#pv!T21#MO1TX6p_brJqM zKCJCi|L^IqlYA#mvMZnfW2>M&6;mBd4KX#r)Cv=|wqbidT711ZUw*#9dT2Ooi4L=C z<GV-00E{ExNEiVC&fXwM~*jJy#yhRiLy<(i|}Rct8EW4`4K1t`uhQq(T;uzmc?*=6;#{ zRd$~-Do0Vht6-7ykUh>|(;Ta>!8?cwf0|!|$yKC~E#~+f3oKGCy4(}2)mpV)CeM+? zEH|4{4M|(T%-%%*B!$rBZfD3(Q#kt_<+d^F6=l_-^r|Fgx%HG5ONxit4e4L15W3uAhTN%;rsTPjTGD(-W*eA( z9nAsXiK#21In96_T&&d22x1>EV2eJU$NUk>r^^jtXdQ)KMD8z%S*{nQzwh91t_1UI zaT!`a%XEkzK|3#OFGTC(-1#trEzt0L%sQiOgTQTBS&lI@MZ5 z-dby)lbj@g)BpRw@4bBAUVHt9J@2#6KEpjZM;VNRZ1+DeKzST=FC%`{<&@t559KmT zvmG>ctkP9OX4Y})*U5z{^DJGO$fbtzA7oCnV8DVpy^(jmOy6eMbuB03sq(!U1rGTe#my7_JDFIbQNwqz>NpH@o>cW z?h4Zn5nZLE>FCe^*gzr(TbN4n{>EZm0|9&ri>9$v*@CF9J6C%;R&=*c;H}aSi3YGObZIfWXs` z7r^X=wXVFujW;9ShVVK9cK%A2h;+|Eu0}eB_28QjVwb9%eQ@HM^A=;Al(r!@E0zAQ zwdof?E`$4>h?gKdh!87Q`aSet1R2j~NPkCDhD={U=G^)>_1DXVDsv58{$0f+|D!xj zrUV?3<}y(poMtk;UY6I5JXkwuuIyjAB|KHbxmxWsYYCHz|WIlnZ5I zD$|9gOJypD%+w{+XUc^ta|~ThkxM_yA(>dbX+l$pO#Ivn>%h;#Fqczl-*X0=MwNLV zG?pmW^C-V16H}QTG<`gkuGNs4dNTFvyYeo)qIK4auPhpw}fiYjw8Q%zQ?MU*d>iK$GSrqg8lJ!GbSkovK5p~{S=OOafj zqC8Bdb)SB!Whbg^*31NG8Y|O(A+yO} zQ2zD5YJIn6n1b&8qG6VFyn;4?`7qmC#5 zB-mkWP8ZeMrl2>ArK zc_HG;#fXnX=!MYF)zRl9AE$gOF=QvdDgOih*f z3N&_`T&7drFH;Suy&=2;a(|c^9`|v|PeWddumNE+!ZrlY_jPdm&l%G7b29pa?FkUAU@IMUVcLw$frR*6X6_$U%0l5-1t(&v4yBG4hFX8 z0?4*c%{ZE_lId2MO2*;i_>3_%YUnypu2h+RbR8kr>mgV2zHuNEO1^L37I7Xz7gwgP z2pqGVX(OPqOr^aCGPD03^;vSE%B0ifvx}MJUdl-_JpgKNNW6{?ehlVahN?sd%D=SpxZ;XRsYZMK;XNJZ1~pY4jhw} zt~1jGMZ4A}*$uZXNaBS(koO~eju3kh2D}cPjS3HHN4g>dbU(TPPrT3v75JGO=)z+_ z`F|JS&;oRuR*{QH_h~*12j!jB7-KZ19I;tAoC&Bhw}QqhRagb(U&}NA)L!xogWMcu zFP!1ZXCpojVWKNv;>J~oV=2n-ycQ^ODBf>CY&&THj5{y1VX(`GBOZl-+paC>$DO-@ zyas*@{lNzz#GZtJk8;DwR6xf4W6~H+cgi#qa>-=eieZeVPNuyB>{exRKx2Hb7YhYU z_P~388173z$M8=d|HS2AApRdhK>4r;^9{sUXXV2W^>LZzm$b}Y={j{8y~0Zy-G!u zS;SN~E7hMV&zFg*%x`Fl%k($MO#Kq|SIUJdGmS2%%H@5?l>@t@;SUYPoxut9!y^rJ zPe6Xg)&0qhUvT4>5x@arn@M+(-eZn#-mxdhX9$U27XnM7qIOR+x7ob6rT?thObw7uQsNGRnUb@&NcRabxla!B-$Wju7hu z1>V$Vvse!1H|hPNTzt%8dbO5UQ?5&=Xa#x+CijZ<5l~Lq`x#@>-NRHf}NG2IkVR?}Pr8cS0a{8tsMYZYUZb^-0fJusD9*wBo8Jq}$=;PSdAB zS>Hz(qr_#*;IF69iz>4XG*+U#o}j!@CZ;ma)08RGi;$UmJ@t>ug(|b0E}xyp++Lx) zL?#w*?xN{Unf5|v9d^3PDdLtcr|gB+)cN$sf)^l^xVqyJx+|No7%f$2Pd z+wCSFs@TV{W9!0USgm20Mp`IZ0m>Jf_{mxKZKffC!1YMM@FMstuKb!${}%YWKKUQu zA0uEDMn2|4(AecFb)fPsM9T}HeCAw~hWL1d-mXmD2|j+ZkJH95%+;OY#%Ciw4`HG! z)8`VGS0VnD%dd9h>k;3K@LPo6xjLq~+vWEoe%Pmf6db>BV_TMk#vX<*u3;c^ps%2Q zp1CgxKjmf<*&ecsoJQ-ms!gK`u&pPJE7TEDJQ$S+{Dt#GD zoUBV2qZW73b);OWGVG(+p|MQ5l=6u(F_q~{(?4W-0y3{ORv@-l8tq_w9=48%BT7Rb z(}`*Rpfpd*Hwk0-?chM**U)*vfm1RGSZD{pouF~-gALn<#36V0<1tE4KXWG2_gDHf%BRZ2tjr*qI?L37Sz`a2 zf!Ov&YZ(7C25Sc5V_i?7##kKbz3eRnc?5QaZN?}b#z$0%Kt>C!|w zawY^CTdFK7Ay=%?@SOn4hW28NhL+NGH!=?89uI1-EjB?OiS- zmjRF~mZ}ZoKv~c^bg7m%RpwH9KQ8Yo$`{Bq9kg;_4pRPa5LPjm83M3*JOthpp`}mP z8oYxmAM3^ih)c*_*-PKsl}|t%>#p+eMWOul*lj921?8o|n2wN*@O7mP?R~rxIBtBf z-Yhr9_aX40h;l2L9wKca%IjQ{O0Ny_IzJPAla7NOmq@KZ`5`uJZ%8-j_hKEfm&uhXGnuac)HCeALAKN6R48A9j^T9h(ei&^_7FO_ z7vu+EW9SEd5(3l2mOz19^>E~bKTw-tK8(|0i@I@l#MaLgGTntr_f4&TGbjf^$B+S@ zBmW?J+1^s$bQ0z-9^!6w;~j3i(~aLl{GrR~$FR>Qe+vE;!a)Q(dgi~NvG?GI6B|df zr#=6Z&PJ2*o(X8l1$a_`*u1KQ9YHI33J+Wd`PT@)KnAzC@ojEQ9m8Fa@Ac^(a`_{O zpFns9AvRVuFf8Ly$k;KEE~n`PnNEYu&h4kNxoooRHn1_U4lExJlbP-&rsFemyzMQ2 z*7bNOpTdLE-fnz?8&h{O_%MVsT;16|+j-y<5iUWfLcqs@S;iDm_L;c|G`0xYU=4xH zxqmHV%)1)enX^@y!F0V$t~b-vS0<)1y=WRG6F)7@)bpv2$b~A?i7usbSwuNUrh7rJ~9lIuWVtGtGmPzl4lk15%lP(^Pf_W&Q^OrcR~)UAa(YcGBe- zxwN3XO{SKlFN?A!W+S~m9?6XIA+tK|7$d_R+E>VxD)SIs*U7ab<-28KDzlKL2V|;* zT=9z97oq7odGS9+Ru1GY|CIrlJEtSK@mq-BMfis+f9%He`M1me5`(*B}67nv(Wg{gY@FR*r@2>kn&T56|bpFszBMtlNqCrFJuNylowToEsTv(UUABwLB=IJ z>3*8}$#flL-WdBOVtZrkSs0&3XbSs_ZcMJ;hKxI+%wsEP?AsBPXH(uF(;Q`!h6>Jy z%qLS`Sm?@&-FPYD&m(cg9ctV%P~MKYgIV7Smr(BF+N{rmd@fQjOa#Bg zm8%f{%4fS8JXWc!e_xw;5R`o0@rTa^*lk;Nuf;{(#O4|90j7ApX{8bCB5cVVn%PIYKK}-v)6mLT7|f zZUD2vxL6&}EQZc0;yjz4=gffsSDz_+t5gO#eGX*;{4-XpHyi@ms%a zblC&yvTtBwb^pT{1%5`?OO=W$Gl{AAbO0Mv%Hw2WDswhX&&iaC40$I04tiUsG8h-Y z#?TYIuhP-a^kO>RJI8s7a*0f>NTZ^xp6N`lvGOW{%sPe{qmDVWH&KxNavG&6d=8p^w**jLD@y;AvWVx2vz1B7Q#EO_~`>=yR9pN@;%)1^FkTq zo(O$i{XoQcG*au|7V=~8XUOyMF5t|I>0`f#5oZ)6Vm+>B;qf8Km}?Nvl#R2( zu%uX#lJT{*iWW_nV<*z*kP1I%gcpZoKfTXTLaNMgCj4SBUB00_P^LsAtQ;6d$_;(+ zT{4&t7dFGTt%3dZ2J$Y*yAk#v?DyF|2mc!35JDo#OhZUV$VOmU?GeY$QN5z546EJ+ zv7sNHkC2Aw(o-(oD1VEr@L?v>uSD4s<}=V(hP>uNuEj=}<7J3fBCJAKSQj{6Oiw<6qua20I#xH0(yF8@7Z zd<8~n@{lGM^1pC-&(ImX&?i$@3OVNL`XD~hXCLC@r-7g8lh1MaFA!gZaH-FBxy!Fa zd@Vw34+_G;g-Ws0=OZ@sw< z_%M`$$6UFO8=r`Hh|8HL{;536JOwoN0Mg)}u|uwCr;$Gal;`j=#;7U(m!|2gR8*Nf zrn*$AVwAIGVk*;;CSHx>s~wP;dJy#ixlm=k=?#|>x$ysIRSxWg`dYr6&UZ3uTE+>7uK!XpTt{}Vp`4EUcAUhwH&2FE*Ztmj5ic8hr) zG&Td(!#kXi`QPcTV~o~aOFK)kDsvxQPnYYBG%b|rW>EW3W+vn)%(D^Cr7y2_@iQSf zRNR1$z%eY}4DcxIywYRn?&CdNUV(UkPd^xZxGRrx<1vWGBj7)!DBmRH+ZXa8Gsn93Hh@nW+hG6 z%9M^q@~&HmaX@s(~&-L>F1BG`0hCTOfg`K2HqGhHTTZK`O> zl&KAi!2D`O{dsbs%8a4QXZ@KQ|D~@PAyY2tsiGVRGl*XHYUNzW6?;)d{5%Mh$90r3 z^6o;{j!H$9Y0p%@Q{LSuXUN1S@U;BWin_rYTsDrZz1X3D|Z0OjZXY}gFG4FL~!U^mPY9}FVh2pW3} zZg?#RG8=j!V>I-9#AZb=ny4}lfyP$Kbu#6~Gp`-9x#(OiX23)3i<|{xb<46U(R%L60kF zP}|M_>WO_2+!#Is|1Uypw$eRL|4$&}Un!C9rRfrx{sNg5`y*pi>>1j($(1VeGF|)2 z^?AzA%fwXXIhs1l^e$wk=08w1%jH6qd4MiKx%`9jT{3+{db=ol%lwvJ?`U6fOj~r> zBkD5#rwi8X0Au96kFJxIiYhaaskmFjew*?+GBK4oize;~@#O%>O#MIV2g-#i(~mCP zU*RJHDAS&mo-0?XOk2ACPOcYIPM3+POjDX_WV#A6kD)5W_Q3hD2kvUZw$F_} zMT`v<)BOuH#&a}Y{iFQ8OtVSf5oK?gx9HVgUT;Bm?JRlQOnI$y6BGU_ynR*TNbLB#n`88dZ%Vjg=t7UqH^a@ed#9U6VS@Pol z`sK-QKjVJ*0We~FZ=xJd1K?xaxIf}SE~kDdxJ_qH291?Lhu`%fz3C$pvo<|xYAut~ z&er)L^5S1e z%@Lb-kEa(^W+!Ou7G=mtc_E5b8%HyEB z2k`^)Wqr&N`W`Fa-jG?T62{23nD!gwN|m{mu3u|KIG*w^WnwBbm8N%P8Vs4KPo#dF zT&OZ<(}n9T93S-pf61p~1DymE}Qxz%I<&?iGX9i4Vz6Oo8l<5Y@OnoKwd*niud7mx^ zbZp*C`7N1l0kzZdQOHlitN{M3D?jhXFCwqC(3Ypau?oQlvN`sr>w!;Pt%llplM16pT$^ z^THU&;}I@I!0lfWHqrF0CQw_*{PFcMjB!a3LToQ7 zZiCZZ2rt2p;a>2E5Uj7c4>V?v(=6t>P$p()Zl!6lvd?F>s9Y}f*UE(|Q$v?4<B3a@SQtXNy-ZAHTGO;vgEtZ~QxB&;Bp0eo6S~|bmoq7U zRmSR!CjCtG98lZOe}#M=JQ@B5{&$3r5MrFIc(nqKtmj3HQPKqF@e1r#Wj4{ZM6Q!* zS}PM%nP+Iqlxdoqx{CUT8mi6+hsTns~Y9|b%J%8ZuKB_waEOcQ!1$a@83dsMz(il^={F#Hqz69l}MB|B%{ zlaL>P%?r;$ejedPSO1C|zvjkoA&xCU0<18|g!T9{3#Y$Tne}wJN-i(a^t4P{NS_d8 zFPoM0I#XW%gY2FR{szjf{wrhTy`8SVRw}B@ET+m;sy8WLArn)X%V|oK>3zsd{WkT# zkPB62EM3?mq1=B`9x1w?beQO8p!U3QEaU=&5`??maJ-NA29GTS;H&8!;D)_UE5`ls zrYH03C{t6YY<~akj(5kP`_7FMz$vG?@iB;Fg8rb5Y`SOglDOZ@?4 zg$DtoAA`nHSR7Sm#VsxqUm<)S~y);BfLg9OE_CNM>tQoK)6u2 zNVr6}RJcsILim_)mGEidbHa7P4Z=;rEy8WW9l|$-yM*rvKM?K_?h_smelGk<_>FL~ z?SJt@!r*Nj1v@K}#G47@@~jr7OOq+gv0O(@rm(#i8jBQRqBIs$#Ai06Pc!iW8dHnu(%g|kYo>UP(DL@;dBS{QS7DK`yAQ2rxirRy zeZ?&f5Few`2Z^5|94;IwtQ3wDo-e#mI9V7MRtu*KYlPPbX9;Hu=LqKs7YGNb+=b$c zgiC}=h0BC1g^vsUIj@#xjc~2dmSz3@Ry!8!<+D+^S2N*5;bv*J3bzYi7w#0kBit?g zP`FpPU-+r;OX1f-dyE_ux1}`s9mg?Im?CT@Oc!PfbA;`MdBS{QRM=fuF6=3^yNe2O zTc7^od75bh#r-%~8jC~4Z4F0=j}lh;aICn+@!}JNlY~=*Q-#xnHA0)St<_9vZV=w& z<8#I53vU(9 zuv}>ScB}Yy;p@Vk!gqwbg&zv{3ik^?6@DrFT6jg*%1s2zLwj z2=@y=6@DrFT6oaMo7};187fVsFj1Ph;j;uMpb3-wg3t!r8((!kwzgJn`Fwi+s35e5r7maE0(O;VR+N!smqRgd2pLgj+L6Mi7vBituEAhacZF8;Ofps>lE8a3ev^?!3%d%7 zgx!VZ!k$7rQp9*!jkWfd#^ONn!NQ@!5yDZzF~V`e3Bt+3xQ|zhPZ!n*uMy4?&KAxQ z&hy~{@r6FLnnltq5k4sFuRgK$w{5YlSRtz|%eLh)X;ul>2(4zV_ge;S%9e;WFV0 z;bTIZ!z%HoeHxp?b3V;F@eRUFLVJ$BQ)|=~X|@S>2(AB{;=6?J2|sA0*`R&G9_jZ9 zZJ!(v|6KT$@EhSFVQ>*gJVn?-m?5+|WQ*JSw-vYb%oEQSb`=)+thU7N(v%B(3M+*D zg#(3yg+qlSgrkI&!g0b0!b!roaGJ12I8%6o@FwA0;e6rk!aIeFh4%>`6fPI86s{7k z5v~=k7j6`87H$>p5bhMdC;U*jSGZsJsqjnT*TRFsCU##p zcza=8FKe!lQR;bdW4SS_3` ztP$F@*ND#&&K5S)e%s#XnIp|S;R4}8;UZz8(6+R3tCz@X+ht2!D$O#hS1+v)e@tli zrK`lB7TOihzxvrcpOe+Df$PNWwafUB$ZzZK`td zoG;h*8p43dah^3n%z+lDNew;!}NSHPfWILO4Tc zM}MaHeJauN8>D$q8q05zX0C9#^p@MBX1?^d3-1&z5k4qfE?g;mT)0}eM!438_735C zX*LS&?6TK8c8+b9eyec1@N1nn2M-p`z?ai1d1RN*wC z-OpIf71GQQ&JtR^E&V2G>=TW7;tPZeeVDFN7D=;2xKy}YxKg-ExW=bnD{gVU_(tJo z;Wpvx!kxl*gu8_w3ik^43qKcrCHzL1qh38E9$cceMVRKp7UG#lz#Qq@3-g3_A8TjY z-bCivMS6=-@$SMNLVQ&jJ{GN}zcdyHi4PTy5T513G2-Ke6NHn5Q-o86(|npM#AgU+ z3U3hJB%CW;AoN@P`CF^?TqsYAi^cB~E)%X0TK(hVtA%TX>x3JGc1-Q~ZjxrJaJ$g< z@ay6`h3^RMsO5>a*+!iO2+*}}HMurOa}J-dn*3Cn~%gcZX6!a>4Qgd>Ebgq6Z^ z!t;fbgmGcDaJtYQ9m_TU?TFYOwpb&dnZnsZTU%RCTW5d$=g4QCaDnhnpQ@BgGTlk@HuW-NcQ{h*_gTf~FaTX;CQ-m#qnZmZhurOa3 z6?PMr`LKt$5%v}OpIi)(W{~g{;c%gSqA^nZEa4cTea10P{GiUZ-L;mUFU^I*DZ*;u zbYYF~8sRMAY+-lZzqLf=S?-G${o>?vL$>@UQt&X`f3YSad4KQmDJ!NTFf zQNl{$Sm9u;663`u2qy{c9lR;x_U^<~ADg&xz@+0$=3Dw z?b6&STr6BFTqay0d`!4X__XjjVPmV+SgZA4=kwnnzDc-6Xsz4CcL;4w8hgGetHoX7 z?+HH;?h&SF&RcHL=D$zY1Hvzb-v|#0gG)JfNy28rMe3Oh@oZsxVVhG2trV)57P3>x3JG zHti)GC?dRfO3+0|w z_@HpPaHa5Zp}kgJExty$R`{jX=dP;HdTBNaHw(84w+mkv?i9Ww+%5c2xL3Ge_^I$q z;n%|3HSPz+?LF!y4|1gJRlLPSX;OsEgwu65)nd9dnZmY0`)nmoJYU#VSS0K&v`<&< z9W8s6YR_nP_Lj@1r?5iUUpUZ*gT;pmNBD4*c%^WxaJ+DWaFTF}(3YN~b=bCLs`S%@ zwpLe&&k)WO-XNSKoF^RBkv+CRe4%iW@IK)(AKEsqkmfPrYT+8;0L`v-;v0m1zDb%b zLOV3Cn~%ghtp`I6yc^c#6=bvYO%2j1-6f!db%E!a2fuLc7CUAihwzNVr6}RJcsILim_)m2i!4 zT_fBe%_iX%AGXyjvPbbY>0kGu-?~%!cZAm8zNuo5`aB)K)_=Er?7Mj%itiOJ(H^P2 z&bfQF;_a9IQ{k7wZ-h;jac0_8E>S#RE3m~BY4UWw_TLq3CjFgSMSBX`>@OTB94xf&cG~A4C@xlqh zNx~_@slsW(D}*zIGle$@ZxYTG&KE8eE*9P=d{Aib`43cYESF}b4<8p_EnFj9D;%mi zKd#;2dTHipo@^Ai@2qYX-zwZLd|kLpXxr;=`)=uNTRs$Dqf#ulE%Mja=3l1kHG3y; zuTt$7TK=g|W3Qo#v<7}D{ntJ`DBk2@&Z|UWim;h5Lzp9MFU%9BC{<9q2%BfV^j(ET z!tO%54%?@A_N^GZCfh4Adu8EoZ!?XEJ(HFz2P5n+93-^IsePu?UH(I*A0ZqitQ3wF zju%c4KCZsaSE@SxM&gU~*~ze#+a(ALx5=dpKh zZkK+M(Ds0B#eLE&6WUhW9JhSB%CXpFU-_xf4lgdKK)|xrNU*x6+-*Yz+>X8 zh0h7s3pWy-nn+S0Az;6fBozzfPX=>=|9 z{H&@kQHT5Uv#YxOo^k7{X^L~IRw!;$^`YXnRozy=el1&C(94P7*P^LTFft=C5Gv^4 z)WoRn=mckoK+)4vh(OWHQ;0xeJcS4py*-6UXD65yxt7_Z_8BF?z*NNS^C0?gGV0>? zVf+gC6gCSw@vA}N6GBMg#D7I)b5DtXARLM|^`uFV5(*>e?JTIK!ZQ>s!6CwP^}ia!WBEvc|o66#RaJSpq0%V~^X$Hs)> zIZZUDgMlc@=*Ti6XCOf#=A)ApKNB>ZR~8I+C{R_MmVr3_@1LeCMux`%+NVD!+_$8U z6K-45&IzZLq&e-1F9Ru_9G&chTNPgbOYykqI44|C($opJFCGb2JS;lQ37g_UNLzeD z^aLk-T1k5+d?G#i6?X?KE{qmB;ggH=VJgmz<~rd^Xgs&L6}2FQGC1; zK7(aXv}I4WzxU#g{93qyoWTiS!?LdhwPj;!Z1Sdt2ox`Q3K1wadkPUKUiK6sP;BuO zB2c{IDMU~l=R`hYtwHeyq#bj;ze*ss6G|ercUH{$RNL{ zS?5;Yh3){Yz68*$dLUdf5`xv+AY~-RrsIdF=}Ga$l#X*>GwgmGy%(XehmMS4? z_DAFwxeJh=5h|SK<;Cfbq`!o|@MO2ztSuGs>GX!cS)n>psG`7%Q@ET0Yo8ISEizi> zdKDEUyX9(ejkfg~*s`{NY7?a=woHnbqj!7Ne0S&&TF*gEO)f-7Xi%NVEhxp#hkj1v zw-Aa7H6JoCA!yTt$Vf|1O;2;@MCe7?JcB zBYp)e`8`M?oiYKXjH?E%(#~!Eo>R$!J48d$^Bus5{rt z6WlUTHC0=mg-Uak{vkzc=6!g>9tY>iobaZ5h!+f3K1yYq~c|4 za!G=Pt(?e9$gC*rR2^i_o0+py^A?PSX--wzBhYPiOMBbPO9Xk*tKeDWMG`D*XLB!V z>qK5*o*Dl1POI8{-tqDg(H!J==J?lOwpQh!d~XeS9(js8krzMeemGi_!nbd z&4@s;-&2S{@rkDpf#QIt5P{;~o z#(!W;hgGiP6vlTs;r^wGPWbHZZJh9UvMakEl_>whk`6|QLrO!=vqWlm;6D4bfB<8@x- zuc%j=gKL%udog;96M3Un!|vq;9M=$hVA$?gYd9$J3o%kbUEmhmOW#~ahEV(=SR(&G z${aN6zhUYD};wd{hA9mgio`8U2BDQ0|#teu)YEP#uOQ$t03lqieMirPhTiV@-HLrrKCkC&cW{aB#m{oNGFQu9BkJU*Ag6}H<4TSX zh5MAW4264}t;h*N@z7W<{6gVTl>>uN;oBez^JE@ZTor2~^JOJ1ur)4@hr*W?w~6hS zb$W4WD123M5&j7#4Vohf(`I^!esTI@x7v_6{01N3Moj~KV>IAJos z*l)fs@8}dK%Vu0RL3Hv+i&psNOcJi5&P0YyljEl%3SV5-HaV`-Qifwmt0Dp`klZ!?c3)hngJjN#05_g5{^X`OYw{ULHn4P};fz=7#jkTWRUIX(@OwKI;i zf5D?5v^^~;oLhcuQaHt4lcuA^3=uabhevVKXkJpdb8%u)xOZ7LHW}(}O-e6I%+eYz zn2>*gtUE^sIgyV@oCqt!DoU0NmFL)x|qV`6*3=IsP3 zk$3&R$2#fueXy>#BOjo$g$3BI*)HS?lH`@bA@YRUVr+$Ujm+!qei-A3+VB=~!X*wn zIV~x(4EIR9p{`q&P)QAR()OmdxyiPyWR7~WH|iOvI|C0WkHe$5dGwm(aJS-)$v9%m zqt!URctAz=un7~KaGu%_yB4YHnQ%7fDpT~LdiqjGTBvz{DLejmWK%n_eT$&4vkQ{d zUqvbIuyB$whvdRwax^jb;353qDLbJf?2VAwk88wwYq%|D1`iVdV%$piT+c(z?U=C> zdAy{0ofz$-W219%5~h4{MzoC+d6ms>iJ8ffLrvP-Ha4>zTRU#7Na0Gy`rF>`h-Us9 zYI`1Z0@IID?x_0Z;_y+q9kAte%MGWB)hofRLt!xKFx}F+_;>Z3J7P6db-3plb(Ffq zRF~dmn90p-nOU|$M=h>R@hY@e(++vF3?6q!>gQ6o4D|dlwnMXzntR*gHBRIc+nLN8 zS3>^0qj|{hh#7dpyvrNrx{5L{+>;G-)v@I{;+~*;P*w5AA90?1xoX-HytTtE&rZeA z_WZP_$>F?WK)2$y$+!>MG>Ti0QQNwHxJhZ*@lFRzijwTAfWPi!b@)Z- zi1qQGdc1|_d^F7CJoPk>o|A-*Oh@gDv!bVY%T5&cUfoq@WW6KasbSw~b#V{-!>=t) zDhpsu5T7P|wx~GIA zoc6<+<|-VeA)V6~piWV@PMopa8a1v{e$!?ttW^qXl@}f8gpbx}n2%C9caIrGXJ`64 zyHQ=;XIr>f{Gok@j_X~V&COT$=t=d*BYMhF>x3s<_8@js^|1pV&1_IdZ$5C(63#Xk zs~7D#`*PH?Zr$;A$6>n*vDxAVzumUiEr4EUn2a7ryGtU*PYr@+$+F(>x`C-28)ib6t**g=lcfd(VxHWT#LHbKZRYvb*BT@of2F# z`qrKEymcpfxnEtk=#2HNfBK@6QoE|V3r)SDZ(|Pr;N^vF!?FKD?f7`-{-54&-c={} zavrx=ojurZIJ5LAEAsaPHjDOhJz6`S{?#-Zc9&ZC**O)(E}gTqb~b3nw>5n*_{7p%;FpC>QR3W+PEItVAigw zsEOT3HdrFC)*iMdSg360S^q{gvh|q%L;IsC`y-oEyCB-PK^0CsLKTj@Jk_gNy*Zj~ zrfRVM;-22R@${DK?`m()Q@5bl+}!=D6LW8Qm|N9oOtNeD zNUiK<_lR5Vj^$lz@A5o?JQ;Yrd7Q`FvZQdw;^U&FN#QQVMLhB_tiA0WI&V4SBhDyZ zYOq^xTm`$kXgoym-Oy;bn|Ak-+ZxrsQ*HhId%W*!i+`_&hob=oKCksS+maFO%@$-O z;r)xYoSnH*oQyiDmeH8kfM~H3KGy1vbt3=7Y0ztsT`n3n#2uE7rYE}3CUD!fwo%)D z-q@Us{2Gl-A2zB>u~x;pv1t!ij!PCo6svIU*tkvm5u;@1*+6vHLR)Z-kW`=b*y-FRQIU$hc~RgR^kOK~R-ThHjpwNtMQ2^k6zlEUW|7xVp{ zd^_EeW_*lQ9Ssb3mV&Id`QFsDCieu;a74K{@O*X;ajAhzV7bqTMUZOaE6QBn4IGi;lLC{ z&*hk4bli2|L|7T{FFiCEeQ~4Py%884QrG_PZ_5ul&N`bM9%p*w@;x2HF?z6K{_917wfK~N!xLifVrH~@DyJ zj?0O%PVPCdUcTO4@~oyY9$YD*?{!-Tx1--tPy2Cq)a%-0vrX~tsN1{lybYg`kb>1R zIVJKwghISzl#$4d6L0Isd6PXO(Y7r;!MkD4DV?5ZrIfJwt_f~4%YCAzE{_48_UsYJ z&6+)KlMDT~=5_o%jP@2axNd87N2}3*c&8;kx%D^)qA=6IJRQRC!_C|MB)4FQgYt5l3wf>sXsK&ZE(x)uLJ`Ku_uVKG<3zN;) zmhJ9Ld5G(} z)MilnS1aTzyJjhPEX8M+_M(kXXwX)BZ16T}ei}M2$EIksNsPYi-AJ?!*^!UYGOeY- zz$zSv-B9)fDy9dxKFI^dGj|&z5V~)r!v|Ueiop9-4+TdT_qrXZHk14CJS4v%VD~?*-29I~D z2GmtM*{$3~^%ssq^*=Sz3@<#h=JTFMivQMxZ--OfEQ6DUa zxRqUG&wFKuONkd`eSOhra@q4-FmQ9Ddeq*&cKglFx}#JC*9axHA}4qish6~VO}wi( z>vF_;)jjL;u6@z3?n$Ly?uV%ur))RX2;F}8EkSe{+Rbs`JO1_8mml1I7UMR&=qI)D zw~fmF!EMYd4kzJ48Bdk_lyy5ouXnH41zx{L=hv_6VMc)c!sj&g`{f7M&7Gm`dHrsO z!45*zNWP3Tk@vH3JJ7vHS#K=s*UaaCgi*vK=ANYPISp4qK4a`sJ6H4qNOpV!3~o{G zdb|%B9F%41B%MOs=ktkZIYW*clVh`1*2*p#wYN94g1YAtC$I`$_4~_ruZC}&xOIrA z+{Tl(S$W5#!U46Hj}Kx`#?T+xdOX^fd&YY>aoD+J5+ZQ^%R++WLN9u6C_-0$-zwKWB{Hmajyi z47`-~INSX&N4B}wR(CY*^5x$@Yh%%_?{rqZYE13Z75vEJcz56%wui4cMsZtZlHb`J z!I|$qau?axH;cS;7%I%UvgK#?ga6XiyPq%?d3v0kkr6$Um#(xCGZ{no17pvHG`e#hNL$9u7b@SIuj>1NB_2-^%{B7~(=fFmDwGZ3Unr+G8;#9lS_(ApO3FnCQ|9@`{ z>21dXYsk@i|Nm=i$WdGKe`gKR} zKLK!RsB4P*Eixt}M_bKMX1}v|8gO^3S<_Nr1U+!{pBlxdzxVh z_~(MW7o>+msiA>ogv^aLet^ls0u=~D5Y9rl0AVV^)d+JC?m&1D;R%Fw2(KXQMED5da|He( zt{Flbgf0ljA>cQ@fnf+^5H3QPhHxFiJcPRumLse}Sc|X;VLQSugbxu8AbgDw3?g5I zY=k_7C_=0=06)F@0^>0v*1-y2N=UcDe>vmU64+x9 z5+$$;A%rBbPaz~pU?)RJmcU+zkRpM@03lTZ#|1)~1P&C0rV==E5SmHgP(o-ffny7y zg#->ZgkvOd^dY26;B&TAwnTK1FWl9HCTbzB(SL1IIu#oQD8-4 zr+^iU^#|)F)&mURfk1vmVBN(!ft8BofR%~006R`BG1zKERzdKzo=<*r=uo!q)jEM+ zqGoozJ_9#D_#1uvzHTgjhss-?_;rB)xiKFNF?4fda$Yy!QBlX@PEkC$>r&jV{&QnY zI8Hi+Xzj0V^dp_pySzH^GMjY>rbb7g&|CF=?eTnBBLZJa3AJDca)QmI65_$5Ne(f>A|9$<_Y@ASyHI1 zWzb1Tj8BEuQx+s8^x==ZVMt1-lqoipa#B9Nsi3;zJ+02=g|%l} z;8uKg>;{Qlid*yTt}%SOYa-tLNmdPFpTp=RH%}-|s_KT1sYDa2rt`iOf3Y5Wv(Cnk zZNfII*2X#MRL!rIS4du5D=(6~tX7@_8E^Raou&Ai(&XgadqGQonVfqFarg4%$f+o^ zun0fG3U%w0986M6BSWcdRV!k3N^Qn(OGI;$n?*C-OcKCT+!jUgSbaFWsvbw#*>kh? zfsmBnyn*=s$Z0UBZAqcNkMIQ~cOdLDki@`cs0#m_dcR5LuM(Tp{vtRbt2C4lyoFy% zG1qxN8cxhAO-_U|p|X2g)s$Lw^8^e-IYAwa{}p8>~Fp^P&Xd4{QI7MNlCE3hHKb0X^B?@y_TTc(-N%yr}R84ag?67{r(I5 zFyHn&>vz`S>&I3Gzh|7)WVf*ibc$Dd`jc57S#=5t8y268juYq`+ z3o>p`buLbi;>GzcTorrU_vpAvHeMkgn=KO_o#m+pL46H@IWp4X? z-&v^F+8^Kd`hk2Z_EBjGO{3=olkHcXI+yi};zb0!bdc1oMab3K*G%?e?b7cwxs}21 zJ#lper;c7qQ2%NkZU)!}jM-A6E=1 zvp?*R+I~MN&~kL$c=kAK`QCVXLwUq3-8s@KkR7#ozG1&Jz|9XHf4W});rBr1hCB(s zK+g>v69`nFjy|4YlJUFXs=8ElgO9He$cTP&^coYY8o-yiE=Bv^#fv!+oN3?Y`M|ad zw+2%9Gy6c`bbMkBxuVc5+&tx?m@D~lg9;YKj~j@5!oe!yrVHVu|G=?_2xyM@+vP_4WBVUi$Vc>*?{! z`^a$SoL1EzmTK(Pu{~6y-LFenA*fv|enxp3oC`j(iCSY*xwv5}`_U0MRRXqzk)B9` zACW5MyFWCg`;8JW-4Oh)_YCHvJ?kh|qED?Vawg@!1kpVQ=Ad~?I6>5H@*cr-kzvGO zc#gHrt)CHAFG)CXuTnDoi)n}@l!v|13NwNxk4UXNmcy!rMSB5j+AzuX#!UDfE?6U z{UVoQURsl#NKW<)rnP&xU|^grJ`jwIL_>adkw+|zZN1nl>wDUYuTlP>wq~g%wnwV^ zAEwFLJK66Ss*fAD@n;lO+f@9PEFo~Z*S7i-!4BR}DFrhsJ`$^@+Ta9mi$#Bjolifb z6ip4cpML20bpF0cSZ`pCG8eype11w%wFBcVfgGRO{`>jklbF@LdF?74>CfZeK6jY> ze|n7Ub#GR8JP6>)G#HM!M^%<3`$k@UJiW!yba%{tm5`9BiU)WP*gqY()CzXu+dwRs9sc z516_s?6)YbZ~c#*`f|q|7hk^oM(Qb;%g5n*jz#3uUI+yBk;_zFs;4FC?qX91pUBiF zP<>y^OwwyE&HNvhOeqL7X@?^NU!qJcwAUI=ATv)g-%_9@19!Gggd*`v?UEqQD2*1~3LxP~3Xr zH?o6z#K|)7r7hkK9Bs4dZl77Sc7mbNS_KjseB{e|m%hix4Z3$3!kWN*P(8l?joS0S8BA76w>I(crmdNcG(?WdfEZ2RYtoPg8JC{Q$M~8=%bih^D5LMB> zJ?h?bMHk@COKJhE2}4rRxHD{}{P|=feYdQHAvV8mO_>pv{Zw?vOO8qkpHP}tTR7fi z`bn7;zf@a9GcVh|7x1aHt)lId#ps)IcV5+>j=rfIxfT6kzqQ&F2R|k4HNwNH@q__i z4DOYM#{v2_UVc_McX9l7Xw#Bf;yb-?#YcHt29qPd1Ii2qqrX#rwPPdS>yvmT+UI?{ z`E0iTN?bG@=G)DQfkYe!$MfD$WGTAH{R;9jP<;jY|KaXU;N&W*{qdW7yYKCFCY_#i z&rFsc5++=FnPg@NOfry#Ef85G2ACm0LRb@)i`@xGh8cs1$Zh~ZS)$;Apn`yafFgpR zvWXyzsN;f)qUdws`TRYNzwh_d-Fl`cEXw=;-oHPezPIYscIworQ>Us<)lEc1HA&)< z?^G@wix2Yn4{2+~aVc-ac^DBF(9|mv89E+dypF>Q(Og%&J7XZO0>=lP^+*8UvCP7S zW}Lt#p7p%5sZvD^!x zqxk_69@Re*=`zub+4F^6yv(NQxFy@Z1^E_Q#$xLB^K5M4&LF#sOg3KH4Vdvnl8ffp z=4^xnqVt~Z+`Ml#x)=Id6z|^)eLd?K+zZXHH@+8|u{^=^X6}VP0R8E1{1a#|{D!#qSM+jh&#L**y$~`CE&v0 zHFO)p$0&qz_T5N>TZiiv6nEnktAN2a?F1XAa*xYQ(5a8IY3Q(o7D<#Wb7+tb49BLk z6vZ07uX*Rq)+6o$iAz)jsYJB47a}DsL(&g3tz`}$ftO(oGfRDlb#T_AHj(_mTpXaH zzr{Hg08@Ez>XCI_>Bq*1ay)|}EZ82GqD>e2<>Ig#8|HXlH&o*~)^i_B+6PX*_b8d#TI_X za)BAEoX%JZq0Vfq{3`(Z(Bor*%rH}CR0cyV8g9P2_d=8qSkQv?`w$x`$ZT?bMx}HH z)MpgQ*OFFGS_|I;VPOujDH7(wg_Imh;$ckk+i`KT66DkspGM{SDaWxk@DvPK@uvCtfXDON`Eg@07yR9i=4YAn{QIK@W z^0Ptnf`I1Y6HzM&Ib4&A+_BC}bBD-a)cz`Pzzo^Q(XV`mxt-J)UJI1;$S?<6Zx;aG zQwWU?pURgpd@=(!>9rHd<);&tud(wEzn5;g*SL7OKEx1Xh)HpQEu!i}3|A26ej)+N zajqRff7l%~2cglOBvOQ$0uk-ZMyK||!>=LOG`EUkd|CC|&SA9>d;!=5W=LfIA zeWSb2PniX~s}-)U>7@>{u&N8UZ;iiNXr4KqGxQhzV= z8L%u>mp9{14)^kA?BF~Cq;Y5S-IeDU|HzPJlgC2J-!Q{h3)3rF@QeR9klWi|>W$sv!+ zqE(tWaeoTc;>6N^jE=gX?|MOx(?NPv*;Aw*r8SY|NgT+|#tMleB)@rs11VKIqC8o_ z+=3T$zZh9=bpc6hux%df!^AEO)sdN0``j#(G)a=K-cX}Q%=VtE&2}({cd_`s{>9=a zG`d(E_z_Q79|{i{_y)!mh5ftYe61t>SRg&`RT3`o zwk*FSRLbX=ax&sbK0+QM)fAbVG)!#fCtym?_VII`gAvHZOtt-T;I@c*6v+EcW7+4~C4)Dc^&E&&9M($8r7z&bPEr(R_JyJnFJ|Vj5W~&_`Mdt)SaKWSi(#3Z|rU=NPdo3X6LSVql@n zGlY~epOi5nWlTsJvxI!Ychrcs(=Ke06kC0g&pqH~0CC3+dS7p+0q+$u7?s-sZfCLt z8A)|dG*?4R)kbI@1#&aEG=g2`|$V*_4XINHcJ zS471Dz!@Gu8~~i@0mK2o`#gX+U`bH}pq#AkMQoHM#R+axg!H(%F%7=Ppt5E(-@|fz&&dn{HM#e+M3EKWoclHFZ~p?% zsq4Ei_|v7^KgV+rS{%uNEuSG$2RDHU@;KLt8#Yu7R9k}3#c~b?qQo4(xKmi%t||?d zc*1C%Ru|;>cty0wfL90mvy0cOz=QhzUj-`{%bBWlRrG*D8K0}jOXH!-DKu+7nr_4{ zC`qh9U1}F=j{?2mmFZz3xM>HY>+REl=Q`A!dBC>ZS&Hi78vpJLZUZ3^tn~xJMWuvQ zv0QBUO()JHpBY2%-!`h(?sb?&*Sl5g-VwJ7liYO`-WGw9A~mkP7l>_od$m?|i8@PA z7q=QHS9J!DDL{{LrT2Ihl=@-a9`k}ksNH@8bR)h#58DwrU0pg>Wn~N`aB;j4jn1PC z^kj%M)x7wkfv{aA=aE_%3zyfd@9mws9?k2}B26;&utFWxVbuQs|h9V+0)|gicr7P1A#IU+FgadQO{* zZ#+nQ=`MUwky#bJ*5i0`hTE37=t|iU7#eLn!}N7~0=}EVrZGHDS>UE*7j^rnF<^FQ z71)dHoW-u;`9v<_10-%v%6pZ8@A=ukLf)06o9Ap04sx@Tulz7&8@|ycVp*@%036-~ zkY3wB=UEKBkK#J8WYdQjA>!az6y}$VVK`^dof{rubO_9|@rJ-$c84!8SKzCfsCm7t z1aP?mhQuU*<0YinzacKasepAR7V4adG83gKP>9|Km&ysB)f}|}ISY`=FGriE;5(UD zV71u&0G&#RZx<$V7&?RRw57B{Np6vN6XghU{{!U+x&AHX>;<|lr9QnLtOP9!^2aA& zvXp^NKmw+)2T67tNB|)8`xWRnDNH}C9wH$yP0GK<%5M zOT7}1SIO~m+7fjxkkJsztOJEJ-$l&Ip~{&hQ{_@8n%y{y?q{iIjjyJtEMv*#2sz!P zgEG8hO=}EIV|k_4fJnq5rg%hoEX)k zA-wC2oFdDaX{;wxM`c!}!&NLSDwFLMMcqo619Lm;LcPj)T8^c%Xme|0s@izV%<=9| z>zN4VbJ>Vg2g9n6!-YwCx%F;dnMl0*r>^XFTj-^54;j}p=H^sxDnKDGBiz0!S@l?o zebI)Mj(RXC!nvJM#+Q~jG*sqe_jk4$NAOWq)V|^hb$p_fwBQgWlUh}hkhtf&!Jx%V z@cq2nFyakwh6g?U9KQV7MPSl_R4rg^&ILZqWSk3#L%#5M6LA&eXMKnn8O{juEKU&i z{_TWqW*El44 z#7p7n?o1Kr?vmcq-BpmMyHCT}OUMLmZ;=bFNQTqAObj_bhrXO5^w4>zW@WN6CA#DZ z7@!Xmq7Qul&xH@M4+zd1VVA9AC4L$>m=SWaw}r!lCC;i>1T`kY-Z%V9|%Z# zq&OETDvw~e)3@bd2jQy=j2KlL5oWG?UN}d{X!{H$bQ#MWROsnLECT&eUfy_lr?&V{ zYP{s0K-9)p4-)oHKmg|#Esc9W`-JG-jsTzDE@S70&qu!47LXc5Rbj^1`X^EUNmBom zj`8+Q)_+n^e+>7b`UfqDy}W5q8^&gccI;*?# z7WxqTc4ZQ#u_Quelb%x?C*`;dky9iIc;T(kVl#?Yyf7gx@~QzsBvHJc>wb4*+89Eb z(vHoO>bSchZ9J}4mB30mI%^L};&yyBfl#_vKtFVHVWcu+Lin<`hJ^1^Mj4lvQ>fun zSc)zm1fRp~QzT}K>ahMqfN~2$QY0wl*ab|OtWLYr*Ws}SunUUNhb~f4hc4tB1rr)t z>3Cj2$illbzAh0t9c2P|nO*_y^MKK?fy8$q@DfmILF0#;Ir4vByc(VlOQsX4r48HKKJ+%o`;K^naUI)VGOQI8Y} zt|#q)E~5+(g*bE?Z~{A^L;UL+pvRcnRp?u|07mRM4g*3p81E*$lc&R+`V3tGe9Kcy z&Fbjr7TUxV5?v9T9DPk(=)#OrIoOH~cBXUPOQ6^j5T7=8rUAknifqe0x&bSji{OmG zY+1rfoqlKw)-lqQd(&`8l}mL@AF~$Acc+{b#m1svfJ(R`#1wDq5irNoGtr!VF|urm z=2kXEaw{V#)43SUkTpwZ!JO|BIxQI0@gOV|Mv1u`Hg<#31Dm2vQSl9|%vdQe9Iz~` z>#&`ji52#^t|54r#^7DAqf|q|m!jZ>Ly)P^PR(sO7{$2SX$XxvEZ`YfsfsE#MNvzs zjse-N^oQ?i7Ys~l0s*vzE^&1GLR6=CkUm|hRab&wu1N`GgrQNJ=Py#&9k*w6{0hzK?=OANnY=UvLYYnADz(?NxMKqK~yIzDjwsV>1F*m$}Bk8X!Q?fp}F)`p~s_ z=elPp$F#Y)$6Z=L`DqO?%ovt=9WwZs%78B;vP;^)B!BXxWt|Cpl>3AHGIuB9kYXyP zjcc0{!{W~k6Hl}_lPa22X1GQ2PGS~muL2)nmnc6>)DV~D!pD?GWbaI9?dTX(39?4| z`cX(_G^V9)J{uX}ANE{FA{q!i5rT>@q65QZkETduWm7b|(!g;fC>TwVrl@^1nefHNXa`#6?#5LCGD zK{`g{sbGqKsGISpcW4n!Q=gZ=o&|~+=3@Cjd?CssDAT^|iBx2H0`kV@yP2ftG=pSSH?NPJ!Xq6y3QDk|x70n@a;88OX+9C_Io5t+Ax% zQ<<3LR9dUU>`xHQ#GQ{I(Lnn^USy||I+w1?n1flAz#0VQs6bc{T5gGkvxOx>iJ|cv z)l>*eD5@|Nj+d{EE!Z9G)&y&1kzcMr!`*?bfO9!gssfxV=u{F6#JLfnLM?G%hIBFs z`XC-Ot>ZAs_E`{aky9A>pL)CcdJ@H#zsWYysO==xbwJx>Q2jxnW@@^0ZVWTruj>dcm9djkLB2Z_#9F426WGNO`VacYb$egJ4 zY?EnkAPFIJazDl97sqUflbqBj;F!;la_nE?0LPq(c+R6LvTzJ~?fdB67Uq#=5V;-y z((J;1wND|qwuy0Se+rzjm=6^$p}zfQcw~qfNn4u!xn^(-@rpX%#?$2(v)qQ-3OwMN z#}K}yp#?>s6KQPo>(oW2QTI#+7eDrDWHNymkSi}8DnMCT!}`aQ$;FX z&MD^kMAK;2n{kK_&dHO!aUth?5dJralvk1Pb#KYIxGgHnNyLwJ;QP{bQPd$Csso{h zR|_?nhB*`wQ*$Ti&hpcTNVSSF75ANs6ZebtOe#u$VF>!m*?i+h0AOk-z%($k2o)qm zF9u`Ya=li8#2CH>i9)*lw^7==(XWh%>esn+AE$4zW%hFz&e$uNAhyiuMq;s%W{>V| z^Lw;}J3R>HEvBWah=mD*-=p$#x)49ty+HXC^TeH90ECEVff8XLiS^dNhY5{%Se92j z%cN2pGxy#fqCGBqhS;3dC@Z3sHi!r`g`X@ShmNIM|yz?%j~O zPz+fbrLUwi6F12ov z(Gwe4w*ofI2i&*O%?I3HqMMImqP;l9Xd7U^GPDyxPyRSk2h&lUK#|)6G4%+hqjk3j z2Gh|ds$Ib?I!)-@=-Jl+;klEm`(yA|fy$i)7QaD_C!j-UU{4*ZB&qifQEs zlf2uQxwOKLQMrgbA!>avX6%X+YOOuD2IG2E+YeP2z7mbxz8>V9pc^(t8V}Ci&}?r- z+TsyoYN+Z{Jgq}RW5_Vl`SiVUj2Xkwhc~k=iVvuH=|nS8J<`5v_zpzGaDFG_wxO9}smTC}}@(JHo&}$8J&F zuKdyVV>6Mq)$ME7)PoDnt6SG*%<0G0!_C6t)myMQ&4$7>S+x%Kw5^OKZInSzVDt4f zD{+`u0e)iR#p1in@bGotK6-seqOY{#ge_J{aHjRW(CF<}(8GBr#b4A2v(q zv1P&nFe}U{N7jo%O6aYUYCHYqCN#_2?Ju7r3v>PYV`!rHaJ)=lrj~+61l5RvWHZ%d zt5uU>C?#4cG3yrkTWpTN8*4w-avQ^K)ZUg*s5Hu!6{VQK3VW!Oc)Jba!a;QV3n<_8 z_5X2l;$NxvEv)w$ZoA^e#&F4x7b{#`TUg@CiaUK-LG~+ds@;mz=&@gcZiM zceoGUj-nfnHHP*JwBgF|SVP55p~(eNSxws!pbGw!SACzuLoqTwa@pCN!jcTD)Atd; zh4adD>I;frDI80wx` zQJSWDTBkRLF-W=N?0hT{!%;W7*mnBC9U#ry?FV;~9~QYq;Uz8EUb~xMC=f@WkGymG z!@a6a8^~34Z|0$FQ_58x+ar;ro+|C>ll}W7d)#fTQn8MXBlm%B@%CfUj7 z@53UlOs>(qlmSp%!sGCLZ=Ig9B4<5o-%q+>IbCjz`zk$aarq8cK|7!Rir<@vOmHob z{auyFehTl}6ZBx+<$lKDELt21E;qlUW8Bjyw{ic9Xt*M!ULRMh9I7qYQ~m=|!>#o9 zkdJ}o#+;hpMML#`kyXQbzzcZSo}&l#{Hj+^alEs2`~k{rFphhuzl7jA)V+rMA#pvy zJ6>A0IyQqK__Xel;cpOoNN~P!JccVVx!NeBC#Jo#x;H*y*{Ckyk%)FC&|}{boy42m zmX7rL4(?b{Q>nu06{UUSh1Feo%r#jB`=v&`Y7bZEcn~q_dzC=EUiC>&L`k0-quc(R zv~9fj^oF|a%cLj!X$R_cDRjf|Sj|9;)%GiRZ)eQ>SIYk-%Wu?=S^a>&haaLBD!U8j5b*rwy@5J1jhA;;=5pOk(Jdnf;(Q$4f4X z^jQe^IcN_VGa0$>4+vCMEjNRgJl5)1fn(#GgUe9*Xdj1UFS!~fvlvpD1BO)6qVKba zfp0MPs$mj}QQwu!Iwz6hSa-?9%w5tl^S8X5F!!&fGVhNAP>MIcc5yq_H6?v2^GLg%&hMulmWizUF&7ONIAeSyS$xZ zR2rEOu{eFIDuxE|UI~~cu;^#ld+Zk}N7X`LCbGgsGVdZ;dRr){iWc_i&ev4{i&fwh zA{AGq&Wo$n%eYI6(rSqheNyG%Vd2)Hw4^ROA$z@$C&l9piLI!B-cSkm2BlMtk^les zFZ74MlH)1=A^Wuf@Kad+GmvvN#Y4xtjgYj22o+d3uqi6L)=j#`^Ol;Yjo~fay8;20 zu>6^t%7imCc0zBo`M1~iZ>%r-e~8r@jz7c~XW*4!Fl0S)#_$sW;yX#$Dv`11AIxl< zK1A@0ZIf#BLsmQq?=T;5KSehma6e5qA8>z{Za#{M>F?+~U=omRJWfUA^IB+jt?vQp zYeczns=~R9PEE8S|92@x4Q||H3*R)jH}^*)f+5Pt4=$6M8JI$-oqgrS8SpV6H>ieww1 zb&9Zf=!c*%z)KN~WSTaJzO1M_Q&~5X*?7YQbk<}vWnk5e%`jv4XGq$(WgB3W&a}1U zA^35h05@ae+y&{o9RPR}y~%t+0H0(E;b7!vt|?dak;jo$eAyP^=o};l3&RCNGX>2) zm_KTg@&r1-E9qrioD+-|0a30|vtP_yn~AKE9s&Ss#&ur4m9Krt94VPm3$5O2G;K)* z;xAffVND>}`BAX=Mu59moyB?}%WmsAR&*V~J`>&2x>mW&E$zo*0U;Cyh#O{YX&n=0 zZJF+d#kL?7FqgaspAlm4#3}vxo>C~kab>xw@@}d|X~y9&HjQEi@C2(GxAtBDeu%j% zT@B@^juwBrdQ^lm@Is(K*%xL;w|u-D5ooT*;Qcj-FWg+)U@hp=Hj;Ql_{e8BxY-F!gYV=cQ-SyfncL}AfD>pQ$} zlLX2Q=D|IB#VD-7$6-4Lo{>6gFicw&*58^Uuzmoi6K9}1cQSUx#lt0fY=F*(Z528# zgLB<>5Jck@Ay72lq?TSXmJkQ`Y%u|8)4BvFV$o+w8-E*zU625;SNO}$Xgemti^0-g zxjc>)Zaap)(wTSB>v*ib1+zq6YO8;e?SfMgt&c|*X7;%rL zXu8x_&m^$Yd6Oi8M$3E0a1TddgL4`h`bdsfYHcqCCNn~Naxiyv4Q3Kp&&Wo~u)^|8 zX<$q4+R~_Afa|~z996+7+%*?f!MN;>hJCmd?b+C~b`wgF^#Mz}5-o)9@Zsxi+@zQ+ zn-pTf$2bFtx=sjVHPyzsMK1y6(k#Ey!T_)rcqTQ53sn5Jp66W0k{f)c4t815OSj)M z)hr{_1r-22FfyhGN&tE*`sVaw!#z+1L?`Nj_06dm1E+Dku(`yl}Kyspa1ng_%*Ea_ag==NK!V~j{ zzD7!HvzkA!7JYxkQ0ObwgcyUEw|KU?;@l+9{cHqDH7Kx!hbrdt*Y9Go6UiH zs$o7IK|ZP8E~GmqNcRs)fI_-qx?hWQU>z|9W4daP?h#4X)G!@al3l!;dP_*RAxI~N zK!xT;>AHs8M9sZ65^+wdDpy*i7bZ7MvA>&Qa&N=F?XC^5Czob=^sZ~!5)Q`g{Vcu~ ztmdm3P%3Pb=4PM4;r*Ctw^KZ(Oqs>zMb^3DQM<_J=E|x&XEAOs^X&J{0B=T87tCt)vSx%MjMp=UCn$!~3Zjxq?US0^r z>`L>IghfCfkf5R)SIKz=bp8TqKSxGp1;Bpa-d&*$X<)~-xiRZ~Z6L_oowrRxT3kj@ zNGNKlQAjniqL)hD;0W^`-=PIU)ru#Ng-*3%sYe?qryvltA1^r^w` zv-%LD)n>9a-2fTv7zKb)yoUMUbnOV7USsT416bN14c@tZ@>#&A!F)~1B^p3cu+RoCSxBr2cd~>F{>Mnc|?MQ3^w=v1Y7GV3{{$Wl3Yj8>uul6zK8DJ8*Mw!XOP%yc zs0?EtDrZsrm*78y|K0fa{SFU&LkT52Yf#bZWk96*8Is{b64ai8km@7!cOh8CRQ~nw z7sn<2!I-3f9g|f2jguztt}pd1B%M7b=>qyg2#a4zt*!$%s55qKH(gr`0vydb=NKY5 z7oh$L9Dr#rnob*RIg^&q#XcO2QQ6t5vZl&2)2b48<;hxAVxv5<60RZ67h8*M#r6g* zn^o*1--S37c&r8*O!hsR^O-3=x$n>FkVCpOjg!o~u&C$VN^nz-d^DtK>_< zb#wx|7oKD|ORK2PWzNKvAYOikd{bG{AcP zc&t4-Ox6~{rq+zE6#7G;j7lVSHYAe72uvX-3Y=XnYg1ym^J3if`qVtFXRX(+5wT^;5)-dM9xOYQ5`!Ibaoy-^*Abx^vT3kpOY4wlh?(w@m`utyXzmPfVs zAk*>nAm%|%_0(w85>b2K1{G0lu~17d^Xg%U7Af^m`t`>r)URD#v|itRFIA)o^j$2K zxof0Q(s^&c+^>EmPD~rs^N`N@D4e`e9%>KH{hRi|B*G$`Prr(%stx6r`(N)p%j@nc zDLzDsxcG7?k~&vQ?1+6oR4ZD^{*+S(S_6w?n>*PB0YB;w0g(#k_4eV&1DA9}#G&Ue zxfdMSnVY%Q9z+1jKa}|3GnTX^BO?Xr$3<3|d1=Vwdy}a6HA?>GivJkurEvIpqf92o zAxH>n{LG_Yqi2GM*E8(rr0?H2p_AKRaNI79Rfkn*fB}582I~{iNeFYV)F3kWwBy$8 zWcrD4=~zEaV2wmA_1A8IuXZCI_C_{y$X}zs)ppqIGN&k@{b1q%y?RrElZbMQ+3_G? ztAXq{SmWP=GjN8FI`{*CpD1yUM|xJL?H<26@OAn=y;ekS_Nk2Kdg>ZwZTbR!AABUM3Js(3kMs4}rnK-!42 zGkOW4IE*4VsVEWqy$I$!WHNXbGm5@bJQ<;DC!lWp;mQa^s_zQ8RD$`|)o{X6f|@IY z4OK})>V=Nz;=uXb=_n5?x1fE4GM&$YK&ZtRSqtfwQVYW->n9B7CcNy=;gK{2y%5P& z!KNzMR0Uhk%}gMrgTH^}@wYetc*O&V1At$90C52D8xJ530ABR~;sD^c9zY!Y?D4sv z8)mDNTBs{|2%nbK*15WI`YRsy=rV1ctd0BuS>W0+%oyzpzyZ2_H<~*Y>-g$zpSx-P zA+e4p`#-vV{+w9Hf3L91{SmA(S{@ZNI2Y+6fb|Bp~o-_Ind@~3N0>yL@^ls|v& zw60Yuqy8>{#DFZ;@z(=(d|>|USVz<0yWQM%e5@n!gOl#-{~)qZLH&PZZdXVaeY@$8 z^nX`^PTjNhiLP0(jv4#D@RP2+`*1%l7E_uy7v+?D;ZK7_iqGxHj zxVreO^*OwVqBdD&)3h%{wm-t>d$pxFoB|e;FJp0oXF2`}`1vFM-G%ph@?VSnFjC`E zK3QcEk&N|&+$Be`4v!!xX|>poG73(5qFfbE`k?tV7aQzPB4_8Dj4@02mR|;)VhG<_ zn@OF~gW_c~rf@T#e&`L;u_b>rs*DZUNNo}X#PI7VsDx{0n2B7BJO>}t7-8{- zeIeKkmuQNw`hMajkZOR*6@J;!sF+o8xjw|V;Xsm^cA6JT_@Lhr)I<<<@)J?7Q$XX| zJw&?p6+DxL_$7ZwOQmAd^4H-bq4xr&^0V^zdNNwsbaq8UrAyP|&U`qs5m<*f7o#FA zwfhj+xgU?X8UlYjngBz@)&2Syyu7h%r&X%WA$A30s3Ckie`Rff6M20Y?^D_S?h>(C z`zq0^eGSi)Q|2K+Sms z5A1X76n7ql%f15fXp>*g;SMH;YH$e`#Y;Nz#j?@S4p;xUFsy$V)z6Sm4nT@cnW)rD z^oVwC)0IJ8&Olw9F?Goo)`aWQS6`PVRVSr&;T~tHj^$j6iquX*VVx0&>RQUj>cM)f zUiY!$;;G_~c5UyY6;51>Uk#j24{$29IT*2VIdo-~QQLxI61eu}BD^6PF2GAQgXuty zn8m2+TnL!`Ezqt!yGiv5;a-R{OUYU z2KZ_JjEu{ZinVW}c!-1{pn`+fl9TftzzRQc{)8w_AG%Sh)D?4fW5SB+LhQ11KI!_`5cRl2$;Ola9Mpb#}6)4sO^t*so zeunD;BinLY(bK$dU#R-si4q-19`;oki}uzQj;OZKwU21C?^Jg)v+m!*XkK;e4r51e zVo)y)Bl6|x+S4c$>d>dr8Iz{-J@}ldtZE+?RJ6E*k`f!Bn@m!&X^Gm6!XF=#UiQ79DZxBrwyOO3n5fm;PmllPSpYptj0AF~v^EGCu{#aYFzH4>jlyQXB;JUTx#rRny&)~IVyR)a0@JyM_b|> zA-5-G6PZNW$|Mv66n))ecMz2J<9FcS0ylqbZ+!MigQ_UJ9<+DuMPOq%KVW;XNfV{{ zrfN?IWw_jqX9ylXkjJ+LYd->HH~|~!Qc|z|*z@2T^)z6V zk(56>;Qd3cjSMlSGm2*x+0fNtV}%1;41eJF*X z^}xe*?5p6Rd$Fl!9E!3mmL-XJd&B1?G4aXuOje1bIAlh^Jbc6oyW(`J09;rhDDkUR zKSk--*Ji1>Zk{h*#Z6SIHyglC^o*Gb;)m>inHLheM3!|b9tMSxnB<2eEG|DBB~<8x zUO4vNDVmqa(MEjTf)UHS_0og`msRq`ZwEIMu8v;gsv;g%P&@WGkW^O)L$KZ4gy?uN zRo|_klAA$RB}((y7{eGFC8v8Qduj3lFAaP5V9{QLnUzjfDCN2t6!u0QOyV4qS`rlt9zJKmU7}L zkG5q&xOG<5(1m)}-c4Xtpl(06nRuh56G$PAt7{Gc=8*y#O;q7SvO9F!+-@HL^Ku5^cju>U;F_>wVv&M%NPSdqzi z;e1{4x^BS?*)1gFhTVeL$vowF)QP`f2{2eml2w5)jD*$bn5k-*tp1aghETxg z>)gtjs#b0t{mLnwV?djGzNd2>qAl5?+-U9`Y0iaXaR89_0OA0k)dPqFfHn^x4glIc zfH(k{<^jY34i`a}3ky28ODK8AHIy;;?A-&9NF7|_MtQgJMgYS7-@9%v(c7(n(wc$?J>J1 ze1sl*E>u*kidT=}HcOEkB;$>db|BchP9w$yIFJch19gB`h{7r788C1L(J%rB9t_!D z8jKyL(o-hWMLlIo5DFpVhC)=iE{IkY51oJlVcNWyb|>hxk@5f%=C2)|yr~z{vbz;* zQ8m@?Q8n0e$MxV7Y`WL}hUV;aT6|+Bu7&E(`v4Vdrp{WC&LyBzry_^x3<6t$jNQ0a zbG{|oi8rZ!&TrnpsNoIkL;OS4p?C}S?iy8RLK}j&S{>6Fn4mJME{nC}Kke1U6k8qW z)6zD{`GI+KPqTr806o{f7JTMWbew`F#j2HKk@tA{uAhbVM}XjXs)HT4NIQ{ES-PB z37P3&5jY_m*feS0gg#s`YqB+|+l!#Uwa#^8;)LaX@NdK(o8E~yl3aAaWOZpoJKdr^ zKg8wHc-kAhOilasP-&R{`FW&b*q3o=VeMrWliZY<)Ag_(cTPc8UZ4o9gjFigJjqQ3GF*!yF<0f&$MC^8*cbC%SA?e$HB zhwRkf4E6rsA{TDkM^mPSYS~D9BlSp};um^nBKTI2qMs@B!;x-f)Sii!o3K=ktwSNB zHQH&k9D)P8 z9Uk;SlBi3PsKa3&m6UNm6|S*oPHpCLHS9m)(SB1})?3Tml2R7_skI(zpFiKFy}UTsNDb7@}Eo}Z*>&i&o#pxfEx zWsG!zT&SNH*3Sd}U!tO-9S%2wng@V>>DpVQVyupe@y1kCG+e4JIme^n0`2+cfQB~s z7FUdCltoJYq|7b=tuX>x$(qSpYI>mG@MP-98?-~c{ucQcxEVYj;>>>oH#?`1Pszw= z4Aa5gum6K>@lw`n3q#upZSj7#g%~DDTYSfzAd9u}n5J;Y%HV9p2@_onkG{nIvLD)M zGxBE-3Hr-+M}lPaHicP=74MCy=obDPv)> zy2C?W6icK+N`}{%46m_ZcugB|HC$(^4pPL!#z{QBl#Qqy>zIL~r7!K(;9$xT5^h(j zLnQ7vpTRb3h>K=XCVKMC;Afef5%5DcHrkqjaWM8nWlRW5%S^1O`qpdOl8QGbJgU_e zC^y%!X|r<<`$eO%wo@r8VFCxriVSZ&F}36P9_X!!z@U9kuMg_lo+yjI>Mubp`!`ri z+>FJ($Os=T_N(xh+r?A;Ga@*@WrQw-xM?GJcfFvmZuN%N~gC?29oK7L)q`q~OZ{*fb(2 zT*A%q&YXUujd3Qi;X?Sh&}i=r%p&%yc&ar-aUpN&H-{OT_5t>lD_972DH4g14*?t8 zsnUm&j#`X2#8=x))D`BV*ub=~LroW~d^QpQe>yHEj2uNf*8KL@ht03T@sXWAGJXEe zaI|0l{fZ(cBC@cqGy6_ZA^*L1(`Ti`BNMwE-w%Q_%GAN`8~Sk)hHggaKa3^r zqEcLY?r$HE5`Q@L@-OxOTE!wznM5|JSjYY3xo`L1paQe&XaA(Dz3(r`Bwqa`NTy62 zbIkN70{pEHoI>DZ0!)9?i%A`&?=At(@PRaW?E9nu=lVbrpzk69?&Smj2{hEbZPi14 zAnhaj&}V_t$v#kwIu8)wc|Pz}#@tPSpYVY%6F5tN_xQjc5ttU>lRoe{0$EzT`bQtg zT_&-{j9252c-8zCfebOL1ppQA^nFbL`vib52;js3aP8O_U}EHPfghuEcAf7uvwB+) zwx-Uv!mK_Xgza4ywkvpA^YAL!b$PbqJAOeraKG`W7gIhxgs(j={^j5Q`A@U3v+4qd z^BVeFr|F!84&nTs?!5B{ydVSE$C^RLbJ@q5k&)ZSu6Fy_tg}CRrZQk4?$MK zdzHQ80V`DYiC2&EL-vhVYrbb$yn2D}*{=lR1PxOHae`JUfjA+ef;gct5GUjVakd~+ z)x17&%GfG;6U2eh!xp3hSX02`*TC4?|J#uWM{50_j(5= z)7UAybX{w2vzfa_X4GmPj?WL6`D?1*1+Ckizav&TW#$2Cb@l{lZ)BJpsHY`&Wd^-+ zo?pC8^gf4_!kzy2QZE8d{NZ}ieUf-5@W+;fmc#!5{4p&QTV4*CUHI>U|3dti;BRzP z(1W@bmG-Q@f{csRzsfWIExJ49IbWU!%hQqPdGfqgp0~^MTk_<*$vtq+y~8cY`9m(P zBuK_tMJrh5(lkG5b)e~Apw#?3V1bvv_3Vf zB$xt;LL9WmA4azW2$Tc}} zYCt)GQxm1>rf$hMcB?Nix4)n>D)GY)Qd|0^>v~3&Am(`{%&g<;lOArATh>T}Va|TdyQFs0mA?wmpjOveB?qA`<*PR(9 zHqF@!-2zemi^xnxbl6tTh3*TcRu+p>qUv~DyWu=Q-8w2Sm329q$DDl@qGLo#RK7hr zH4{;$cTl#WGrI=IxuTlO%Rb)e+U{S_P>{0o_$A&Sc6s<^Am{3e_O3wA`J0DRLd*+X zv%53(g#Bj_gEw>}D$zJ<_Ab{1^%JlFX;3d^(zoz9j2WXX%BqjEjG*F1 z_0O!+M}W#EA%QD%ch`=;L75)vT0#5NL(0uIhf1tn;L>Bkw>^5)bf5$y#2rE9WU0k+ zX2XH6AH|$KNhbrLmTH1u)a~PV_UO~Jj(%^RU}zk->-g&EFkc-~&sPQAi6Hy!Fjo}8 zZ@^q8b9hIYORY(4)ONo;;I02aJuhs)TYaRN<)M`5yAJVO-nvxrR?G`bm5y_H3w@Zp z6-S6+?@iuX9(NM(mG_Jbg~(Hi$-3bXE{kHdu>g;-nK=c0rxBZ3KATH?Ji^YQP)zaM{H=>of!7OU~2`cbx;ET2p(R{!REs;j=^!9#;f z^&394ntu!tc83huM4MXb9K?70s^_0Fh^J=XhO>{V3(R=9)Cf9oJ?Ixmd+E5ehHy5I zaiSn)2q|-QuA~NeM(pLxQWjZYSJy-)X{|Nm6>}!znKqQ@z|}?x?9<|zjdYMoVqKht z)Xjs$B&~z%YZ4`_M8ldL3oSUdoj~8o(K_5&ifVSkDt_M2(ArZG5_fX)RJ+!}8hy;& z#}3)*xr_c*tpa7;?H7k?$KC7cyZdS9KCaws_ai_H{=Bxu6q+A6*G&9l_$TlWxAheG zIgqvDUuyI2<{76IRIm11i#l$7IasF9Ak4K+{CC11_u~!j;}u9{lZ=(YpN8sr{7bE> zpu*&0AyX_&DHgKDLQAnQwOGBguAGRbLu0!PZClHOUWtJ6Nqji>d}O7|D2qk5R)jlk ze6-_1LFNK$XQ6RAy%^IFXdlGp`al>wo!|or{$Ln9gZW`O276WLs!eVtXv3KZpc+xY zn`VGz z9!`dwufCkTvKJOsQGIsiq+uU|TH)k(OfYd^Etp8h;sFwIRb)%369$H|+e1gz7kL7* zWmgZM7OlL*bEma^-1~aiUq~iT`7b$fp?Wb*0yOn~(YV4V(j ztZSIGn4Q7JcTSf6xVjzAf#ytJgNWC)1={j+)qc|=nE7%s0f$zE2At>b0~$0QvjR$r zJ!gpQ!4RfLg{HW=gmz-+-jJ)NwqL_M8(D=m%rvSusita*+O(xZTbUX*L3y9|n6Y)D z@p1cQMP(_)ZBsRPCZ%a{G8sin+eXp0QPsATdYrtBZ(APDs%u+Q+Lpo;iT$>XLP3hU zJK5vgR!N_1MD3A4mBMU|qjnbZSTueP+m;%(ageHRsIGN0V$zKmOdV6D_Dm|6I%dr+{|>NefLTZ!&Sww!siv$P124nB2jJ_*z<&nVQ^*I$-2Hr( zV?SI;449d#t|+={AC#q!x_$9^2r4yV8{rWf>jE6JQ?ZTL%a~o6J{AB$&ZN5`)+QXP zZplWWakONuxP$E7Nh(gNdTiW2Nt?8BEArw;0$Q=!p+kBuKunn$z+hxYnBr(2YkwzT z?Q|xMhD^H+X<~@5pYY1fSQR4^-IR&w_^yWNzYCG0=oQJ9Y^)_4Z^|7)IBCI+ATs(EIdb8<2;M+&wn-GjY%G^; zE>$y4VEulek)5pc!pvl6cTz-D!b~Pp0ba4b6q08qqi5}bFhD2Q-Um_HiO4Xe3Tuae zEGEQP46{>k+;fU(eVJxxZO!PHO*B|Y^qkvw7ch)%q%u`b$3&^h#```gKycZl1s|nz z1D(!Nq{yo7q~;MVr2)*A_seB-kew}=+?H%Umu)R|ptx4iB9+=W1Uxf&XHO*0w4(gh zOe-eXqBcI4$pMhd-PLUNRyr@MYWUw9)qB(&Ioy{D$%8l;TqSIlp-XA^_b_TZ=#EspvX& zG9ZG$vjN+Tcet-pPCzLgZ5e#rMkY)U0DG}f8`)2}1>B8n%1trli`#o6 zdeQaS`_SX+NQY{$me4oZ}@p(wJKN;PL>wB zOGR7_PO02tW6G)I++t!uF&8W4c&`E4F*NwxJf(h~!J$Aab?^<;xn`>HK z!0qEMZs4{0G05AuI~Fww_dW2h%4@3DG+T9*?a_=4WyngStbjTD`!tgfdpT*g0FiY2 zm@v&SM5sPjM>Bt+GoTqdK553>Vq?k?nn^%V%$uT_VB*ztVw(NJ$ITtLK{MI0JORkO z0nMspu3%Bzn}*rzNCdPCX}T2eYh610B`9m;LkV07U&+rIIS-C)=JF)0DBlG-c5Y^f zjR|C_b^!cb>|5{V$MrGlOV^FduYQ(ni9DG27=_Z_xUblF_T=6S?#`Y(8cx%ii;7n` z5BV1GxE^@8=V4_zJ|P=Rm=~6&TV_mcEPeglx{W2-*Tyz!&nT{MI|(AtuAy>Rbvq3& zBiQswmkz4Cq(bg6hp;%3QWFZ&$jnJNS2)E)Ryk}4;r=DFJYC1^f?GoNM&=363G|!^ z&nWg*MAyH?zl))6U&NDt1KJUHsC8Ft5@X9pZ4!$EN0U!QPP`XgsTDYns32TTm$g`~ zwZi-aG&vnHagU=Lfotz-p`9nFv5Bs-6$b#|ZUqnr0O(2zAdU~XxAfryoh>EPsGW?w z?ag>#xBhIrirb68@tTG1?qw+s0QT?z;s9Wg2M`AUi#>oi0KiV3LQ5O~U`I;<#G%%- zz6Tm?B@NE*N2q-us8vq6o`c{i>O%_=fXglAy-By<4-_k1)oth;y3MsTS^2y8S@4}K zfYAEj6VNV(na)iG%2ItQ&xAmw!%cWF3aGssk6{*GqPUd|52=HPut|>2NmWOl)J~5% zD-cJ@OY8AiZR?lKht6E_`d%Wu}^tb%tv<^^)?g>F=zLMC#1r+q2#!Dj>2m7SCj zp>0I9WvQZ^5sLB>QhV#-Ds;UYsy9!nN*{U;@sqr7WTxTkKUubJUqaH2z4#N`ajJ>L zfjUqo?TGhEs9YZU6Wl#|1uGJ|dsO@r+&y|Z;!be)C>CfH3gS2og>n{k54tASH9m%P zI^Nf?EHDGeim!J@RdB=&j;P=hnAE?aa4s?QCt|+S!)h+S%T=wR3tQzO{44^sSvU zXKw8*#0yP$CJJdhlQZy06;fL_V-1WpK3t0=Uw%Sl4()$N7{Ze=%AuspAm=cna)w>+Pc=cqh?FVAiAZ2B(KUQ}=60^5K$VdHY*FINoD-^=Pa>6jbZ zY2$Km)7Dh~i)bnZ>W?FrzQuT09WUPc+1358O3>^BM~~}TZ*?#=Ofd@*{^tj7xpe+) zt7GFMCya>Ui`B8_Yqwm||C}UYXxFU1zli6VM{l{JYbDHOR&U+fb+*;&7Lrgw#I%L9R9-P{AyJiA zOj}4@$ex8=&(Cq4Jx6eUl;%C?K6#^1SiN@5Fx|z&>VPM#R?vOJF<0ld z8OlBe5<h8Fb0BaI2F@b_=c>SYWZ*o?cdBD-wF9xRvq_CL z3sCNjE=_{@N$qGPF>0&vOqkUi+S^&fOpd`LnZw~=ES)E6xMsoCqjjxu(Ao`FBKQMu&!0lYtr|3~pZ7k{}X)f_p2Xq|{h-^~D;BPaR( zkBfhu@4rC&>pedVb4O10J&rkYitkx#j-2Xy4mC$k^F8~SBaZLsH%Cr~M+POLw zR*=FH5~rkjz>Q@FWZ`HsEbJ8}ZCJXE5%Wcwl~P$-Ts% zCVk%rNT=bPj&?Jg_44F77W;NEI`*ilbblFc!`T3*bC!yJ3f-IFc4skBX9%8T#0r+E z>x_upH7)F)%Y67Ct?5W_4jYvw0WoFXADmlL*kCwc4ps}<4=7v#zqlS=zrWTB#UpRu z1;iCgQitNa`!g=23S6`{Sm$rtnR3qqAKzmsh*f=U4%w>Xmoi&nUQ;5U=K_ zeGXpbDKWS{09Wl?Je&{Gbsiou=R@?LkB7^LE!yne)G{UIG;Gv;ee*#um#f`7A7&~F z-jNINkWsE2HCk8ZVe%M+T^I_>j|sad6qXwkc5x_d+L*9QLSgM=!Y&Pkwbh4Jp9l6H zp402YMlK7bn>i-zBM6h4dWmP$N2o@g_A)k&LcBh3WQ(8kLfyF>o(*%k*nR~wy%LXv zS+Kj>%)*kcCR3zb?-ZlZgiMS=TAnHQ3F}w#a{>G&b93jTOg-8%M|ZA*tGWxZXpMjg zVMV6a0oXa?ajhi}?xTF;nVQeBFH{E**}0k-$W}$tg?tQmSXSedI5 z-vRHv5i7@?Ymk|1qS*IO8J1L+_yY66ry;PTcP*mW_aQgz^;xwS=!lE%lTA!XZkzg9 z%*YYzI>cJAH*-+#k?WcBRz5y~M>btriftk3ZoMS&Cjs2B3tURfZ@}1vtr;xqH`!l9 z5zeoPe%yHlui6dFAc?KiwCb66qi3eoR%%_(^osr_6s@|VN5&QH+{iqeOM7GcN01s~ z`IB?mOlgj6^n4w8sJn)zsJn*a*j$~WE*s8ZX9Al**z0)+v3kCXJVavL3A~yc;id3i zcm_=wCqNz9i-PF^ zxNZEiq~1+WoQ5JdKBc$VQ7H=oncBfWjs&jo3qJt&3H`#6_Ph42tB7qwRPMdb5& z&k2lyl@%QbS}?C2Ug;q z>p@t*V4h8j>kOybFL<5&%k_3GGchMolaq8V8!vUnGtfa3dM2SJD9vE0D`VZrKXGL$ zlSpQuk7W@jjx4|LuS4ltR(toc-d;^agZ`y`0d=X}LL$^Yk0*+8s}n8l47tPV;1lN< zEmuRoWK(`>^$=S@98$W6rI_H`4c@0&)2AKx{a~;;7|;u2CQk zsvhWk1>#uhf=Xv16~|A{f1(wa@y+ue4nKz_&%X@uIT9&7`Zl=08a*x$s{}5vVn58j!aY3B z-oNPfm0<7FsND{9I-NW4OgMMqImdLqjF*f!snQ;`F|injk5YTcbUUj>|Rb#V^O zqeWB9!N_Mv4CU$4?6?Erh6bSp1gFwUQ54>$w#X$fch@Z}^H)cyYg3To#@R`q1! zBD0SaP9Ab95_7)7D$m9!;@P~k#k>ir!g+=^_W*A{L>CUe&BZx9KUFd*P#i+q0aoeU zJwvLwSgn)6!CedZWuwhNl?}Cxx@@Mp*@%iEsn3Q z;Y#JEtfmbA66)h^KG;toOT)PrWhcyyeNYd|{LZ-jG{B{O%#8~O;TNO?u#35Ip&O+| zL1vj7`(4Ns1(|Ga+?|k^UYIHnFz@@&Zua+)C6`uLash_t`osaip&mdS*nW8uF`fH> z68B=nb3Z+Z3cEg)Rvd1qeI~N^qS|NBgL9Kup-7SnUDC0l*p$APzM?-Gw%|oo#UT07Ct}6!9Fyit0m$BY=A; zd}I0iXQ)JF$Ey83?R51~6dQ`4oZplk6vlGnVquz*H$Wom4oR29X2}omww$jbYqg8Q zlH9^sUTV}%%Wg?L*e#Ln7gzfwq3ro-0e8RTP;J+XG%oB<`Z@MA7J=%V_g(`Oy&aF? z6H$)gd<{k5Q>xe_fkU@{4`g)v4|p;!e)oZ+${nCb^-D->RByjtJ3V59s}gegQKI?; zz@{Mw>|OZRkyBEaBgOn^1CJBOoCg7%6TZXW!&S#>*<|;7cHHBffiV?_>N8jaB!q1eIDzVkYvrXYS7C*l>9)3J0&)V>4yuu)$U0RFhJb7qpr=qRG zwENxmX}3FQ=hr|=3FE?09~Yk1CapYNct(3-T)5tH8F2YB`DS0_>R|xd zAAu0SIV#E@^+jYTHDD9jqJ|drkmts&HE0oX+a; z@WedNIq+Dn$2-tY+`7SIxWXWW8#cEBA7sAT%AXevgreMLJfU z@qO*|sTWf(RfSn)Tod+j5MLeAJXU$sAx(Sk+<0{<5_pLPNr^2)s4l(H4O4lQ_KR1~ zpE$Z3X?DE&tx%-obLgwGEiZYhNb%}U0DHv_!5z8ySRdzTITf#-7es*7k56MP&+s+? zkuO|_dja&j`_0i0LmEGiFqVFi^2}KEew3EK`0qXn@#>R)`PPD2D8zCe1`|x}f@*Xt z5OBT;AMW#rSO4rsRMb}yLroB`{?m_QIgcP+dApgAiBvpgAtCG(ukQc6M={HJ^bIp1 z^Qm}snGA(8`4%%-ZaIA0XMywO6zYQQ)$cAO&qV6#_OPF0v}{kDHeP+*k66lv;#JI% zLxpu4w=(<4Vd%d*WBnrBe-HKh@9Y;q7wNyDw(T^l{e=5`(w8y%_@& z))Npu2N@5LV{yK!=NkWtjF@+kNZhPmrc(fa8|*EFi!0F)#~MOJ`#S3K71rfQ5A{S) zi{!}F81Ki`<>+yBu|jn*a6SJu_K`tV#6P|&1iPo~$5sWKEH@QfOm(wgmq=mTY8ghtOo~0P(jZ74cPSoG6o*%^jK;^^PZW1CHLG_ZYlSse= zRUtq2ilw()g&P}HVNAbhScSWd@+^JmBybMDG{j-1>|y>L@E|@rz%WcTP6v-Doi?IP z#?W#f+RlEAZ2CAJ3A4Q`Wlryk*-yaN-g|2G?;wXsfWD zrPt%DyZ9NeJx|u1IYZs{r|b6L@yp!rE0gi3Ex@zi7wC`x&wgK^GY44l)D-)Dy^7Z1 zk}p-i7!N@PW^mXN~EueP2cY;!&f>o*cJMeyT-Fca+k&QlnvLka9C^@Ui>Eb!Wk>c|p4RoX!)-(r39cr_iI` z8L>U%E@YTzdv_s2TRC>{y#62e9?ONiXYGrm1EhJ1)PVl~w;#j%DF6TVV~D7K*nVsm zLsg;T*?uhWY&rwarLdsLk1;nRV?qW7w;%J#GDlZ1^htJe)f$$tQ6Ta}U7b%aVMGWRl3Q zNhXW@hU7qyI0^FEY-jjw8+>Yw%V%*>#CaML5ec~1W-7w@Et0s|rL6BjhsNZ>md4+M z;=+_O_>Bz=&YYGH%(F@lNj7V2NP30X1th(~V^3G;*@MJ_Tm0p)r5UPGeRc4QHR_)4 zzxvgh32h2coA5}`@4K#Grnf1;zfIotFX2X!=e_zZdg`*1`gOPb3H@1p`n8z*PJ=TX=K7L9KdJ zDI3#Kew8(QAofR!^0sMw#x_0iHCD{N%vcCFM!e(ooz>tWZ1=O<(f^t4X#Yez8k_CV zRWzR07TN`MU1H0dF@!HYn=w@U8LbPqhxmWG70*!88#3f@MfMex%ZmjLjlYar1ZnwkIZHprZlq6q)6`Ac3&a3#f zJFfwq*8y2#3WYdtfN;DkzguHNt#}5e;~>XDP}*}L&YQ@O`!)?*W&8x{Z2AK5MLDDS zHDc382}Z>}T&83mhhN9<=ddlGU-hB*+9s>Vx(}eL&lFQWSk+@kBrJ^yjV)o9Az65I z#JUH_#pbj-KSY*eIeTq|tW3kxE*Z5aE!bun1ygtqFm1_cH0^HM!t3)vumx}RWY6vK z6Z{jIe}VbcY_92Tg*Cl?W@ZU7%?$CGiJK4k;T4~sxQ@*4z=}MXb0$Q_c;^FUmg(Az zHVlCc`~R`8%p)vqY5L#T!ZmGA+TvZ)CMzyvuwpf=;Bz>xulNEsB=e*hs)MjC-y7#$z>Z zpiTdK+|5L(XUAR2lX2(#x46sdi964kwg%*NJo-P2!LConpx@b+2L|(4RoM9Kl=oO= z)hd@mX5SWM-}(-H<`LSaBcT5oKKgrf6J?Vh!|73hS|OeMH)to`fXBj&0AR8O;IsmY z(78r>Ef~td^;pr8==vmH?tgEfToPad-u5d`s0Wr6DPfdu(wK{V`AUcWj zLjTE<^03n#Ggn$8%7j@hF7kAdRwh#tE{HvQ|CxNNGlHU+_nKOD@g}WVeD~tayg+9p zMa%dpG$&+F)o)JL;5S|`a{b>|9{*jz!O^q+&sheCGp$ii0D-Ni9c2-T>1)(OeGlx@ z$8jzrZz(g@y*6MaaOgkTkcWAgV0%20_dkf{V;*g-@*i!@YIAyRtq5DO2usUVuRrPh z@^I89Sum%gE`P1sywmMsSkkWS(91tdgp;?#(}FDy2YT+TuRg8A*8CLn=@Bf)^*|!P zaC;ddz)0~jL}0Ah47|KRgK^%C=$kVlusOC)$&bE?3MJV$!5(Pq<3N54^8=el*v#xc zurE;WR-S<0EO_m-9t;c(f#^zswMeqZSG~ih+#_Zk57!oT8A7vbflLj^fP1)DOL19hyx|wn&_hOCSep zh#dHFmZTKc{v}5a*{YHoA92vO9% zn5W-nJm-0vk?~Rub;L6ERrx!8v<8Tmn0ai$*!X)hM&9EHqMpYs)+Hi0{l1WteI|FJ z;qn-cMcVrqM6CmN>ul6R!y`*&1!%eoNH+qTVa~LhDl#5K4H?=ij_?I zTCp5S|5m)DRLod$9CWX7K{HPyToR)$+u2iErnWgD^16n=>kf#i_CPvY+|sR zJPcgdLBm}iqox@AM2RG9&MNSvo~ys%soPSpM%k?1=T}L%(CEK7`ajykWnE@`{M7#?%vi!bpG!uRk6zDxm+h1$%I>h!Uh-_$8?Ge4<= zH{A@I`9+HL8)~h+pHu0 z^@>%+*Qaz)k-nsps(gJ&hrwktzoV1Liui>bTOoZ$2NmfnI+rD)kLcV6S@EW9(>HV$ zD$DZ;9h_Y7B=~ar*K+g>3wN2pjTis}1= z&OI{widh?7W9qz4=1XF-zf9&2WY!eZ_X(X7WX6c;`-INtWYX9`t$Z|#A0(46;s*K- z8RX*bTTf!dTL={`@h^)Y;hn`3+h8pA)UuiN8lTm6nZwXA-hvU$PkcdV*n z^*dHow)%a_rcz98i}OPo#s!3UBXI?3IR!6K(j<%XBeLWVi}PbY`cu%(syqzHZ0zU* zW1lcv=l)Kx`3%P6lb2MuY;?AO0^DY-1{IhHRL4(j!Q^jozRm30N;3<#{>7=U8AP$S zaV{)vch-R5S>Gw!b4$^)zP*4^vc94DBk!bDXlkCfIa_XR&X%W|v*qcWEtB2VWY0C( z^T}Qdc3+bX*KlsVj6Z>HI43YF$PK>)Mui2s;h4baX%HT03a=;M>fXqoK=)?;1i80T zh;v__SGhixeh5kPUc;dKJDF~HYLPJtm~-$5Bc!0&j{m5q-T$J;yod2Ddjg$Z{!x)> zPoxo2$h2oL8lPe|exKR+&&|ev!B+EHB+y|0pY^occV*1}Z)4W;WdGMh?>^oC%^~`K z(EtC@Z=L_Kx&NF0+y7tE)AfJR6R369=ip!SezC>b7R51~=+(^0^kx>{Xu=)xJQh1X z?dy<3^`5ncF`s_eH3Z|%r{SeVjWOQ@`RTjRh|T<%N8)iyg+|`-=G!xy_awW+4&8x3 z9B|(J9O8iUX6(R&$Gp6#utm%_ch^x0)6i?U){fMbAwE{fsc3u(zIq&*%4KnhJqS4lqE)zk zky773(I7nm`#5**jolpJbR`kpTmK!U`}1I;T@z1yg%q{h-^Ikc@aOwv2rhe zus!6NAM5e%*H9+S+)_=x!4cZP_Gj>~CAOm_Vrs12Rwxy`u9y!_jSa$!)1Y#TDg-Kz zsBEC}PK^z;6#$WsL|zd2N#q9c9EnH}1*Fb^zOJFR=)M{K--r(2g5v1*7H4B5QknqF zCkIVI@!{Aw@1?p3yr83VU^7qdcyF!v?k07we~U(wFjk zOQ*jH#L`;zPn+KI)+z#w30{T>Fy8huM1V2T%MbzoGA^<1OMkvwB);h6-L&$kV#-!^rEW!9g(_QIhlfRseW~g$O-%P z4w{Q4@X>HRLDyi8UY213;i4w1`BEzu?ox^839oq%tO<1e^F71D-urM;6a0jlVBHw= z+?hN5?sUMT$8Y~m z^XC0OD0+JCWHk!mBIE!4x(HspJZoLV5Zp?AdR;_m(~rJ&5vy^?ip^<8gpZqXwZuW( ztNNNf!{bD3D~m?LGuKX3^sb#K<+pZ%UFTgpp$fyz3cWnvE#JxseC*}@n9;M>Q+$&t zfI|}VIIH%Dc~)QI*oSpeNey{CQy*a0(f`!P&r;;= z|3Ci^ToXB1*f@|EVpO1m#)BYV^?2nsR^^a%gN4XT-}vE7td=%)$pz# zvKTMGH~))IxDc4(y69<_c;Y_J2=RQ6gmY(J!C!c)El;lFNp68-3)W!qK%@3$ib?RU zT{5G`?raH>xO{fUAk@pp$oAw`;N%Fz8yA7jmq2<~QSHyT_{h}YY)$c?n6}t?wGByZ z#Oi1ZLK^kOxoY6F11GsX^X;B|v!0OT4rF3`c1wV1` zqyC`B5xAuHtmDJYGd)AlO>Spb$e=4cbI*9A`m1JNSd4MTD?fSr#cDMFpZeuVe_FL% z8@&|h_#k69nem1X*?GQU!wbmq=Jn4p^ZMtwE_`^s@zgVzrO@_&_zVUoOT02;J`)iE z243|u86v=V&&v=2##}E$1Q=MgX%-Oy#(XbBggK|-8cqKBrXRkmH>TrY$B-NuicYsZ!-v~Pa?QM}!q6MGHg9kNhcw?fnL#(8^lH%!ki zo)>M=@yVM|dFmD_DS%hRu)`?!J+->GgJB7DZzI38X9i<+?=ZPL$xZTb1KrpHBhV7$ z#zqZz!^6FcnRp)?y^iN?ZtTW@=O{hso0kFZeatqm4e%yC*AHO*DTP99b**$V{zu^7 zKxRa=C6}on!o43N6?r4h;v$(TCYwoM?|{g*$~Ds#*B8jvOP-~2n+Y>RZgAYfjmFr0 zc&nLGczK+LE}vo8iOsVJT*(gPid7g|5t2?`%gCH{udi+{D$4>A~<2B z$-3sL3ac)%@8!#akIO!1anaR2&zH?)i7=fR8iUmcyV32TSYmhpLT);P>-HSDTcN#Z zJ)L(DeE-fngfwF<(6FL=3aRfXgXha3w#X`Yo?`Zy%2`~8k!3#jJV8Yf?vwnnxQ^l{ z(lG$1bvMb1i|JB}3)?3II&q?cRb;pGD5%Fka87>naF5xt($r~M94Rxsm8n%Uszw9M8`KR{ zWR5{z|6Ec(P?^~e^jd~~P)+KGgPwjk4k0%^fYxJAfK=o|MH%cE_NZOmVDQjw`scGd@4uH9Z9pvEW{Zrsq-8hK!Yq!jQQcXK z;}m}|uho5y%7&$?_dbW#%TO)mMHZtt6kS%^S!bqTjc4ZaC3LKxH6lXK@uoY5mJGMJ z(je!Wi#yxSAK0<6T;H$3ao6J^(`>$Hr$)j;-CbZK%~<3y;Yxacn6bzR$qzKf9aT64C-+}9QK*z>kPsH3Mq%+1GW&XFA%bgx`=jk4cBaJ`*7IQ(yXq+#u zs*SAEFXk4a@mY|GnCprkxKoC^E<+60U`Mie??YHzSHX%bl_}{B-iwCQLWf(DF-St) z*O5VQ`$}3|(S|&51Z-g@mg%Na=(HDM9-F-`!L>RGR_eE-ql)}i+b6DJp zk4&2SBSI@KU^00iCJFAJC}--y_PZ) zBeu7S?Awlu5JDpRwoM4Zm}Ef`w%nwOA3TWrkd@>Pe+vB>1}HVmi1P@Fv|3u;Pl zPL1IVYqKfN0cd$toUOP6Yf5bH8)n09^2gNY#M8r2H+KEdc%%y}jzynXMv&zgO0#kP zRXG=nX&W${%1LL(0iQNGheIscf|~eAFMQ-H8Ef)v`Z$AWg#+Kb!p?u$Lu7?B2`O$- z=Y)EE1tG-rcW#fr)7o>yt20d_hCzGfej2KbI@7erxu#>RVNA;@In9J8^_>K5G|)sq@JVy2|3X&L8jCE@D`UdCw;iMy?o>rtWMQ z57*UR>h>Gk6H)0!{9|lmKF6^w6J7Tq78eZex8y20C>B&^d!_m0*qtxpqloTbAV!z7 zP)r|-i)klr(1dcMY&RmuiPnX>f0fuHQ_Nv;F)cCe`{TaL>`3L}WYUMBWm+LQolFi{ z9BeV7MY_z2lrzC}0&-Y6;)q8Gns2Jj?NuA@X`2~oSLrufwEuY{nCA@sqka5ioS9}& zG2=|FQ=I9{;j@vMvekR$V2jwVypPLs$BlH~o3X}z_l1GxlhUSGy8_!7YY*56wnXuD z3tU`d+{I7oL#oF$Mt*qMFS>pQ+dsPgq!?@nG74e*;IThqi!!)A2!c`I8GG@6AOERn zI2L=Db57}ra6hKH2=`z3srZoc7S|)tJQ~@Y*?3rRG0%zpw`}geDeNLTPvgLnIo#st zj;^m%21-5Uu)qODs8vPqJjq`&w!0_orzH!t^uihBU8V+nTu z!OA1uv|F=JH9$2fz;GyJtugUv0WCD;b7z!iW4!XD5mIKWH7FRe+yK(~Cx^t5@ zS?)ZbD;{U-ToGiCAj9IKNQ47VAZ?ZQDbvTUx(S82#t|0LICf*i zkQg>1;cc`tWwT-^}==Q++;`0X57GW^p5PH434e55aF?v7a`a{LLV4ZUrLATIcjnh z6cz?L@HpCLiPS^esEC5q=edhB&tIgiyO@vVE~=tZGs2{q>*?;!sM+H3v8y%_!>p9- zsRgUne5`{qQ)XY9;(mp4`wID2VHpvHGLB>%|0?0q{K<+;hJQuX%O;qn_|;-@QH47n z01-fsC;~`SoGO+68fw;br&r^r#Pp%RWoE2*OBc4d=##3=pVC;pY?XhoN!!?H9}CmE z+!?InY0~mk%@!AXD*|UFJe{^xIw~PHQR?j4QYuqSqFE=7((0Q3)RZR`#$iX_K=n9Q z>H4cQ6`9Q}h4cCoUW=cClcHRl=gCIklt$ZdY<;RB5e}>ru*Kn)&p*dSjj`A_TE|x^ z_Zx?I)8pS9ha4Rl#-V~=<1o8t92S6(n|5RD6(Y?s0lEljjtq^%NRC6_`J)8*9CudZ z2wYuA^JVfp=Z_=}G%_%AiNjCDY3vb;t0ZVw4;}T$o?f6wp}&#S#T`r8r}NF+6Ygkc zN4R6~6B7$LrrlWU&*)_}ieA;{q6}}9wUx9*X^V^c%j~zfSgV;!%1nEzeFbJ!Z|gn8 zQ8`~`;qS!5IPpcVvA9YjVeSMIX>pZ8LW^NN{3$p!p-0J%{?U88*n#CYHg^JeI5{y3 zS0mJd+spC%!CJF2`VDg91sC5<=m<00YUT!-nO^@#xGPas=hc_sKK|iFp6Xz_37~6` zCV;L?ngF^AX#(hKqzRy_k|uzrak=EL`e5l*JUZM!Dm&{A0P=j}d zN+4>^dY>O>H!L}P*Fuv}?w;b6?}*VZ3__MPFGQkfs154%td6ISF=I?y zdHrFULup=Os6Ou{2J1_or`=C)k2(J6qzvOvsx(h4hAMd;WGmeSjk6eVqX**=O8+38 zj@o0`L`4KHPHus;yBTY1>dj5rWJ6K$%2*sDAmA7a;Cx8Tc#~N$=i>nKnzJzHNFrL` zdCmqFQAJjFB6AV%{B>@l8gF796Qeyjn~;dZflgv7KaSav>C#)6{Kp2gct!)ngMHrL zmR>tWcw^q`eu;d@b@1kkNY8iFqU++58{#K*EM>}AoqaG%OzsPa4iB`p^P2~bgMfcL zzr_N)M)$=tMKZ*5bLjqucwT~-d7%DhImB}&#B+CCx--xbL#hy~kdWzn;mbV$AL=-IKY=x^T_iXaehaM3owM5fBLm7|E46V#@ z&m_yYXwy9l>6o@&y(-|6%n0TD{P({%W7flhJT|KF zIySaQcZq2Pmz^@4Xey7hye4EkJxuqz8Bgr-4DqBY6i-~}&3IxrxCx-AlV*=7o;pLq zFP`27-#?z-LpozTQRd&`>1DbDium)t#1nNtGoEA^p5N0x*F0cEWWlaxJS`#*@#GO< z(u}7C%6MdEnDO*JS$^@f5NXDfsaFMDk{Q7qZ#=O+#uI-t#uJ=vbI(Br;)xb`<4M-I zsL>Zs(wx&x)fNX`gb-4laugD@-HfMh^xS_FPi8$V$aqrYeevXHgg2gOs((EFrg);D z8Bgr-4Dlo_iYLAyz<8p&+yv0`Nz*fmr{0k8i>Jll`^VD~q%+17W&SOmUZ*?oMPdH@ zdpu>wn8WR1oOY?(6Hj@T5?FLV}i=;na_gV>mr=e6qt&{P#aTnH8}l<4JAv#gm^E z-gu&|-gtTy`hQnEQP7Mh_IQSPk`~1iUoBxg(HU+6Xue?LX2*bDL7JTadKGDQ1?Z1R zvqKbfNzmdKb8Er(kGXY7XN)<@{9DWorOzymA^iEbmnrRk-9xGx5JD%Ub11z zAj2%K^|a5mLAVJRVR3E2Pr*W-8(Qr zT#^~V9Pjarb@O<}U;pD7r%RuKhuCA~-q@2NE-Eu)Zy`cUN^`oY)#9M1z*BYd7ZNnv zjJ-j0;8U^3XFL4&k3F*@mSpUy;l9}Ov%(vDwACAXUE$+D6nhjjV~;(bA@-z2vBx)+ z7<=pvHv#lU()0@G&7|2sptq7{Cn?@Wprl{C?E>FF-u57!G2STiZ}B#oezG`5@#o*- zEyxIh@62Nyb$jA%r5SHG&3KbxuD!^{F>bo=Ju55>0uKv?g!_Tc);z8qVj6*`auyep zX5bxA#v?OBFVeUVlI0h8Um~sJnyFePToM|=EN638u$zS(0 z4tfRQB!%(~612>Wt&wz=VvFk$IY)o=$P6i7hnmVM&3ICKeDUO0vp1e-pEsU(pY~71 z69vt9V$WuXCuvbU@#QbZ6CL0tfc~5`-3nop*4A)nz51r(l4?j{LQQGVy zdM-mBNtODD3sl)hY_*#J`Z#H}N&PYz61;EMkB>{N?vvn~_wAw(59WOv@}iu9QWe?O z$pCpH!r1(M1R!~4QqK~@$#r7$C4PAJ|2lMb7s zHE)mgHQ6d^l33Da){$g!dA0iVnKJG0L_fmcB8%fyUQX0%`C=`s0Yys;eSB;1^YNwQ z%a$&iP>Gx%gXizF*yx~WieWUsW&mUG)TwC8fk}N{@0Co6!-p-#k~HvMYH9ReWi=3X zM$!5&HLQc*RHUh(XsuVB-6@Pe+>Q@ubACfiNGKA21e7%*zyR3}z&RQkV$8~fdq-h- z*9CkSX|%#K-cC?OIUD}bzXn9~KNY`)ptJ$eIpmIFUyE=lk9U$_^Gzm$qDz z|4q5e`ph0|GYZU@y31x%=}R2bd**$c@v&sSK00=s&3MrC3i#t!6O$~jMcHtCA$}`N z7N^#@;kj%^d(l-z2fsT_`b*h!MQD4MmR#sNc3hZ|bLQ?h!i?%)?0&;$v_`2gBN_U`jQeWu zUsK193pZZ-u>QPoqx1^mlw}JoHlz4N>dX)QH$4_+0Uc)K?oMqrPZ56|Sh7u+v9Jm0 zSMC#sT_HYbz`DY0b8gv;xFxh?)(6BU^1$hLsk!gm9n)>b!pp>BbIAE*F8jAzXVTqA zQog?Ms^m+E9xQFw+fe4Wk;Eg?Sx^3~x0p2!C_{d^cj@y_rV#HhA}(G*JSI8`bhvTi zxT^lV2%}i-Npm8M+sh}-2{*p|^o=gzM(1O{ z?+VA~pGdFjLfrZ0LQA;Oy8&^-5MutZ7lOl$_q$L}(R-Ocvl$_lw9(_DaX(~2Z>@#5r`=o&{-IlJdym<)&@McNR!11?XR`Jx%_;ewFfEz1F_7r^i8v$a zuOXnv5pAE6vt68=Ka#%vCi(9lB|WqVan&cplad)Ex|vFix=a4u3&b6gjFN^|yOC2) zXc;#KUfT0%*>>T^{=UTLa*;D^c9~Sv6%=m6=k&n<2^uQVTAB^mCBAN!m&joeZh;Y z@!Edk)|?!_efQG-=#4HM>#AMg=swzsV{^?c;)xl36T*yXIu5)!gCn#zXq)l#64tn3 zZ^898W1H&DH=ZLXOk?er6pq0PqKnJ^2(`M>r*m$F8Sie)hLO9?Mh)Kz8@)~XBk9@J zoOC&j%}XmuSDm{8@?92_o~hASS=OF-nZ0x74*mSzxH-2XjK?!3&FNuXx|m1Bm3P_3 zO!GKucCBJ`4L-`=>9mEh_plrL@q-I}4}}}=3a>9}J=SKpKIPaM+~HcW)PG8ub1GF|M~P7y3lopN(F6M;FQ(;FPY~}&=C6CykZCE)8cW9w3pYO6!sE}h zPsy3xk91FIPEx(m8fDAgWi6lV8}fO$v0HdTI7PS+7-3}Vb+d4oVgLFsM9YYA^!D7f z^uU$RdAw?Wmv|gB#>F;{jw=`);l|;e`*9>()PbB@McBXJB+R*$*NC1;yw`>!?#L{T z#9eba2IuS`egL!?`!Eu596)b|8~t$nv>EX@_d%z|)U>;d$qu{8X}x!D&TwNBdJ4z+ z=;sDDQuJnUxG~F?L5Gen#TS1Qm3QDX5)KMqmVZMwsbalwe&rF==c(};9I2{PGf4JaZV|l$}PgXNk|&D2DIe^<2U6M`QgyN6aysq>`q3FeX6j4gMV_dQd{>)4BV=ZziGvS>N;u6a_4veOc9&oT;< zgElcQI3SCamL;ua${vsvFU4dt7E00{;85!P>xYhiVuS@WR_gOOGu29|o)^qi7p1DL zpq8+JSFCK&!8)`hN5ClMO_K*BnJSdcxIX*P@ooWm1C}YThN35bz#5gi(vanf1?*7X zNZ7K(D1j8)x36Q)9ZQiqW=%z^@2;FXI$^gVGu3DZQ?&xHy*=9ShlQ!S0oeK&lFhfV zT!R2?%Zt3mlbF{6DSD!U%Dog26gUdKQbeh)0oWcAl7*I2vU@;DrMlcOQ*nW*kc^dN z&wy$wS1FizJp-C5Z-c zb(tFJNey~~sWC{g4cR*~HO`aQC5fqNp44v*nOf&bJvhYFMy3j7Gk%*LHlSO;L8L-p z^>@X?1{}v;#$!}_a2-k>379B5yZjI~Up@B zst2*Y+egk^TxzVfHB{ctK4&g=!Uc<&+A@QwO|}-2{Jl6Ox7ga_N-LWY1j)-r@!Eu`q(8AxGN z*^`t?9>P>@`yksWNZwt^R2}$F5NV1<- zYK2n6?2nb&uhd9;c<>@v{QxP$c*|ZIi_Wtd-QHxmx9nw=N>ys2y|z;MSKixK)iTZA zN~wn{?(OSj%&@mps-5!Y+q)?huhe3DKc#vp^?^NEsj5mXwGUD4N1z4!IM_!9GtNS~ zQ|B`KXi0`bvXimWK1r!{kgRH1X`iapi_)^nK2s^%2Wz)=GCs1;QEHh|pV}8IHA<;X z_BBdHFQMcX`v%qC8hKb8Y2T&P-=5TdN%l~=t@gu8WmdUu_OF8(OVeIlyKSkl-JYhr zb&}lWN!3tlkNvvxt|_(8eov{KN*%KQrPOw%j@#{cWRuM(pwwx54yC?O>YTlRQpHP+ zxwXXj!Cq3S=x$~zR;lW3%v33*N_RC=4eSAhvKhl>kGb_)zz_CD%IkP?%&ktw1$%R) z5@#}X$=+V6eIGJ)#r}$&{qW6Yrhc*yw)4nvV<%I0?BgM67=@5m%zDTEmYtp$_tuzO zOO0Rc^Q7hd8Dnm(!FpY!PRN27P3K-;gZaO6n(Z#R!4+JxW9pJp&#yL9*OeOF-Avt3eYMdKpFr|A zrB271seD`#VC;hA^Vax~;vw|lr|{BhOF~FI@-TNpeK@v;^i%3A>g!}w4jCFkFMX;$ zsueOmg#NrLt80f$R^BY-HDwA~MjaS)tEB$RVY6tA;iq zr=@de2YRqu$PHPx0(LgG_CktQPnOkvLjIEEcO5DDT1ZeR>#KwsidhGEQo%|M3dyd# zos-#y!6DJ1Z0!(e>0}HEsUFH>Yx7-9jSNW+Ws5%hj5ZA8Db41EoIGd5J7*kt9Hilxt zWQ>o(EXmjwvL!SVBY7hBjz(%nDDQQ)eT|YkLUt-Otu9l$LUy5CHiJ7{beE z@Q^wfaxfI98Dl7p8B2|?Lyjx&GR}gXj5D4T-@xr;{1|dZI?Fa<>Q=~QNsh;C3*#u{ zil3biL+&W=cWL=Ov>V*Nb^I zLyJjEH{71>WW2}}Y-x4bFeU~x3yo8%pHhjT&nuOxREy9`O8wcBXAZ=caIw2o4*PG@}`LmMd7ShaWYq^c>^!;>ncR4-4elu`qjN{@oEOu^3D%UR#J z&_-$lb|+J+iBb)NnR+L*wNf*bdN;JIQhDUh#i4zbN{|QFh7MG!dJxO)3QbXJxAG2$ zj?a_>KKlUia@;r>I#nq!{8I0uSA2QRp~aWF{6tF zvGI`sMvWS=*xLAHHRAg(d}#?V#sXWX);vXwDoPyKp8Tu(N<(J%EYbyI%T=-278R~s zrFH6v6V-s5j}!L@Pu(FsB8V8@jQDb+YACy~B5{7@7l5X=DqW~;W@oR?1moWJy0C5Q z&W4cjuVq~O=F(5xe7w18Zw0#0^)|q_cekmMVB9#+p-Rit8m`K~IACJx1Ym%1p-xv| z|ATCA?;~wMr;Un_EN_fB@e1fdHTnQ=RZpr?)abc;Flv9lR$XwcuhXj6Unl)t4HvLk zS#pk*c>{G#+Bps!e+xf~dIOdmd5`#aY2vzO#6OA=Yi=c05WW6O(oMP(&+I40&mpdv zMVvC7Sjs^>*MxXrgy?C+cWlJl1BpjF5yQq3*S|~*y-O^#n^-}X43XxLZsep28xAJj zxD;{CCgR5`+fMRbCyr zNz$W+6YEK5pZlb*$Un>0liqrrxKDLmkbepaQ)E@5?D<%=?3B#q#gy+Y`gv&{Ao@4) z10OJV*kNL>W5mOEh!0d(nk0WeLCz~561&Tuc;TKyh3mbp@_=QI%z*u>J{6!UxfpdQMNnq@{)6nzj`lm+6l{2Vu)F@)x zp=Tgjr`-8;+eVGL1itko(FU{{Keyvp*gfkSBr7>s%g@t(0^KQv7+m8taA5hnXnPHe zh@!^UJ-+~tb|Poq8}X4G`y74O@BalHbe%Zj#9y#&%}7ht!p57!GvlqmtQT3!2WNAD zK6Z^Gkya%btM}xFOzzG3!Oz`*)+XJ*gtF)A7YF~-^)cYzTU-kG*2~>82N*kx)55>S zncb6|W8!p~M}D?xWg%Is8po+=x$}h_RTGTGjVf049;3#!uU55n>g3(TymyF8ZxfxO zFM%#^beup9(bChc60JQT>{+&!^wfoX*3}JwZzT}xeMqdehqzUk=NxHUZ{pFhE5)f-WR?AENra3NPd9}tYwxwldraFTtXXi9XuQ&^0r;(t{)JK%&(ZVKcN4R`(;EEO(T@Q}!*M+JmV*8S=*flCJAkvLMi1nU+|&!2pPO71x$iV%Zm(B~!^_daO%;d@YEl31I=Y&X{PShX zTqsBMKQ@jy(G?ML)gV?1?h4B*HtP@lSNFM4BP9b2%L{C80bpU&J_a_twP`Z?WyA?u zzWVv%ko->gig0ly*8WGuJ?U}Yu19frKH*q#_18?$2=fa|3%^lY zvVcx7;M;sxRj@$d8_y{Im6xbXWc*U~i<8S^vvq05PzRuQ-NB=+7<{Ot!~ zS}kI*WNP;y-E{&n*D>O?6T}}&6AKL%$v_lcQ`5JN%GB&q~|mx);vX=I+b|4@z3dPY1iW(I0?t@rE}JvcnHqQE5uiN z6K!u3x4Vd4-XP9?m3XWNvG#uA?#9HiZesrP#J9QuFY z_~9GGx6czp8xbpXAr?AGESW%DCv9mbNH2Jwcqfhc(p+Nw?!EYkA^ z67x?bZf{Mju#LD<^d;eYpOX_`mpG^aF*J#I^F89J3B-qz+&!4|3@354WOlwpdf#5+ z@6p8Jr-)x4AdZ){H?Na!b(0t)JHL~i+oQ;tG=})m0^;g>#DT)r4N13E*`2cL<74E6 zEhLU^OteXVSz$e4p-tp3YD+vMONN#t-B0Kj<2SyODmLgVLLhLQi)RvyAD*I74@@ID> zE|CozettymVNWw@`am$hPysld9!xb4q6KO8iQG zs5pxB>E*l#ee%A=_bOG4M|5`CysAGoS?Wh6u0*ze}4-3FUYqxwRf6&KaaeT zMWtT6O_>hIiA9bOTdD2esns8=f46E(JuJ=KV$y6IOZsX~qEmg8D4)03M9$da#FM*; zHFPXGqc&DojSJS3-&>k5s*U|*)hR{tZw}^O|A{zS^f=LPOEO-Pzi14OsYjVhO^EsB zrAq3@?6UuR`TU?{P74pqZ!QF_kT;$efu#&Qjre;UDeE8FZ28 zQVf)no_p%M1&aU5>eDwACyP~Y|NWFd-Mpa?H7%yN?aoChSM<82%DsWeB3a(x7Uc&tCdSBy0*y!?xj>AN{g2g0R}`^Rw~$|2{8v=( zc*Xpm8_Dk_8#>35eoy>Nn@Hc5_wLK`Eb>nw9UnHzo<8E_R?p5(qCY?Wa0kol;wVP}wmWtDvxEAuX?MmKZqi~!Fl2a(e+hJIdR@gBR_s9@jclv zPuhw$BPUqi+a&MRljT=sxlNL-2T`WEVyuDYb%77a`BS~KUp6>Z_A7DDwPfyg_17vz zT7Gy{aXRF@R zdq}TVKL+(8T||-AL)v~DxQZ9jK_=JDT*S-Nfy{1Y`Oj-t`)s zoC!1evWv4-!#&~Fxqv;s;#FQ*-Rsz`yCUxM z)9qGes#e}OU6i=L1o6-wVu|6z7kUzZ+E4uO4Ptl>V$DKC+}H=+&rB?wmssc|v19^q zcsAnl=ZJU0i3L>ZT2|5#CO?hzOLK{TNl%RQ*h0v8K7zO}3-P}ABPWw~r4Vz35nsqh zoHvm8wj?)8GMBW~&O?5MZNva^N{JICx~1s%K4)%xUE-hy#G=xZC_OjdBj?lvVkMR8 zrBb^GlQY9f9Gyf=%|u+2o49W;@%L!rpK5zawf*Y@CUTwqVs; zPW{zG{ZcHHxh*8qUHYd;^HkA0MO(8|CZPavQCnh&T2VpThL$8}r~2q;+5bTPDI)KE zB>iWk-yuD%rRV-tmZ~gHZ*e+&M$T7LiSLPjK>X`plGA4!alkF&Ey>hV40l*f&M#@i zUTW7&wQJW%at@3jUM)qewuIPQJyl!Us!GF0-N>Kak+?)wZTy+^7k1(=xroOO5(~!@ z%L~_ub3&u0NE!08%JbFa`NNyZX(3;&khSN9e@Lgp?D6K5$=;Rtm3&xn6zS8;i6>R| z*J-5VP7r&E)9oDTAJy+mZjgRi-kz45v?GN$s3~#b9O56cGmCuKaVt4>RLfRba$T)k zF8UkMSEVhN`mTz4xsQ6eZ5YeGss4@ZOnUcSqE+5_S!m>H5FsTjs zqlMTG0CbRA*J?ZIR`S4Cvh%3=;-G4OsM;sX!tJs!cNxmJl%1p0>I8A(#OWYTjfs?T z&m$gQMVzP6^rgm8Hqq5Zf3}#pcf~2F)?ExGC%g2#t5)w9KkrcTqh;qxMcTKDwA+$- zc$vA+M0&ht1UsI4}?(WSH(al@!vMvDE@Zw*UFzi$e+bkS1Z-kM5EHB zTJBGwp0(2OgEZLW^J$9SJnEM$4Jh;CZDNPx#3DzCt>pj2?4(C(l>ICZ=Tq%lZ<1eJ z_OueG*aC8f%S+4Ux2tMhakagb{8LqQU(qc#QT}`Bv`a$=)%BL@>MT7IrROivF)HO! zjVmNSQmy_-t?sRHda)#R_WPN5N+bF=2kGlS5l4$2C;Dwk#!E7<^fZv3iqhXx`pc`A zU)FKyeaRe=Or^HemR$O>OC{5tnxx`PU8-x2V*b(WJ*aiLcAre3MA8QSL4IC%@`#C3>`cbz4zaUUB%c z;_%^AmWn$}%-)dLUzj5NOJ!rEr(tI14#`8zBVW~549r$Lg zzb0!VekSLUeE6B2^aUM%7K%P9`n=?`NLzE&m7==#9Hjg;)%dPz+%K8G)Kf94F_UT> z`w}Hj|3us@$*YnqBHNlvvbrQQtFFqj?Xlz^-Dj!6Dz!wVPD_7~N*z$`ljZ;I>bvzS zwMd$eNyeqtSze)@b$5xsi0)9Dba`QxlcaMVkjzNpc-68&@m5mt-$wC&Q^%q_qR)p= zGK=aRBK}exqgILkoyN{SS#n>NY*pV~SKrl^WWb-3N#}B$OU4=7sSVku`6+;r*0vxR4cw!D{Rv6yflp8z}&MsCWI>Y4b}Up>g^oM z-1j8&vt;r~W~qATq#21))uLKzkxgY=4`Qk28U+pJk`8=8{8K%iB5kXs?Y#V!McTen?rg=w zKE=cKpIGWMMehYg?;hpeQLd{sbH{u}tS|l`@yo9#=L?nkMWwz^Am>HNC&~VWs;`0tWKBByJd3^9o47msNPZ@8zqmmm&|y{+*P}3%Kq17{}TCs zzk1|>dZdMpR8IMMzT)$W?0HG;TCG~XS1rw#)2hpg(xdW2xZ0AUUcP#VxdS^9_v#G3 zX*cQZKs;y1eYV8ZeYoeAm^wQ7IGzbs=~7Tn18vp#{Fl%E>c$qteTE`qh%2nb8$*a| zf`}hABYtv&*rhEo>uO@7w~1dLC9Vr5ZWMNGL^@fLw@Q#cb%%JYbiryZQ>S$0^X~tC zb;swkxN^gMuKj0Y-p9x`jrd}mZ?(pq7x+xPT;+?vVOoE3w+3ZKSNs{AiO=5ycC7Ib zcwFn~KB`)*8rEsx&WZP4N*8D=Z2bLUN!&BZ{ya4guEzBk^J>I{GqWn`6wwzel?A6} zP0IL7QpWo{{mP|yw0G(lmOWOcBG6pj@pT2R1jzlM8fxFVrI!59r?G#}sR;S2^NF9F zCr&v|{QYNQ@fpOV$;3ga#18!npKkg^qDnT41$#D(E=|+6F1Mx>`Zo7kYsfonbj}r5oBVJiY{J1FbdK+S$F2oM9 zq`S&)SB?9k$S*6MSL>19rrg{r)lBkR_mIC zjn4#QYKcaO%<8eN8MnGyc%>J|(JN7m_OydsVRF5DD~#VkSi9nl_NimqLv!O?#2iD3 zT~di9#9s}5f>8zX2}a|sTs>v0NNv4@#f0-Unl6^<;x{6?KttP{#H;g(j<<=64-gL@ zBkn3pT-S`4sUh)&dBiy?)v7z`BjA|O*hqDKHHY-c zwZsRrh}%~Zvr2ND>Y6)-oZON>T$}WvQ^db65HHDwWur-F-a#xrnfU7vV)s?VURQ_> za}n1H+X>f4lhasjysO%abtUJx+Hz8s?3qAL?l#1iB>7SR>19^p&OqX-AYv68v1BkY zN}2~OBE3v?O;s!Ei;k4G>5ZAY`XceIoy410iK|rh#fhZ1t6gW+>Ut{MU!MF?ty`v+ zj#Xb|8AbVxjfnRy6JH-k+)|WyeL1m<{LsundXcn!rn(w#B4^`y;@3xsEtOkRKEEN) zY?7Vx#cwXnoi0(bW*6e71H|{0J6X71xatP^pNPIHJ2$JAx--a+l0P%cGe0*Vr?OgI zq$%m!YGctv(wU1958ol$WYuEHY?l7=(!Z@RbC*hgC2_i`b@A=U&n7)9#9uy=oK2#) z3R??1N%Lhz??uriWZOkpZk|~Zj1Nk@4Eoi||9<8gUDgT7muvEj=GM4-P>rP)mLVr+ z^=cgZ7>QWpt=uLWq2~E(^HR!GSVnxP^@>Hyv8x%LSGrw~Ra8bWEfDKww=d|SUps!!yF()92n(OqQo*(OMFHZu0x$KO8 zzCGw+RVh_2UmQ;iEk(R9&U|r7CX=)O6!CY}mHh(glCtWM_#0HqJ?URB`Mw<} zvoVo)LU=@2x*j>hmlF3&|2)x=d&x;s?r-8;Q*Pd6h_E5e8x`c+XH*F0F)ydJWWp6H{Aj_31UNKE*pJyZ68+&ow=QTFlupXS3dw%%jg6}FjBs@_&= zSQgz1bDP(+YIjjP+VDa!t$ptxZF|c?ndm^`+0w)-y~0qIbb{eVDI9zCjt`NMz;^`7 z^~h13bG#hYO&MILU^TT@^Oat?pU{w)Iu-RMriS>%aH5OXL}yDM$7WQhJO2cm1?^K_fZS+Y}LlJ2p7E+8YJ5CK3r?9;zqrQNJYc+zV zYpzHRR@cA4w-SCTUjn5Xm5&9ksGb0?w*9gK=&V`~Z|1J4QWKmCRq6syz3?KiboFMy z7Qn<*%h4|_*^RPmTUF0)GzTUa-(715zI9zk;Qh~t7lku{xSKbOqvK-tZq>cxYh3%f z@M@TiIL1P(ZxHttCN8!ThYG8SpEa1Ag+at`Bws=Fhrl4CBqB4=Xe8{q$v29vi9I3T zBB3WN-+!SW&>Rcqdhayz>^7es`w8f^ZMdaBN?C*Z`^j@$bgniC9McaqZW^wx323 zkDVt*PbOX$eYG&@98Ti*q8~~!_eAP6W0Ll?Oue~vGurYo)<`561yU1`yFQj9*NjQi z2GeqXYdcll0ZB%3fHAwuUSPGV2Y}DE+-visB1d3PUtyxKKYR83Jtr2W&c9FGuq+m3vu!*Lym9z4aOdWGz*lzs32oP^1lBM)iK!77 zDG5fQw|0dlrXJs=_iJ#jENo1y$N5-zm0frX_*iwdy@D^Ei$r%sEt^Xd+wCNN6h|!C zli2B}j@8Q=7dP_C?if~>2N=(nWo%E9XR?=NubG}?40|oy{dx$j>Tu{@`q(TIoudZ& zu_*ERmx#$diBp9Y$L6Tf)zIuxIn=oKH>5E;7St0M$aIx!iupwYN@wZdNtHK#4N%x#gY$D8mn{-xS*?^w* zBEa@JO91->#saMY3BYh$d0=cn72po!;>n%8W{n7=pHa6)apS9b&4CMW1}v_*L2+XS zu9}M*S1z^2*`KoolY_CNtMUbB*>+oT`g~ack#7=VpGLe(;*)u)hF4}>J?8#Wm$^Jj zW4|vQt6Lv^1#}`Xz<4cyk#OBgZF>TJF)-^ud$cZ5_~$Cp!+Q|jKwn)v&eI;7@%;8A zXc!jI1-Tn6J%Eh@U-gqbk6hF8V@>eRo$)0QXAnfA%{Z$0+uDGEkY8=3wZ~vdfN?tL z1Z>-283r$1zn`OOaie_#W5DYTzAv7zWT97sFA{#o z`)=4LQ*XWflQuJ2zLW-A5X*iMM9p4pt)Sug?KT`e+6M6azFv}ls26qy(W-`c1I}g) zdxLk_?efu2g zEc=0&5%C^r8|Pu%sqQI^iX#1og?M8QG3hJf!!g9-qlvcOd~?d%B5!Q4T_3~SW>l2j z&#PTtX%_Zedv4w0k8BJ(@xIZ z>PO$eygi}!4PC{M(`jfJjw*Lg5P#?wrellA&kauP$;2P}nerSsb8-^juSZ;* zOstbaT&di5qe(9i9tC=9pFO1r_-#iM#}_8Pk&`&R9&uJOv0@5wtR!=_C;k6WcHd!9 zTz|mm&$OMH-8DfYQDZ|zMMY7pF`6vBE_Er=Y}jk;1(g*9R8$bf5(`$W5j(cn5PR>6 z5tI-Vqr?_}M&o?{lBmKX~%V_p~{4=1iYWYEAzBLUS#qxfa@z|FfC?cfd;W z-|rrhzujp1RW$u2{FlsN2k-5lZpjzeF-VcS=vb$V-k7t7`eb&HEge!?w8GCr)^-SWEwQIzq}hURI|S zUhnuXhrWGAw%?lgFL{qR27lh6CH~8y|G&0Xl~2ao|Fdnv3sUBP&;M`Be5JLy#nyMY zKbz3MtbE5k-{Ak#694_&wvYI~|KIxU%eBLss`oirJNRAx8L}xjG3`2;8Eoi&mYfv^ z+2M~Wpp?3^cG}_(f(+G!-!VjEsmjz_56U?nC4z1|55%z~P)w@P#G}oi0jb}Z1XN6w ziMAHiH%X`;e(e#VO!PF`-Xx>ZR8~~?Mr)IT9Gj9@3fj@Sv&n$+HJMCbp>EBpVt%HY z=&&Y>=^NC^zA6@LvPF9|4K&q34$VodjN8$AgsCoa2aR9Jp?WA7bn@spQ#~{SbZ_}o z(|2e!NcVHHsR23!aw_@8)DTsIq*3EcjghehtKr233E3fMkU4LzsR?qYD&gAY*`X%L zpNjM@hc%2z>3?o9PC1s!s*F9i94i50hxaZvHATq~yRvsV);x%HtZ){Zp~WCmg$-(k zR)L;9br$T=M$rGB+TgD;<}snGPjgJoQ4a^&XSgjks5uJP#Gw|bKUF3gI%lJ)1scX; ziet93&=QRU^~knCEzy6VRyP8X1FDIC8yc@arTYzAECnpLt*6RFJ-trxZBQ}9+QjFZ98q`j$#7glkNA^V<3JpawMCae-{M$X zq_klv_x8^>wL|?tC;FenS^;V@>axiRm4jN3x`Wl;k>pE43;Z6L+M{%;6f|^Vg~=Il zZE2ZUZ%mz$4OJnQv(OdUQza?JHXlu0Q4FXqRyUMMWkpZgOclOI%Ru36IP?SBLzRW5 z^cP)zKug<^8nUr!ySSjEnwq+JqAQx(y7;0un!39LAknERpSw#ia?ljyVnN+B^>PVE z!!^ab^uo`Vuzb_{4|j=18#GOF>5cYivbyv`MViuG2B2q}7P$<<-kH%m7LT5n(TO zg#;7~n)Jd3C7{WmE?1p}X=pCU^(y|(DB2DBbirAej!uE}7x7n$&|jcmaXV)qsS~Tg z8E;23P#w?@csrVbequtC_FZvFME; zDmKdJq8n6fl+Q&*{NOoRS~AMhkqZ?Y<@1mah>Y?DD4r@49gex>vH-21B4hrc%R>Ak zo}?5q=3lrhMQt>FbXkddXi{9)puU=HT{oc7ni{)qLW?xDaovj6YwF~>9o^9MlWQI- z1x@Sk<+=;ipx^Y*M$`I-y6!^_G{v|cK<=6bxgJIqO`}|YLsK0eY&5!(V6mNL9w^e(qTF6sp&qq%7l{N*1~nq8=c!Upa$~7yNJ$%P98nd@FMyXbZ_}m*GuRvNE&sd;T6>I z2URBXIl!@to>%4Fl^8tMTeP0` z6iQ`9XYpRG62(wu;x*>w_7W|kBI_^0?H#(KX@J{DRIX{X8^^VBBW045)7&Jko2FDZ zg`1=)%gw;0XI}2`{;!Br7nKB%I500zPgtAA3xw~^gnqJoT;1Z}Zk$FvwyC?S^ z6qOU>?#I>kBc)`b33GpJ)GoD#9n)0DZ60?;Q=$6;&KODZk(6eBA=iV7&8>^LaUe3c zF6K5nwog* z;nbL_G95kkb9JfMjCp|jor-L6Hs}EN7n8Eb;w&8G-cThgCoTB9<@nQGq!gC#5Enz0 zjjmZbc^u-NQDvb+ExUUh<_vKpCE3PI9!I#&RCJq0zj0nn_{>yw|BVaRWaf`?12lPg zoZ!Z53idd~%>tb~8s%|@%hhzG;aRQ#r2Dy#$2rcXH>o`Zkt2cgTpY-$WT3|dZltD> z9+$c4n#Oxv<1#cQdfejHgLqu#J+4wy$C~#!Qy*4?G%CuYh)d9Pq~QZD5A<(Rp!@Hf zV_%l?-y|FKkjn)<^Yrp4=Jsn+-5+y>nu0z4;BIL$^W|JQlM<6U$Kxqy-;b853`kYo zE4Xo>nADf`|Kc`jF*E<1d(DKJEYI+$~Wh%J_@rLWf zV)#t|7mqjG3J^I8ddt-vKvQxjkFN1}%XI?XTb}Fj59bb&My>JqA7?j^q)b82Jb&?c z&wV$D<Ru1TFCWTEG3TA| z;6d!@iRZV`7}<)?<5(%EE|$R88%FY3(QLej74dIvF@?9e<)Py}sFG0MHNSf(d_Sse zG@*5whn`=c>6J$fK1b6>kFWW6npDqPylyxtlZ^RW9<})fR4GbjRxQtOd3!3W@^4lh zthNwy&+%}t!*_;QV9qZdb@(4y43~nxTgL}ev2|3J|8gDG<>R1~nAC=zb@^n_fYfH5 z^>|?fX$!eh)7rB>-wj08Uju$N=;YD%o(=d7pnJ=^csAtsfTU6FJsb0Xfy{Y7dfM@y zs90ay@ybZLwDcU^jyHkGjM;>rM8#&zru;9UDQ&zwoAM+VJ_@Qq&Qt9*kuy_G5;+(B zEOPewS!C?C;MdVIlW{NAadY5LQ{ihR<9gL-&0hw2jSKK>&A$bav${6?e;{&J*QTm= zi5$r}@(o6jmX&dJmWO#dYB6$r)|R&!O=4N-O}|cjJBXc>$#I>NmXaLTIrEV;WePsZ zi}viq52Rvyi_ZKwDz=yD%x?pcKI_7lP!(|G2)---fhr3PF7D&ml^4gb+W)g3?%9Jc z2Q7Ru+0&J8KaRvQk$&Z5Pd{E9&r(k5pYCblFH9sN`;}FmQT(@)s07Vqyf}rGGOd3juSC9|CI_#X{Af*1UP=5tP2Id^@#R!xzw)D33O{%%DTVE2 zQu(P&%G^WVUa9iS(MwyMYFz279IR z6F}su?fhz6<9t4e#qbsv=QW?tr%FM8nSbA4M5ZSKleJ$`)PWQuX)C361>mwb2NSBeV$*c>09rM{3%U#-k13snp%2a z;cFzZ`lj`7?|qGLz@(I2?c#l%pQPzW?;HFLDl!H=y>If(l1V-yi}zi=qb3{oB7UGI zGyjkuPsPqDOZY`BrW_g8+q;BcL1k4=4~xgz0I~lHorOpIc98zG4SK{EfzIKx>&JY; zEK)l=`+Uq_NhKm{y1QE$pOMByX18*_>g=;SUYk$&D>O#d=1}hnUYSi&lC?R-`)}S~ zQ=0c%K1NfP_j`V&rX278_-&fDcyq!tP5Zn>;e#gp)i)t_PE`%(yj5X1Xj=bk_`}#2 zH2v=VwNRw#Pw!g74|7?*Y5iY%+Y0`g-h0;(wrCQ4>IwOp3_jlpUDK=b)%Iy1xHI9k z`JGQgp`WIvK8=JaRAl|N_Gv66Y2uKbu#`zTalC_%oe(*Xlxal=a1YuE`Ba4{?_n38 zrqxPmCS0a5HcQzHrA*4E-93Hmg@pO6lqGmiX)he3Vx_bYZd0**Ern-H_^j2{r=`$# z0m;X%e6hwa2Q1QqQc))Y?kUO7#ET<+4}1$)YatW(@pqAlMU)F zY}SPDBM66>l-A||pC5#ipe|+$)&(lIR(c4JLH@m?eR>MDvq*h~_-MPI&rj9XyPHr% zW27x3ecXkai)hP~(&o;Bm#_l#V&!-rFQEwJJ(H-xVpb*@OI|`Js!TM*Jl)4z$f3$c zEw82e_z3wBv-Do<<0sfScun@ z?-MFqU_w7#ThiPjn3j>0DN2(QJ$=FiZz`+O_C#yXFd-OXaoNB5gbOjC@!2P_&VrI- z&-z3NS0Ue`*nF&e5Np|QLXAkF6x6lfC7(zkU^%PrmxU8*^b*2BI~HE@=_M=zeQN0} zLMsn^bkk>`Fj3QKmmxx$riVVmgi=jUeMSjAR+1V>DX)FT2A$1Ka_`z{v#)HKR>nedj1oGm5zt`O?4qiw;$PxlJ;RAgJR_~Zzq zsS42J(fI8LA&152wz)>w#PTU*+gu~;gjlVcIi|Hj300Z8u!!g%suFcqqt zP^F+&%a1f%FPzS0DPLa3&t40!sS3C;{cW+{LTpTb{3M#7Y$7R1Pb~D^DA;YTlF4I} zP((#~VzuvPVd+*9Bii7*ML460L%#~Gx6yn`o!pMG#LB%6_~r=~&_71=OzPki_(5baIuyR3H zaBR1b2P(m_-9pD-S-#G5?A`VV9w0MS1So4ci46fAqM8blspf&=saAt(+mn1dLG`Il zf^JgX1U;bo6ZH6!v#>|_ALzv;8?;BT-ND+quKzvXy+T9Kw*JLfo}gjz_k8yW0iY@I z#aI(TKkaq(*)PlhtzPad>=)8N+n3v*{X&C0Rzv+3&O*Lm4{FuI2IUL8K}&G#fN&VJ z6~_(;emhyd?wNo39uzDf-^{u3&SRY1j#~ z-vgl%G-5%lUy1PSD2b(@5evrnl?ne*Wg>EI`>9|&Mq-)hb)Q*&6+(mKOya2wzh^>& z0;ZQa`~3b998VFYprOx?_`MSn3afP9?}LyI8nNKE-zVX*rV>9+tOQj)EWxMt>8Dw~ zdk=5>3F1#@s#M}9i9S?T6nvuGPbbEJTCE9m*NOR{+c|&x$)f#PlFv%_D|#^zwCmA( zKciR-GCEEbz7p-vv6Q)Z-(e$mI?wbbpYyLJE(PU0QvGX-?iW~WbWWiAw_?l{CbD0t zBL>|dB720I{`JIZn(X`=ifNkK`P+$0G*ks@plkys4|hMIL5!V zcm`tG<^ld~#NvB2B|e@X;O{6_Qn4%6ZN)kFNi0RVwXvhxR$NGBRZ2F#uGv=n1!6G? z)18B(M6Zb((#Cr=T@i&OonkFG9@ifFfx^`3Bio@#@eUK7 zy-hVch+ppUI*MJ3*z)C7j`Z&+_NHRnQAcqK6lG|0i+i@3a)G zS^jR~1Wn`oJ;fAF)BSzKY^qGuaa5|UpO`~sMgFZ<`1^}eF)780nqOV(A0W1;%0%;K z=K2SUF(CKcJpT}J1(g+b&fVu9Di)RCY&f4^vk`iW*!>Yx?`9kd7yUsea)`dX_Yy9C zdG94cJVjGxqN0pE|48u;mMr~ z1D%h(>K`ZWEoU*l@{WIRv79Os#aBM`?<@L0VKLvzC;kJ(8z9@t6aIrm-={1VjK|VY zaWv>m(JTLUD!p=NZH2qCdrl7bJEzJqyBq}Sq{mRKa zP4s`sVz*y)HBT3lsqpcV*<_v}4u8#J6U^S`L~%V;8GhCw*lZPdQ?au;t9Xctjccp; z<+++wyunJrqdeL?Q)Fi-WXzlSS>m)ev<9qvpHwkLlMPA}7iq$8l8GCclu23ReP)Y! zp!BT%=Go%+Z)qt?q|RBGBf5hI>1@y(aUtk3zD7M)Tmh=U&r;15i$UaRyL8d+A65!^ z+Adw30Ls5K!aPr$4mx*f3|1-?J8zsXu3|BCZu}(k0&$zBndVH<@g4LaZrLKS?*E9` z6CsPlV5$_9rVB)i#iPECEIwPsMpUP`NPJeXO>7DBFFtMFF1Cl1UoW_1{#A^I*e}JG z%sa$kpnD^4n)5XM=u~9hsp)9j$L3v{`j$L3@78q9@o)1Ut({Yf-d8Q4)hEM5jp4}4wouy_Yj{ut;i91-i{`wnE^=oe^%j)-Hak`%Au z9o65&si27AuWSA$CPT_M!|<`9Slf~1YZ?c0$U8_DOzMIDIP9kI(|q8$d@wY)5@ zVKMrA@@26AM6Oa@5$}M=^T}7l*C6tI@>NlAre$*E8RY9?8xVO~`G)8XB2O#d6c>TW z^|RaJW+r_7%xJnJ?gx=4weO1eAtiZs`96rveD}q_XpF7*`{G+ot9^?^u_I{x555#6vtUn)!J*cwK;nMm6zl$qaN_qtUuv&e^qC=;u8dm$3h+Q;s z=#hvYmcg}K(O2c=+#_)*iz!(Tb4-uKGoTd@M__I0Oj5GiAB#t+QqakxO#@2BDXhuQ!$Ul@F@54sSvMgvcb>gzhP3!Vx5KOqOlt- zMR^lzgPx0?RIDv8#6B#BOEL46Vx=Y<_m|?*?`b|9tLOekbnVVcA@>H~iM~`;h1?r_ zCx$|d+*ACY7!M-%6#pkq10~_7(cX)*K-u_dwD;ms5P72KU-2}EJkj&7_=+kM?b@}` z^g;X=6gcZC|4|h2`x>O@$GW=*{3l+a%ESr^;3a$fW)9gp#=6G@=%hZNbK?gDDAFBJ z$%s(_dg(QO*MgK%f@TNQmJ0CO3MAjXDN6$CN*_V5r>qL7FWI=TSZdrsRzB);Fso2%m_R?!AHj>**bv#HZ zY}NhduPcLM6M@ylj1?-S&r|eT_C5DksjTpA`rQ{+*7jgq&47Y zBwp74QNoW!k^1m65@!AWtQpC1PJN(msRlCl7D z>c&!%8O1COXTmee^MC*;0W=`BEFe&t;LB2)^WFpmgV>A`ETz#HTVugeF%?^5VUop< zHzVL9n~1UOwp(A4AK;vO)7D8%_ABaj7YlRcYxMh-G0h#kK>{ zB2Ypy(N<9145AYt-%_I2pz_Dg!UCxPUvVbu;qS*bIChPS&B7VdGpZ!i;L`NKOvw~S zQ{uf-nEOI0U(?I_S<($qL1`VgMUr!Gma?GK%x6n|s4`K@!?OaHN=rd=56=r+E_wGM zDdD(P>d=oUo4#kWO8N+6wZIT^6`eIsnS`+GyG&od^AUb)#vs^Z@ko>YBhU(g!Nm>a9}c z0J;n);OfS}t&-h9rbqc(1Gh;Qs%$j&>cPM~>5QgM{7&fur1bDV9=J;?9mMi=#o8^! z3}HPHj09}rWTMJKp?<}m)HUdLX+0HNq7n&>BeiFu8c$6@CDJ6&scGh* zQmFt`f%T`e^Ag{ zDIPT8;`pHdNuwvRl$lr`q~xhYzK$=Mz&}rey4K>1?)W)^qnqVQ@VRY-BM837FUBB>C&t$ zUsqg86Ww9Zl>T>vn(8*qWU(pz{|IWKy9bKOyc^`8`$N+oL5{jgE#>o|cDlr5maoU) zPJDZv%`7HYtPZ;8RBTN<>(~`RvaR5+H0j>67_!-vYU`{srjUGPT*Z+qE**7)K@EL6 z*6ge+regWJ=>BCfdXK$}F3}EWgQJ-)Ix&@$Vnz9*B-BOMiHbZUxL4m*cLPMumb&Rm zK_`#C4eF+=o5pItxBTCr?{zCc(x|uiC$b}FvzYGZ=0QDlIUuJJKDeiD6Nnt!{G^*S zho;2GHcGImDy2Fgl@E5&-D5F)ov22zo9+n}JGODty{5{>GlMOT`OGDy5ZMKL=@K-x z4))b8*VHlCUze|`VNihXHK@DrLvXOplFmwL=XJ{^OqUGGxN*xRQdbJ9?d2I9tuxJI zDfhSY4DPMV2PMt9<c0NnF(!(=&h|WZniJB(`1&`3hgRSC!fk=G|kdwfZnB#3r^7;&Sdqq?Qad9qjOlq)VkCfJYUx>o9XL$3xgNxVnDe^bAq#V z@0O5Q7W$_D?%-c^?UxZ{W0eNx=niSR8nj+_PSdgAT-|L=6AhbnrBqo+U%ESZi>|>h ztQ37|Y2XfBuBNL&yLJ0C9Sh#4JE>_R{z0uPRGDbS(X+t^baty*%ckYr3qGRjLzRiT zl#~V^(=7t+9{+c6f$lPBg!Df6w5}5JC3)H(68tkUP3G(DE<4n zkViWAjZC!y!b1MkUD(95z;9T{Q{DP4MA^u$|3v%~Nq05P4EbC4C&;#RV#q69gRLy3 zZRyOAw>n4A>=koE-s#dn$6IHIyw@dcBPrQD@t^KKlalMZKIA{$V=Ak1$af3YGl;$5 z1JNg)xSiy)qPD`$kWadIR0U}Bmct=}T#n}|a&AcW#i~4V7ZID!R5_W79r>&Bd@53V zx0(idsU{m#LtewAggBoI`AXgldgFElYbS`DqkknI0F^c`=f0AUGvP9C;gkUq@0 zs!5fixS9h|L%BVu+iRkpAbTobPzY5tsMo`CuA$r?RNA6`XhV4zD12-atg)aQ_#MB7 z@>I~`D?~{ko|ZBf6!|-eWr3Q-3{e`&+o;G>3N3M&b&s;8owcT2Xd`(rC<{Nu-AG2q zNX&{FFuueFo1$6CTH>^3Jle!;68_P>T?S*o#vAiDSO|=u0Bz038%fEs0 zgIsaG^PnYx(T2wI9Z*KZ%!ZBSua1+pWTHb;Qf(W{b*b=O(x)9&J2?`h;&;yN`~l=W(KFOejyb`W=_bY7;pPG#!`HMBWBEj%#lsw?E19rHA8h z6v#PLDQGNSe@)~*1tgY&R+SN*0bL(KH24&YeK+!J9+y(c^k&3_diHX{X;!9df`4dB zIr0pX7hXpW^0u=~9jI2EW7<424mrs77l=|&@^GS(4`NkuB9h-a}CCNzb2v1@)asLj+DPvd0az^V*mU{9IHcRRk}R4 zV%b6L`=pf6jGa(GUw5vkWVqDoObiofFzs9s?YIE2e1}_ zE~k_kzn51)zK1ClSQ{YUGXHX}yPOBH?fw$#E>F_4p7?LgvCtpnL@NAl?%G1E*$_*{ zOVmSN0~(r1v<*^D$&^qJ`2&mLwRthLr@Yue%fzZMn&ccR_H3Gqe1$3r-{rpZor`?O zNKz)D@~yW+UFE@F5n0h6IruBR@?lVLTcR7Fv?QVrpwVN9&e)KAnP}69l2CWqt|rrd zEH62pDhZLf)mPpIBD1NlY*UNXPG(aa1CiMj$G%}PGMoC!@gOpr`pWqrGMoC!#@a09 ziy3_!eB}fxE9yBi5c$caR4K@P7|~%{lG2L)nIrRlawSy?YKdpC0J-p65=%iUo`Ztr z%b?KyM7OEflX1avDODMMP7Z&?Qhv`;;=X84ubP9XB+!)H}2uESg8FRwv_$tIQ(dA0tUkCf9u9R|yMbX6(n z#fe zsl4_KMEzv3F6}`@^s>dO0V>$yEcBOcL6^7Kp#E|r(8Y`ILgVEYpx-b4hvfuv&v6z8 z$X!8!IW}m3Yyxe?`3B0~pu;%dKsgw+Z@Od|B=-WHn{L4B2YPxv5Dk`xf;jxF?O=H< zRVMm!cbG4+WGQO^=z z%Xs;4L)sH~OmJvowH}O2(lMR|Fr%{nTP>dx> z&Y-d?70vr$ErS?2-c6R*K#bgzN|v`kjNDtACGVn2qHl}Ok`J*Mu3?BJMZU*kw3kxl zcaV>~x0EVNO=w&2otSZ!RJjRN3chPH)siMVQIY30W?E*0*m?MD*@ec~US_szX8Gt6 z&6Z=J6w>NBay(Tsy^}Ua9{okWx$*_7Y&0+=-7;5ppf3bwp?_LrS<+=MDz9~{ofK^EBI+bTuO#~CPRmnje5*lZOM?|ftGk}v}DTTGD(ar`$8H2ClctH zR4HGjLatlDcFQ7&6>=Q|_FJ+wwF)?GSuUTarI0hCOO{_~43Fy?e;&ALSs~w}u@q(e z&w*%#{0Nltvn^HysP33Rv{HTrYB9zZ>jP*V&bLYy7m{|SC`WO=Ray<)*g&*e(|w$B zwOj*I-Y6on1^rcIi`59Ew!Cl2ky}t%m2X;J!XnE~T0JksSy&@Gv6QIOm=enxxre55 z%UbyW6CEMzyJfNU5FT1-*(k4|%0dlW{$t6NZ$RwA z_5UoJ7TIdZR@vy`-xjI%~z`{f-}DasqS=3)8r zek!Z-pIaj=x-#(_4^5W02|FMkqcL{h@Su#A(WS+uIENjSn=>ilH=KpTa$72^((i^1 zIxKgA*!CNN=!pCy#E#*8z!BM-iafp1ChRwP8x?6;x3Ht~dzO!mkmGXQ<)pqO#dm)o zIw9MEV)xr(wW3Nr8Irod$X?f=t zu`}`&EoKTkE4TRN^Ri!%`!OkGOT8oyrLrn-517L)$zvf_+WfxdvOE=H70oYUB|~g4 z-Zx&6)2Wh_GuLgg7DJ3|jaTKBkgptXw^!wj5F^{lHThSFk$u25IiHFx?R9z5imGrUZvegZwZ-}sMC!XG?*ozgZplYM{`gIa z+wy5p-wihCw)`HXcsdJrWPT-Ef8Tl9pgXdGDn&Vm^WBxd0X@X|?#iwpU!3or>ORVWtLYI);WlE zUscXMl&?X|XO)B=%J(7mZgDwREI)>rnk}JX`5DAE4eA?KBEN>%p+SSNK2jBMUeP1N z9?9Zr(oQRKm^TjV8>#~C+`Oq_kL3oS#Pp=FKV*AQaQd9EGT9NdEj=^rPq`DQ@4Tg9 z<#JDu&ybw3r?LkXeh#qtQ@%nT4pO#0<)6v3L2b9De)E^Sg35|+%_!%d%iBO+t%*K> zF6=te@VOkE!&*IM2>!hVIUV$TUT)Y6`BzOl!v2p0j)|uidAC`E9K|( z17WY_A3(RLhJ&WfBQfJTmNMA85X*5r)4jQu!`{egpuG9_!~T&gL9ar}!`{n1HnNo8 zH$4#cLEZ#v*NkWn=xZA5n#)ptM`Z%tE+r|~gEDD8w27tcMPvRTulXe9JCKzsVKYm) zEQG|ewlIyHOSB3UN>lCtZJ;TC1HGXs&w?(}ls7>(p`?^zkd>zFvz65_n5H}fI!Md> zb~}sxR!s8wfaJ+U383eWL^i*&l#?bA<$+F7Mebm+rL?{~pbT1{DUZdj)A}auWV%D^ z^WMcIwk2g=0WD-@?q;#aRBu50Xbp~gSnQZ9$@dJ@oYt^yFN=K&Cb6`AOcQ9#vY+Y1 za1!&*XG&~G^ctjdA~GIiu@^MunL|v=Xv&1cOwGrVly^WYZV)Xx!eVdevRjTa)hHpc zB2aVMyW@_r*hreM2(*hW`*9X~PM7aBXeX^N=LC!WfVZ3vvi(V>-E?V7LF=fLQ!Iw> zZ{UhycUJ5ku#`RgMu&G%o@km9-d(BtdsS>^cn@W%rcV4%$}=i*W-~k7q%?g< zQWCWZb5%@K>>84rGMWlsqsCV`+>}`?r80cb!f-cb9*ZdngO*}tQ;{boR)@PQ*FZf( za>KopTE(P>Ow=tjH{4qZp|YZyAvVZINd;{mep2*Rj%%_(X61jNRfD&M2Pno8Qi>I= z8f@l6lm=8OXxNaw;T9!G)3)$PWsD|^B}Un#$;`(o7c`Bt^ie*5LPPpl`YK%>(Vjq| zxMls6IM99Evi{0MO*UwtvIz8S%q7bprS@Z%@7Wj|G+0RlE&2J9Wr*@llMNcG#FVm> zGfGd2!<56CY|u!>?hh8LGxm~Yl(JNl4H~U{0NLSuKP!F8SW3H68#GS20}7vaEPTAu z<4+bNSAQlb3#i!jtO?35RP1`zLN$N28boeA?3o8YWi7Vk#l>;mv zzE^&gPf$)mDJ11I<+_&A1|=$wzDQ|RD!)iMQ?V;2Eo0|Zvy|~qh{&-wei}{LOqHVK zCkA5e1QjLPVjTqC!_Tzgr|dw_@H1^G+A@&ys#N7J#EcVq)ksxJK#eB^c&2J8$vIb= z@(yCpN0oDF3VKTWOi@NlC{3vg>NdKZo2}S^LUC-i(v1p_!8NzS=P3BrC|(9D8nF5I z@VUxBszR=3Nm+QhvQ*Ra@cBxCrhmdSs@fuvYe)-~N-g%X{vzeeD@u!%sw;_P`4%fx zR~gANELP$xSgXmo;bLVth@2ZPR>p(K`Cqm&4MfiWvXwL{cGYN!@(h$W4Mi+dIz1z0 zW}?x(JtJe%VoNjqR+~FP}x$*iI$? z<>!9csT>25e%Yy<1(AN)rCbG(e%Ynm1Cf5&tvmvee%Y-&qhjl5k22yFtpRUUwrHP{ zr3t^^p{$@{GxUDt4yf~_h7ku9@iob3MNTCxBMvJGROIPs{1$~$_bn|G|BAJ9#4+Wy zrXCRmiug}e%p>BoQi}=KZsyM_4xbfqUh&Yxp-W0U=_&JyK)!QJ!5P{iDL7f)ew(WszieJw;LPrr}8UkKF;@4c?w$TF*f2aMf#WJ zTZ?0riXBKdb8N&bWfiCaZuMK`49HPVi1*mhyX?vY{IDiKR5)SX1=_ z71_cUM6^^VAaX$_MQMTWbG1>YQ(2YH_&!$~H5FphE4!(V>H>&mRMz1g)uj-d^`e{F zR?UIf;um%Jw(4f8WTnacK-5m%2{EVnwpa(5=&^>AdKvWR4E#Gm>Jv~GdR~3l-A?!aNv)t_$8Ihv(vecE zi1eq6Y6~L$>7upjZE93kp6U0tM*Q$KV8&G5F`ERqTT_K z{=}s~zmWcPsn##9YB5Vm`^7^|RM^sze(_c_R3_3de(H7u6X_STS_&flVpiW#v3?0q zLyaUQ>6Z#)pgNOD`Q5wB7^KdjvMNu!E3mRy4ENd6h+uUG=;YDW5h3b%kThy_M5y{F z%SXqjMg0IGJ!nzCtwHKzBhsR_r-HkIYEKZo8>saey&I_dLX7mFMU4Q_dxL6!5WP33 ziQXGjM?s8?$S^elL`GzoItN5XWVpHnL`GzIwVsbqH_=!b=hb>+M3kz0&3c#IVT@Dj zQk8KX2JejMtJcPkFjbA#0ab0G_ZtVR_B2+;O`Uu=VyJ4V$x@PaG)(OaBI{_FI+lv9 zqv0wpkd!Hr+DB+2_5G}glsR6_rTN$>pP=rbV&i&()}Q3g>jbsx2#NIdXOX`CoRakQ z1hs&*Od)+eLA?edeLbPtXq`~4&nBw(SV}rtr>M_BWVB9G?Q5}RC!;k{-3KB)F;o2w zM0#ST`htq}M3VZ6iY;HV>i7*QB?ZmE&jlr`zfiHIP1cr=EbV8JrTr|jw8>h(kflvl z^JpoBbZL{--#}z(ldCOlaC&dD$+bU^g1PD<+s{ioUk&<}i7ah~8VMpx zo1yyGAu+bJnQ9CbTiS(cJXI$8an8wzh3a|`dG3C(S`7Kf(|t?TMfF$>9 z5lx+360ueF29f&m)R|P7h`hOwr!Jx*wVU}}>Ml(q^n27Znx04OQ@b`KWu_<={3KVt z`V*B^8HC^5%U8W2)&!r~98iNG)(M~498hDZ*prP1RWJM?8`=IyTaKv%s8W=c>)u5i zQ%6u)m5%HF!2$E z&Z*&4WNB^DIdw3V6+d%XJMz3*{zbmaYMR~WcHUH%P^BnW)-{T}sjjB7Dn;w;u{J@B zwDXp_mkHNkA9+hHpknR3t%^-ZnM5@r@2H)qSUc~k3#nK;A8NA(S(~3l)@G>|BR%*; zWly)Wv(G2$23kt8@_2nm^$DabkjSWeqE>x5;w=7h#0xc#rnI8JHn)katTvWjsXdyK zcCxYbR_zNSwg0Q8P!)2dcKqroRWe%rSmu%b3h2n_E|G%%%jfPTebZ*2%ls@-re6O# z7gvYtBV~TAZ%b3M?cr;^iHfYF9+6+`Yul4jSfAC>@1|mXR##t0#nx?I{T(W{ZtLj> zH~*Zkq5cmlmakd0b~e+$rm-@vJnCIUGkxP0wAJ+2Uz+KgGI5U*?tIrw??7e6*NHqL z?e!}lX7cM1>7YN>lIG(~eu0r~^tJILeO1fnq;EsTt{yn)y{O0&480&EXQK8w`;S!DV8Rppb& zC>WrLjPfB>qTg%Qgv)Fc`B|jQ&myfJT9r>Ctsbd~lsQI!oVJ>bp5rcK^jBc{NIS>s zA2898JXZe)75g2dvHItblGHa&|C+_~pKtzCiyojgi_1M=sFM zg_NZB41Eq0tv#dKc*)SOr!h8OGWB(xNqts4UV20>)~}!{<4Dgh)mK7{Y&k3R4LY)x zk+!U^)|Pep(KNfJndW z)vxHrQj&hj*H=j;W0e9UFX4M8*2-nmz$il0Lgutu5E|mmx;_?3%uqinZmsKGZ~NAal>8$lLlpRAgjL zi@c*B?#5~-J@`OhPDOffT4aen&4a~A50>e9&(H0As;@`I`s}IRMH7cA^uA2=z0V4L zB;+F_tD@SBSy63^tI+4ul&say^p0MnJ}Y{Ld$3YJ+>g~xdhn$_-M>nKk#F?HAku^X z(|>IyG14*#%ZrJ&<-OiQMb>7c$oJLS@?Jk3Vx$M(>ocfWTmIFH0jw=#)P2$)rea$o zZ?FkuF*53Oh9D}oA5#tML8N6h3}3#LQp1o>V{F}iW%xRXl)~Pv{;FEauMG|~Mp9N7 zZ4BeSNLjO5%36kWE#;iZZw$r3v?r89(OHqUhJcXIHP{*kQ>CDDXO=~NYber`W2$3t z45j(d>4(cA>lku0<(TRkNY>lw~y+80^hU<@O%Y;^q0vB(C7 zG))&G8yW6^Dj(jAY;1@RXDKTmmPR%;6lki9v^Q8Hs$zVvmWDl`5esVeYGp7*ve<|P zcD)=8Ihq`MwKF*Os*3gOJ@0{5mQy)%cjAG(V8~(3Nakh#J98<{>P*|ig#}iX5eB;KCALF{$-18uUWUma^44jTAq8~u=*?bHhP9x3%ZqwN8}5UoQ8#yox_q={afVJ*nP|X-7dT}fDzc8=_Udiu(YvY##i+i9JWYJd{szZB zG)DU@-q4AP^;x{3C&X?n_$q3E!2@DX7SzTHfLP4z`cVT7;h@p8n_%?@U9ITXV31)D z?ED!3uK1u_1=pAWs|{V)*jBYN!FPSp2WB#{Ohy z;j=DQ)9NoJ^*w*2p_WoITb!bXRh1$o&+Za6T+@gJJ)=fw8v5KfYP6=xhnA=@nod9L z7d1}Pw2}(rcumPAL!%}bUgwf_vb&@c4GZZKvAd*`4C|@L+2@3)Ne27=WIbe~Pg|x% zO*V+}L~Q>z#b85~jarXLj+$aHeG!{xSV2YBw3(k~s5yYHO)UItj)umXIFxAUplM!I zq9K5)02u}@in1E|f})CWukURcVXp2 ztk?BJQOSnnK`iBo+>=qW40Q)HmF&9|m1;<$Dn!#tUN)U$*rTZ^YOWz~2uVp|kE7BJ zIm3uju%`RZH?$wlN+E9qP7v zeTiYHR?3^GC5EL;sQcuO>N3MADt3)*nW5^cG`U8$%<$zE!Ot;rjqJ0?HL_)fd$bgG zjcl3W35Z-HTW0w3`t>rym)G@|8(y-M^cvYpgE)fq3%MegV;BG;R|MA?CW6Q{vJHkA zAaadtgCUcOT_f9QSVKknj6=DGd@6P}pKGWb$$FPupV(rUHj33p_S$)dO;jY`$EZBR zDJErnt{A=3aFNQYB<6mM+G)7OVrXEWj_NK$DJZM&k%qerwMLUNS%2=X)}Onp_2=gp z>Cew1{khxFl9s~ybGM;0i1g>~YW=ypT7T{_^kgY%f9^K~f=GWJG$epXe;zT+2a*0f zYRCqW{yb{fM8*2^m?58v^ou_FxWVyfvV27K+zSl$W2h7|51uwSQdt!;51ux3hM0YZ zvv9`H6JkyoHt3AO6JljMorSZ80EoT9+w@sO1jJ%CIt%9vy+IQ;+MsiW!JuDLzllC? z7!5j=S`TY7=m!sH;ex>m^7FvI{%M%QM90KM!zL;=CN3J1$C71WS9q=%{-I)5YHk^7 zk0UWQOWiU|qhedtt*Uvj#=hBh(Vx{OerChZGFQ{|2l%O6E#IxAFGZi&)naP~wD_XT z>NSx4(dSaC)h7+b`)MsE&8%?zT#8ib)-C#8RSnY21Mbm9ns!_Wj((u2(k(9f_b>Ew z^dn6>TF;FBLz6UWW^|dR#RF$Y|Ea0cEi3xT7g`rxp=n3!9npVjl1A-_ey(Zpz#Y*q zG~MXEEvnM+<#+Zf4GZXcU|aa#h80xo`0Q`PZYr|R*%$rNa7@$1=zk37HI+pFYq+QB zV>D;{Q`5IGI^%0iPB8}KCrutPUmMl&WK576B4TP8YiSx7Q`^{3Q$kE#V@pj7V(J?^ zXj&W7$k+pP@8PZ(JEL&|EA!sNebFt9cQjpyX=C)CSQWb%-QIXuQ%Q6uWBR13*vIJZ z#>mN4`Zne#;{{DlG4945Q&_C>;o}%@V}q$x@`&*_e$ezTCeRp@P!)@a2{9hlG%&_u zTrsUGmJkzZOqgD!1u@aaB28;!;*33JkXQ;nx6sG-F^*2GQk~d-#xzZKvHgw3)~Z;J zDc<X^M&c z*=V0q6&n^i&N!HgeW7xKF_|g_f8Tpz>?GssRFaY?F?O=CPZ|-M3nm-yP-Q6>15$A8 zA&V&w0_I?qGocfU7sO66cA8B~!OLLgryAWfWyel422mBDc5bU;XBhXSlavK02rJQe zc^(m)ZLG#(O=jL|%$rZkR6eHV#wHo_K@Dba$2vomtX!Uq-#as20sS!ZUb{TVjk{N@9ih zJMulFmKqmPk*~_PjQhoyvy8;D@iKIdTV+(1GnLN%F>bYSG?f+Y%lC@QF(&@PN+HMI zYmLeZqD*`S9TK9=HkK1BYR*{rM z)8e)pKWJJImuEDtX0dw@SHM0~>VHmA;Z ztQh~I=q=+ih>;_K+r~8zBk%6qHg2IJt#;~t$9P`T_r32`TZSUzGZs@^`?~cmGQNgV zBKrDZeT0~ApRep57^PonPbiUnf_gtNe)WHd`}TmUs_g%L&V66*If9P_xfd^j4;0G> z^~D)#FsU%nv?w28UJy-FOUq0O6%y$MgdaW0M6s3=o|`$1?rnbZ+(s1N+x+C2+nR6MgeFf(D|PpT zQ=V5^se32<)AL~~6_uuFM~PY~p8WE;8?4$Do7m6LLu}e`qS!-h+8CmEm9cBviQ+ZD zuKh+7&$M<;c^S3raNy$^uZ$&+O_7xvvznZg=g*d+Gdh05g+znJE4=7`x;wa zz4Q4A7ibld`e0|yxXxN5QHA2Y*Iu3wsikj0$wHXD-<%Mo)ev>B7_fZD1h1B|71MSo z1D5Zd5Tnf{3g`K+Cd6uWoJMOvoaTLlwS-MRG@*xrXJQ4!~HBpUe+m&rglLHrP zyNN0k)*A;0F42m&VH(c*!ve|L7NU54_>tjuRHj|M`j)^jZInzKzj`K6J7gNR%Wy4U zrs3Q=LMxJKIJb__9*}9+X4hyB%QT!@uhGgljpo*o+U%X!5;%vf8b7ji>MrU4bdu&b^#=%aEGDRBgp42DK|NO}p+>rtmgxx>iIK&#g1Goi&)oJNOye$3(59 z9sCS!KU1`Wzg2rD&!IC&f&e3K|3g^hXv>Hj_9C?@4ua+foj=W1tmlV#CcWL2YavIKxbG7}F!ddZd zt&u3cWt^uS{R$H>w@=vE58z0(3rIq!P#`@lkN3Q>j5 zWe?T?HJd1|(IPFpj%~pj6=|iC!Wu2s{PmoMHCn8dOA2eWSldZdq3AOCSYWZX{Tr0z z`__B4>ECibtnCtQKT(C^icfzIEY%t%75~9M1Ix7329zumA5J@w{VN#Sp9KCNXl1%F3$arRp6Hc3rd(l@(YE0z@gD#){%@ofygvw2o~RBCyt z_sMS0YFmiH|Na@B{hStlh|9xwHtRH>q_(}iGJc&lNK&6amXf_*OP7@Gww3W4v|OU@ z6~BO%3awJ64c~Z0_6w5YH#je7A4$pKuch7ig4Re>z0%{gCCZCh>R~J$=cRD*l2$+z z|LxpHZ6l{SA6j}}w~g8sNo`m<8>nhYy-?MtY|`GB)Z0}yu}S+xQj6j5k6zY3m(+vs z_eU>l4MeRJC*rQjens;i!P4P7$4TR|U(=>Y>Vn0$WWS+pBnrMrUVnG?TiV>CC|M}N z)-TL{TT45})Q?B*&#u;Pm6SMoclLHIpD6U*)!FZAb&?wT_S)?Cw8S4cU*#1WvUh6X zKQdK!#T(hXwEaYth`QI`&;F=&PR6SHMDed{d=O*g4 zKy539GwoNc6wb6}YFFTEt$}nFiB&TWWY=kxKXD1GX4GeY)0z)w;RX}6EAU+_g|qNM z6SXVQsLgIdEe936fjp$OND6Ntk7yl!<}|#4JgW7U6y87{(?+*avu-@0jM{N+#CPQ8|>hlH#0w``X_>^Iiws#J5_ z`edRW5+BEf<%H?;h{E3|YE(S>Vxkto?-SXCNB^r#`^N{3il#p}q+aRQ z38)H5S%)|&(_3tG0(NjqMDyhS;Thn#xKhWxX zow%>l^$1D51-mX?kCN1fuswl>rU1Y>#jGdM%r+-r=DqH3TN*GeL7J*0($G)IgLE4kG`8I_N+eoKAHA*+%+Om z|5B#yit7Z_L79dg(pUdMruDl%T=dm{m1%*=3w;;rzst1SCVS#8)SXtc#W^3+F4Dt^ zTI75H(k{}YWLo^<0XhBjSV<)=t{vA;Ph<*utae=gkiH$Duc9>W+W~qFQSe*%dC55g zbdL?o)IqHEH>8pzg})({mUBrfHE={mPI4=iFk)OzitZ;Z zxG$KPbD7?+m73vB)vs)&wplONC$>^HafQzNmwIIa{IcGadJ(17D?8x5;g$MMJ6c`u zdf{_8E$RFl-u23-@P0FxhW|JBN_`JYDp@Z+b@`Qgq=WJ)7jE=Jnx81N%m$RXysPw7 zDT(D>rC;OZ^4{A&E$6C`@`7nt-c|Y-mQ*S#W`X1uNnv?c=~YB=c~|LmG7amOu4lT~ zGAu7$FLxtVD0Zlr_Lih>v?BEdQT49+FFw9HJ;at^8rqVsH?X9#`lWkv()Gl!VBOR8 zB%;_BC|#zZEkpI4l0sXC>a+ErEkpGcl0sXC>KllvckMbbV(8EiTY_n5%TRqYODeCu zFlzWv-PtZ^%TPU>D72+0XQA;r#`HL&kMub=vOhd~?==)hx`QgQPt{9>FI|kcqgx-rNE^kCg zdDrO4QWDF%MqkAg_0csUZz2*Yyz6w)nOhgz>^l9I zC@v4@m+L~x3#MUtkgp5p!};YpJs>G8?>c=7QC!}2A?0Q2bEPDfm#L46=JIBIo^)Mi zNO_t1Seb_9W$KfOy4U$u_5e$!{vcD(g6nfK^Qv6WK9je0Xv;`7H|$+=M< z>&5cevMhZrQ9RR**EdQEEgP?A`B0K)qVf7%qUvc>jSsOin1*(a*9%yZM%8$Ir=+l5 z#_M~C!qVT!8L$7)N_~_$L04n2yd6&bwZ4GfPEz%k zZitYNl}=OlfXN#`W}Q`SOuPSR^zb?(ZUtRG>@Idl3aIXCM+5mgAkmN_Q! zX1%3Va!llukhOSf>w23!;ey%#viwJlz?`C7>j9$Jmic;t zOha21=(UnUTNdb%J%hF^(32#Ewk*(x5>@Z&bU>fDAjFnn8rrfz&tyrZrJ^H9?v@nV zvOupPifvh-H_0@#r9dCqi|c^46zC-hL0by+jgmrJ3iNl0Vp|GAYzd~JEd}}>mLyvW z^pxIQ0@_lbrxC@r6zI7!4Q(mZt0aZC6zUCqg0>XuB9SSyrBLrgRK08VftZPfA+`k5 z(3V2o&yvdc7ve#(KvHN+p}v$Twxv*CC)3cDg?gQ&(3XXIS>K>73-vdMVsC}CW$+h* z;N`gA4W?n~3-#?RN#43pkGwG05({-dQCRwg6Bp|Jh}t0@Sa9*gMS8BJ{{F-#Ig9n@ zCH3kq_^loNU8bDN<}@mc^>1VveoeR-<`+dYyo&g7qk*b;^Hz)xs}VvKLziIuu~CSh zk4Fy1EhfGyUX4Qzrm`gG3gw`TIn{^k0>)3bLK4`5~jQm~*n{ZaB z!Yj zA&)&9DjDRkCzw;&6PUxEU``G8uT}QDQOY0b32(lQ^_{x{5l4+`il1qwVo65xyulo^ zFL9i0M$OziRvM2sv3DAl$hGG9o41CCE8-txk>6GibI@Z|(S9^)i`%Ol@$~w0tTo(EXmur-c9K*-h zi?|0_o>vXC2XfquTs!mn#c{Uh;t&xv52<& zA8u_%^Qvd&bDZlKjGt)@HTxv5JH7sf?Toopad8Q^Jnjrx&$(^m)W=2zEyuVjYhl)D zE*I@IR($63+QDe9BXi7o&1YqJmwPj41h&HhOXIq_ljW(AaoM}UM z6r1Z%Tieuri-M;BZ}(t{C~2Gmur=UD7S0QH+EF;fKQe@H(q6?Sp5OV$J(sAQ1CGmJTvXBg)23}a3WwGCUtD8-mFjeZPD znq|zX%r`hZCo}Snj?3k76pWu~9C4~Sm)UPQ)$DKosi&F!ob$5JnENpnc7t~E6NlV| zvShFwaQBYu1=|_gZrE$g56uz6+Jd zo(h!=a=7ozsoZzW;l4AchT8VO)puMXw>hs(=9ZlQGM0Nb{>MEqRU*uIuoGqu#LqN} zId#ih!CdB1%&F#n=W-v0y9iadOlLj3TeFCPKZb`}<;uuXw_z9ZRVQ|zGqlAKWLk|7H5l}zx`}O z=#B*~#5$g755w}0jXJ#@41O>d%7p4M?BuN#sMg^0DepU z!1ew4C*)j4I~m6PcLluybFqgQV`LJX&QvkE6m|MOMxA4ipv>8P;D5q@9(F-0oY!!M z;ZpE?qzJb8?A{e@H}fuzTjOkdOY1hHrp7Ha?l!H$k$o$ z`>=ifybR~+M*wYN<(0S}JGNUD4l(oz750AH-cf~1be;=8DkyaLpLAi;w$7&7Vca6F zt_b=qa#Z3N9`zEeEULH!dS4M3H)AN@d``hJWf6BCM0xXA<8#e#-yr`NK;!oNX3%fM zdC$)>Jii6wiZDxZd-B})zc>2sg8nr|ka--n_494Vu@-*v0Uqx+e1yH3{3U8&&*Zpa zc`()BV7p;1IK@-0f5#7MICqJTK4`=J^=RRTG}qxiP!ZKCa&CZi!6NTzc{iIgi{wE@ zm3;O?Mzah{BC6smy8mR3Zy#zvNkc<04zm-ql~qipwz{86NdVgn8(3ReA!^`wEVPD2 zxW=K+$21{-E6o*LmO0LI2=mVt$I=yHPR*Hx_qTj@K3n|sRnj6?@V4tFubyo^#LO|z zW?b$KP)A(%u}_)9^0=#nd!+N&6`0p4TnCMrll_)w(f=L>cNB(BY&~v6MKqB|-Ea|d z_Vq=a1HGw;?-LQtC7yf#V{V_eac(gl5$H=6kun|io5#qNZ=zor?fLKbQRq4BOK^{R z7~7xUB%1krnqv-+njjiCFkCN2wv)#QuV3a=t{2PPH6Kei5a;$^Zp67A?*k1!=e6F1 zwguzH`pbIEbFBFc!eya0BiUv>lCh8Y!#Okyj`)14YN@v*J#97 zsPi8*PoB;(*5Vgox3AJHWV~0!_OX!$JK5t1S+(1ibv7H=LdO5J{ZZa{%fsGfv~!Rj zlrem){b=-%8)!Y^IG4^GMzar_`CJNfg5Jv~8bg2EnqsROp2lVI?w9?L=X2C{e(x?{ z+JM?ZbD>{7xmN`~`|Xo!Q5$-Ql_YKSM%ykP_!|ABFb_4boje0z>Bg-TpM}TJ?xF|n zC=SCc!E3iF9{nCQ*8#$=Y4w@-iZJIg_wTvmzubsE#&17)|I9mcj9cUmoLlVQoclgP zt9Z8OmghF%nS?!@<3%uDRPh=0PB3l}6Mw|od2T~J=CORfaibP(9(X3s*?gm{66=U{vB({i_E+Ta4M{YtHSpV- zCQjEjoL^~oWR|(-iPLkv_cD&4*QVhqU})OusXvTE4)-RHJF`8T-wxXI$Yhjk%i$I< za$#94`S19+iiJv=IXI6Qslhnk7coCHj&|}&YUDy|`K^7ZCCKM7a(;ZQQTT(L3oYSz zXx=l+u!THYxkN^8?M-xUT1Y!pzC}4s_b_~#U^LIwWOr_s;zN6^>k^&G9^Prk-lc=kd<# zAkSKFgJweyj!<~3PO};2#n~*FitnV1QXcpk=LGZY8k&l^kYmhIJioF3@VhNW^J>d8 zb6d^Wdcks0Gq)$t8)nVOH%2IH<{IJ6fR*ZH)D$@uIhJ|tGq-Jk_M+xexE**r@~#ha zv4-Hxk6!V_FtowEGvs=)hPM67rJrlJY1qsqqMe}}w9`th9m+orcSKh58JozPe|j!V z4V6Ee9_}f&)7)#p7BKeA!S+{aA7%6u_65J2hF-V_%jL1pGoi7^3(g7b?dEl1O(Xi- zuld-*yiYUlrttg-bAIc-OA(Xl4LIK#ah!L&JX`X9Y2eeCi_f0HxJBSDT@lO)#toaJ zVO%J*V^rkm!1KkK)^4tyvA*Ljlzo70c<>I)#dlD+yR(Q?+7$#jieMQjNj-SB{lNM2 zy|BYq#eUjlExHmtHLAF8J!+T_H$SR~q85H}0dkPfCp#mKe2Z{^ z44g4zac*RJ_LCP#PutSXn$42j%PfzcX`GVSOWW#s{$aFg%``+DFUI-KEXjG>&M+*q z6vm(;YT*>1iaV~rxVZ&_arnLzYHB4(MQr#4B@=ogn#*b%=a%GloACz9x2+3vcvLdB z)zg*}v<>D}>K#Pm3kq|q4x&9OYv6V5(;D>Wmv)_QKc}KRe>bks*W;meWEuWqylouo z0=)(`wTLf1HR=na{Pxq!YFi`L)|P)Z4$EUrLoIA8zwkPgG1r>yH)H$J*d}b}xqZg0 z#~h#eI+k*z0r6WvReVdkk(%BV2aZMbAWIAm&VIaO33`RGH^6U8tRig+YQviHSO~88 z_!i@QQn57*oezACx7_EG%P0}=MOprAdhjb;^$ap-zhODHbI|g0@li5p?YSh`!e9@E z=3;(O=4_?2ho31g-|h3>2K5*|W?r3nm&JW&#?ZD3=0%y)`w>%vd}Hn7(*)nN1WQrr zbZp$JG5>6HCeMmIpRjFhE$5M9mNCcANB(Rw?A5&b@XXA8Vcwl`>Hm{d*3cHQ@9^yp zVoN%<`SlM4I49R@+Y{|PdvrhABg{g+OuuQl9$e9nPexqN`X9YCt=eT)3H<#FU z~R0PK_gcaQQPV$>a+vdVuXeb}=77PyV6F80tDR2^3 z=ys0z7RfQ>gKdcC8mqW=F3KYs_r~Za#w|+QwVOFyFPvw%HRxuN5#NQUSZIl12)c;F6)9%H7e;VEoTEs7On|dj&n{9pjY#g42 z{;1tDzcn`7@W<-M8Oc~pHa?GWGq$bczc1Z*`}RMPG@l*JZ$fzvKV9?LN;LRp4X5Wl zzmt*K9&Qu!S>}(`X+BxwJfP66h%wLe`P3}KcTH_i-{$wlqn<-OPrr=5{q2zdT<7UF z;5->DQ4vEjQS&RbpL_ri-UCv+7v1yc04n0{*~q_&-U*uh>U`?L@^~j^ydU9R#J|fM z{F^MiE91A57BL0lR(VJ9?=)bETspqH{Le~9`E%+2pQIXhEc{(ZXen*WZOb{m2SYWS zI~BFzZMG`b!CSWfNiB@8JJ74SU(T%!YyHRc>1S|Hb$VIo6}-FV)?lm59A06OZ%7Vy z;E4mj*-+#cn}3w%^S9xTD)Eof6Y5LBwleEKpSCs2w{7{emBOba9<%48;e0IlPj#NZ zwR{)-N7;G)J~P;X{{Kgn`$y?HfBR4V@bB$!yWX8oU!S`!yo)y5$*T#@5;n08R@n2K zRn9-x|4vQ+f6iBYx6fZLahy-bW)9xB8^0;R{L{Za#V=9utoQRzcyqr~==>V<`u_VH{fqzlz8Be&VoqJxcF@c;C)C z`HP(z*bj$(9rxHMPucA?lKMsKdo z4#xjr+hES;UwE(x?gj2Cd^>M&%${?$_y{n_P1o z-qz8(-A(jY;allz{Ikt1%x}A9@jD<~`&84ap$J};+VXjoWW1#pTFc0*47LXU^$q?- z7^b%6BrHWf_MIXw{RZXRu9eLB{P|!i%bV9wDjwGsn*+Z|0lV zck|xt-T|nSzjZOk&GM|r%rR>)^H~zlt;XI4|4y0zav6RxjC_XQ^acNZ8GbR0_~u;C z@5EeYdE~$^hLI#Am(|wi*_X^{-a(<|hW~Rd&bEVMKKC7C27SH2o)!z1SVS%DU4xu6 zjfiun#ssjfP(~4bc3}MNt*Cj@Ti61)%ER9*jKS1h&!X3Hy{;LHoIUFh(Gp`9nnj+; zGY@)f=)TlEUd-{}e$|+N*fUSxLmGQ^vtM!ina8oLw)}H*&NkyQKMVH57V+cjsM);R z;a)rU4#&LnIsg4kaEBAR=P}>9cz3$xp#yfM?X>R#r4+h(|tBelK*>e6KiBs{tA^bKAjS+r_7)0Z{CQe14H@wSy zrZcCS>&~sz*1P!4ZzJu@@f2Wut%oDUB9L#T?+4D#=e3Vd5O{B6NSbxBOt36P;K|F7 zn@i?7KN7iI z9(Qcdu4l0pr^gMSLB0|HJACtL#QFT&)=%1USTpymSsTaA{>gD(5qLJ>F=!qI=CeGe z8uO|-*V*LFZQj<-wj8eGG1^7o_y3{a^6^`2^Ba7Ohknb4994eN_blzZ_R$>z-X|M> zTgQ5WH_VEtzZuJFi@5s0-An&qDqCfi?C}hya$U@Pjz75?O?KQN#DB zCad_HXU>IR!>VE{-Iie7&|iEz#?O|zcTrH1?J<7|$zLYmy{qx{RNF5T&YWteuO%HJ zUrVxgng2$kZQakt;lE@0jlM1U7`}P7LtWkQ=;OPQSwulhD;kgi= z0q|stj^a=7Tn0}zNL>!km7=q_8lDmGTnkS&JU75IPDF#QXpo2oUD3dg6Su;%51vV) zm$(I^1%Cqns&6t_bubKtofp84=(i@%7!id69+JgeY&44!OpJ?OYmJPl8_xC7#I zM2&J6JVm0Tx=bXi%i&o8&qE?hEfE3rVF*`2_$Y*rL0AgU6A*tA!lxiCgK!OmPeZs~ zJS*0V=i$i~8$kD4;ydLn2)Bu&>UMEl{Q$yU5Pl+F6Q77T;CTz4YvXCFM1#J8dcJlXJcgJ&N+lf-u-2cB$rZh~hYJd?yhXrF_?J18c@ zvk#t0q7mAu5qOQzj*Y-;1m0n2rNh8GEN+KqA3T%95y*1{;zuBUOe_>Xiu>TnhUZ>* z_Q5kr90%Ku1MfK4b{u%efp^KnNAT=}XOeIN&j~yy@SMPN z0?(y<4o@~bpTV;ao=L(DWw?RohBDm1bEBNV|NRpI2wzK6JQmO``U8fGL4<<|hZ2q= z97~u@I2Evym__kC!a~AjgewWx0CoX?z_Ka^p ziUJyjs|x76POVg4>OBtRd-sN4GPe)ueLHaQ|J_w8+uqKD_~(x;0JP6q0(epVNu^S; z-G+SpuX~kX;RB#Eyy;!Q$fgef4_5C5+;{Rbz$1UFRimJk26d%<lc2%hF#N z_+~px4e-aQHOjp+u7O!%=Jc`RQTyE!ds=FVUrYR2$-m{U0hU3)2metH4Y?HJSc|O! z`D^T>$BnkEx2q#2Lfm%SXv<(FvT2Sb3jV{;J(fKC)gRptC8l)3ax3myX*nUjSa1!D zrXLr)U>T*nevu+j<~`7PXvjyF1}LSO5PqGUYTZD!ZlL-$P@6X>*xC)$ZVl8{4b)Z* z)K(4DJ`L1U4b(npIs763^;8SRtL>kRO|W9T+48>q_2)0PzHcA?Ns849ebk`twRit` zm=*2Gv*tmrZPo+!#&I`+oz1&ztRC`1kBYtKQL+6ys_1FZ@|SnAbyU&Y>+Mf3kG195 zcihzzu;(WOZG)7j@3ukf;iw!0HM$izhlb37)VTWwSl%bA4ypCmd}bS}-2LX)ws zv)?$O-kxW-&pHfvIO&xHSQ zxIjMA=~DF@23TC`zjh3;;7AV_Tg6S|r#eycHs>Zgj+#v{*6wxYgZwx(U&S$)XRn7b zo3G+X+-sln&3n!wvcDK)8q^}N=Lm4HPxI^>=fSvE_nqwMic;$dC(XY`;Cuo$D+kI4 zx=x5k?oM_U+TF`92blqPjd7JwT}laYEGVLc^aCy!D@sZ8Af?lX3tgqeFQxjHsB`kh zsU_+!r6_}*Qwb}>$?d=Q0qAU*`Oa<&)a%C8{#WFSRej;! zgPs%cUxAKz3f0(mF44w1-rk)8c=wxwwL_FM_&&rL-wfBLQ@MqzwfH2l2NLV|+;wtVHVIIb(rSuzP~mLU~)r^Q{(~>sG3x=Fibqs+F(i zYaR=>r^kZhq9dg~s!l4H19>NY@Q~)ER4=8*Q)<2a^MkRrM5^5h@zul0u0#vXHWr*w z^BiM;d`nBTV6P=o-V@@n{LZjeE;u|8BypZew4fgrI&M4smY%Op{A8?Hqn1v#wp;1A zD$m^x`{h!54Ye)Kv6<~!Xf0@=l>%4ca1o`(j2>W#Qs2r$T)b&RyFpfL?e%K^uMV}V zw~tIa*>1f$@XcS_^;f!4Yc3fZ4z!I?INtW6o?ndJ*uq>es_F$hJ(fErTq{BpWg)S0-7KMV4fcwoD7oa+zd* zCfT1w7UCFBh(%5De~ZA`tSRDA zn0w)G@Cb3{|1AQ?^`-Vo8gc!V=!`~ahcx()>Us9R{MeyA%JgbqNuzQrNGjq4V7NF% zh#Z)W0h1%5pcWI_=To^w)B;0+U)nwa%3a$YWLDYKHj)8ABferW5 zY%}C<$*%Vu55InWhxZ+y!vCGbnQ%@A#M1UFVg6jw0e22F+=Y&&ZcleOV802*ND1jF zq5dr;`^%{=6~y06Bd(JAx`Mp4g8HR``n`hMzk+&jJN4jh>bu?4kK3v5^6Z~K_DRPY z(pE#I)KV!8RLW7(-$eRhM8CYG6OQZRPFsa^zjpJt6P}ae{W>81E!n$c7fO z!D^+M$BJ`>)k^y@E6xm4A#b?Iw)CG8E;`b<9&5RI>;OwglJ7|JxUYMmbGBvv*jGAx zNd~dm;w2d`Y4eh#*NWpe2~vNyB>^AyJXRdzI6n`EotWKnv~wDzrcr7drDl+xOwy1^ zR%KBsS)_Ru)ebEj6FJuM*@8x8tmUfS;2X;E>UEJT?K>tP2F;T5pHlNlGM{AftvKhbwD;Yxq(c$O6j6PPsJy{rS91V&)&4H)A^v5TO)8#b*ApIqaf-8L#a$<(F&-{(w){0Z*7-*6 zKclx(i5av8Wzd-=gI1yp+UI1@nI(hHESYrP+)eV!pf|gCYoIPUqLwUKX~F*?TxhxE zD6Gzwy+^L|#yZP4jP*WhIeK%Bw;uLXWf5yE|5&%syWY|c{#)&O%iYso>Ac4B%J!w+ z!OoX@|J6Iy{^}DCd8_Rs?_LG*(c`{%jB>8q^{zU~S$^UP;M{UUl3Hj-&Q|izYKalU z-}PpLzwPpFg?ZqW&U=A>#M3}_?zI$t^sDy(jLLs{2ipduTYU}Gwg+g0Hdq%N4)e`& z{_C|Wcb;?hj6S}4%d+pk$l z%-2|c`!-yxvD|)R*REqp17cG|HpLMk4kv<>(FxX9*0l&(ou^DSkKl)nN_1sEi=U%|Zu6wQSHcr<4F5B{9M?6*=mc9nYSAXDOjmCoI$q;{L*)LsP zHv7`QKpbs$*(U#Rh2Lt!9$!Nv(Q3o_++{&b?CiI0DDlYgsq@#2G?tz_X= zr+fLW{%WvoDIokmO}~dq?`XrZ$wb)kvWlog(`WIMFr* z?0?lg){3oBXg_-8;@CpFxUD!gn>b@(zIrfrto6e?9sv%5Sl*zbhcw0} z+VE7EXv6cMV!P#ssBVdnI!<*#{2FmU?LB;e~0aRKS4agbw6@kg@nThO9`JPyqPeI@OnhZdr!A0 z*NYI31)Yn!#k&47{yxBIZ?5Q;;KG??8O$@Qy7dPe6w%*x|8viG8|1ou>zlxFFMp?7 zwdG{)$!>!n@2PG>U9U}e6R^V~__Zw8Ly4V4617_rwc9Ar;E5aRs+iazZY*gV>w59> zE^*neo9>Q_8*D3Ha$mQpVEG5?RM#-VQo`E_QwSd*%mSQ6Hcxe35AngaSGFg_<+)}~ zzbLNIwPObC?rcwtUg#TYi-yzvDBDY0^W#R@#=nL5NcEz)v9=A{mc?b;qB<=Hw7v0g z+%ng%qpRG@EViP@<5s%x?(|V=fh4HcI5mMd4dhW%fpf$&3h;T*_IfS$$buD$K+X|Q z3VC=M#1%1%Fpa!@s%z?}C%etEHBRmjkLZifvtiG!r=DH!dbav6@#|ep9j}Nlv|atd zvbbfo9-W58FSA|n<*4|rAQKKPkK;Yh@)XRgd6qjTEcE4B#;jlH%LWfz89&N;V)AN0 z_j10$do~{Cy5o&Xp5>#bE{e;eS-slwj}Krs=)_T6ZMk4WzOR~6t1Z^yHSu^Kayb5k z3-@@{_QaKu-A}pRyDz4@;*P!T=?*xH#&Cjz48 z1Gej+MupU3h16n&mM`9Zw?}_>?C>ggf;(%;t{#VM`fH!`D74)6C7ie|{T|=nBf&j< zRi)!1< zW%0nVz0s%VSm1z%xL@ksA2?sHO71xoI870=0I%se%RM(R8gTirfv!A~%yXv>Yl_Ho zzxOrtCi5-mErqb=HboqOvecdmt*458Uj6i*2W-cN&*_P6-fYRT;aN4yhG+9E8}1~t zp!G10`>re-?#;4nc*4!H;SMdrKJd*ad*b=-<(^UYq)Bh~jI}2%{;=mV_k?jrdaiUg zJbt|AAS&xocM6=6mbv5KJ=JqClx69)%su5@tyh8_Z+iyY(ZU4#(!$7IYoHcg0SBaC z4*1a0E8^FTe&AKC;((_j^Z1_lmH`6a@e)=zgZ>CwKOO8`p^ofHUiQ zys@c-+o}lr!O@QZC;fhuoM_qKCBj|@9@PN15Mi)a!E)DFHmunOsaL_heS{r*JeF+U z>V6exIqR@*ntQqI=!c{1Sxc0JJj-<0=R{evI$`QFHy}E8R=KO)xVxx!;|?Ux5`*Ky zIqj8*g#PYs6)>N>w!QsG_dHAZu0|!wGHpiZgfwbH+zY|U-G=uMD}mFL4u_?qVw$Sh1KBF`xzPcE`yT~1gApIn(Ro4o6UW#_F=BpkBL zpS&(%6wGW3eeb((=>1B<`|gw78O{8DPBf1z<0w4lq&q4zQnc7%)ls5inV40!&d(0j4Vd0!&jZ ziBKcO37Da1fFqUmfSF2Xz%hy!FiVLA3@AMSbCo`TQXDWXJoUQx?aITUD zn6C^4EKo)O7Ae;OE>*?=7AxZcS137vCCbf!tCi`1rOGV8GGz{6xpEKSItBlqZH2NJ zaHDb`;AUkx;1;C>aI1p-QmH%&@has>!0pOfz@5sv#P;HSO5Lrz0GvI_%fQ)7oEqhI z;Otkh7iyJCh}S9AfDOtHz(!>k;8A4{;BjRiV3YDWV6*ZyV2jcKDAYrMR`mx!r}`71 zM{NcSSN{pvQB~o8;zp_tz!ViNOjXfy(p2=EbhQ}#Dogc1>IzCNq14rsT27pG#Hj#| zP1LFAKMm^BfQ=A`ezBm=ObhB9V?mu+7WBq|1-&uXvZ{|NW?9PmSVe)QXJ4x*qWDtF z)4(aVBmifHr4L|z%oRL;4(Mly+vBVPMtOkxl zlvywB>k#GERKRuCA%GRuD*-oJhXQW4W&m!nUISQZy%w;_dOhHF>lnbD)*AtLTW z#hPu{JHn2VRy*>YcAPgnb{yRui4$o@Nk7TN+wTEAz3c^miT1^S{p|MvCfSz*CfiE@ zQ|yldrrMtbOtY^A%%Hp@DK*o+4me}%F92rQUj_`=UkA*!R{~D4R|8JB?*N=>-vv0^ zz6WrweIH=H{d2$q``3U)_6ESE_CtWh_8$OO*na{nu{Q&*w*M2b)UFPIk!yDVmfJmm z>+BJL74{1NH`=2CH{1PyTkPEdEA71jtLzs6Znq}^?z9gA+-<)Mu!d@}pW393;tdpU zr1m*#$Cf;9$C7I2;8S-=X%dccj23c$^dmjJgoUIwgmyb4(5*aEoS@h0F- z$6Etn4upEy#coG6aP~O117|OBY8>wYXTReEz*@(LfOU>NfDMjYz~)BBrw~8txDw*W z9iKtG$#DR%*-;DF;>ZQQaDEMOtMeN`r}H~NkFyal+<64Bqw@#ANaqPaud@lz@B9@o z-uW9~FXul2p|b|sML(xyV0+QuiFPJA?Z8QPx_~o?I4MpKa8jM^0Mnf9fqw<@)194w zli`d6&T!(4bVdUw(-{Le#u*Ek<%|amIC}!-I(q|7arOnA?(7FR(>V}uw(}Cexz0g= z`OXx;0_R@QCD0&H|H0X*uw5AeA20l+5b3czOPLx3&LRe-|vD4^9<3g~n_1?X`- z4H)iv2C$T67+@32DsYg1T1xh0hYORz;agv z;5t`FzzSDqz>TghfSX-Dz%4F6V5KV#u*%f~aJwr3aHlH~aJTCsz&)-3fHkg*0r$I- z0c%}<2CQ>k2H4;l4A|&O13c=w3h=n=YQQGfaKL8QNWd1?b%4Ts1EAGC7SQR=0`#~i z0EWAB06V%T0Y)bVf74E+SZghVRxY_+B;1)N|43+LWh*!D41>EjF2)NUI2ynOiDBvFVkAOAqlYsl( zKLggfn*rEkurw?m zuqQnUjes-tpuzLD*>zudjxQM*kgb@!=3=#9aaXo zCu}WXP1v)5`@_}))`ndJ_SA({K)fOBCBVk8mjRE4y$X0dYztsh*qeaOVQ&GpgjE9y z&vrno=RH8D=L0~G=R?47&mO>zo=*WIJ)Z%3JqG~&o?5_o&)0yxJl_B&dcFhf=V=5? z@*Dw7_WS^t;yD4B>S+Q@^ZW{!?)eQc!}CwTksfggw7(k5&YnaBT@-N9{hqNbLbYueJivuRR19udM>? zr9BFmsFect)1CrM(yj%6NY)3qIdGqv{tXKT9w=V~8AUGg-nOTP9Aa0;}2fJNGVz@^$3 zP?u#?mtyTJ;H=Q<0ZX(7;6F_K)!O&KDb)@GmTAX;zlQkb+Hv5l(|!WZdg4@QzW`^W zb_#H_)&jUi`yEoZQfj59{ulI@W&_-=IsdD@c$fG)wJ_l9)^xxJp^os$ldNQC>|1+RR zzYH*39}L)0PXmn9uLAVyS3_Ao9edWV4+l=XJ`%8(ejV@=h@Yt60GxjMSimGb3-}ik zKUtpuoD@9=IF}M9Ri6Z$G<^zSx;_o~Ly4cE-wK?O`Yhm#B2K108#rV1y8yHFy8#3G zJV?!^)Lgv)I8*dRfYbHgVE;LT_%ro;fiqiQ1~^wQ2F%x&0~Y8H0v72H11{B90~YI# z1Fq0<$5^623GvnX8o*M$9I#A(4zOH*9&nxh0$_!{5pbja3gBk_HNY+UR=`TV60k~t z8*sb+4&YAxUBKP?PQX3-F2EZ7Bf$OoUcg$t2Cz>5J79zUIbfsyCE!uL4)D1CEnt&= z5U^Q41lXb<1r+Um{4b}_+P&DPy@+Zz4=|RnFX6?2PO*~kVZt?p&j7X;#|Tdm&I(7) zJi=v!D+!+Ub2MdYYo}q|+RQXNQ(3JT-_e zc!IEY!Ckbo3+|#lT}AApjf?Msvr4ZnIFBWEX@;`; zb;*VET2hyPK&vKq!IND|7d*kGc0t?HiL;yHd%ED6`Y6SZQ@p7Qox8i>-AGFpI(jmG;lfAn6!_-MRO>lKanX^GKz-s~5R z_i0Jdc%POWjrVCO(RiPh8jbg9Y0-F}mL84wX&KRYpEfcY@6$4)@jh)#G~TCWMdN*1 zAR6z}a-;D+ZAvuWr%jK>lkCiByic1QjrVDDqwzj1KN|1T3Zn5ottcAr)0Rf#eOhre z-lwgI#{0CAXuMBb9gX*CrO|kwRu+x-Y30#)pSCU<@6#%x@jh*1G~TCej>h}6Ezx+N zRvC@=X;sm9leRq?Z_;)~<4xM`=yia5qVW!`Ci-Q-{n2=PRvV4CXLZqdd)5$*w`Yyf zczbp<8qeUzqw)5vDH?CjnxpadtR)(6&x99m&#Yd&J#%{T_RQnO+p};l-kx>z;_X?a z7jMtJUN{B{zt;vB@5P(aUS2oE6TR&K`*}M8CV8U(lf5y3Dc(51RBtc9G;d$PbngJb z4DWvdj`XGgW_kw$j`3aznB^S?81Rk+%=KOmIK?{-aJqK_;7o5W;B4~p~oiq&|{N*=&>n2^w?A%dTg2xJvQBk9-HAqj~(elkInR<$Byx#$7cD^V*@_) z*jyia>=Yk*>~tS`>`Whe>}(%;>|7t#H{XXITi`>FE%KqqF7=_u7W>d+SNPClOMK|D zt9|IPr9Sl7G9P+uxeq;doew>>!iOHa(T5(p*@qsx#fKhS=|hjL@}b9W_o2t`^r6S@ z_Myk_@uA1o_|Rkb`_N-+edw`uKJ?fIA9`$~4?Xs%4?Xs{4?VWYhaTJPLyv9op~s3C z^jK>QdaN@BJ=PP09vdEm9@{YnJvK51J=Pn89_x=mkByH(kL?wM9-A109@{SlJvJ!@ zJvKQ8JvJoZQdTeeCdhC=K z^w{Y!=&>_n&|_!EpvTUQL66OkL60qnL60qpL62P;gC1KPgC4sg20gYU20eCl40>#7 z40>!?40>#N%qqZjF^>aQ#FPPUjClrdbIkLATVh@Utc=+VSQWDsaC^*KfIDNh0q&03 z3AiWbL%^DtPXPDF{2j11rWUX+rXH{%<{)5W%n`t&F~^hPZ`)(=9{YIA&%kMl`3^T8FLZSQI=kwCo~|7L!@EWf(#71aKEV90iGx(JvMa81&k$Avf>m8{ zWqhCFySw7(+tU?CR!vtNS^K-<$g1s%qpz+jj;V&OIHnrA;+Q(x701-^t~jQey5g8> z?uuior7Mmp;m0v$_2Zaw`f*Ho{5Yn<{WzvN`f*G}`kVS#M3lewV(<_@jx4_)M^?Na zM^-OCj;usKd?qaVl1x88j;|y?j;~}tj;|DdETmpasi}S(WodpKW$At#Wf^`PWh4E6 z0+~@Hlj+B?HpY)*Ez3U?_~VHm@Z*Tf_2Y<};>Qs;-9H{uXHe=)KaRWE{+oewCvoQb zarEW;ar71Var71War7 zA4lItKaRf5ejI&U{5bk5{W$un{5bly`*HN`^yBE;?Z?qqj5QWz5@Rt}KjI`2Cpi{#rNm;c)L6`w7K`ILJr+l0Dan_Sd^yRl z19@F+iN&`Jm9c*YPiu)y?&}u)y3HNr7D?R-!Qaxm-8aZ4n!DjUg_dqlgPzDZ>{D+X z&JX@LoEg&Mu=Ud8s^PuB#<+(;PgNYY{Ps8;p*!PnM%^8UW4SgCZLW*MS~SFAEgIv{ z=A&_F^YJ*exhW3)vpEj^vn3AwQ^ccxTI1gVbjG89dg3Sj2}+MgZSnD_Esf&o6rWA; zxfIWj$5IO7v6P~CEM;jtmQoy#rL2g@QcB{nl+{#9DV0)2rIg3-2L8JEy?_<*pTYQ2 zy5m?2?~dhm?2hF|c1Qi*?x^429Y;recN`tPy5s0b?2eh5Ua7D}z8)GA7??T#(k&>ipd8%dk!fu&n}VCl{tXuqcimLA>%$4kc^ z=v`?flTI=jJy7#VlFTH@F(jGa1M4!c2YN^W$rq9QQj#ww`4uEzLh`Fgb7>EpwaR+n z8-#VFp@Q;mq`aGZU~6n44V68xwX1qyYj5v?t-TX;s_@@ZuqDUz#9Cza#99P;qJ_CV zG4GU~C>h?1+PN3Cb1!P=Ud50%yBFrI?uF~oyM+5mvX&(4NYa{sd7TNE*OP#G!xK<* z#{?`TG6AjfCZJXR1S~5)VGDTp>;&}lxe560tbpQ06knQv@6lEer-V4GiBm?La^kEb zPDMf=kldJnZ`?K~Tm-l!p+8_{!fk)DiK+yA2e*@Q?WSCNC|3>T+E2M^DOVlkYM@+= zlnSPzPkLVjEf1;F|Cf+6f9pXm{?-3bOQ12oc-Y>>Y83OcLacmm= z$-8(3>?xGt8W~p0(4w$hA%rORErempuhT3l*CP%>)U!y2Yam29{D0ddFZqKlOb28* z5kkyYAn7t0u90Dt4C`bFf09r7{4z|HA$;IQda5DB^6F(c1P+O)AHFXn{u&up%kWzW zJ17hLC=O1yK#2V^5klk_NPd}-4ihBmn+PGwZG#Zy7P&Y~b+ev;3=3pf2;nWxTc(vs zdJWO@r%eoFeQP1a_S}Xc=#BGmSP0=Q&PS%LMHScit`F=^K%5aF} z2PB;>!vYx=%5aek*T`_K469{0#LMMOl;I)>vAngC-X=qfkLBWII7EgMW%#WOEiqC~ zhTCKq=*s*884mF?y-0>@Wmql4Z8H2;hL%{VSB67mm@UIX8Lp9Gl?>}-=y_ae8NwgbGhc=U|HX8f5njf0l?)61BGY9EKU=~1Wmq7?G8tA~#p!i2 zOud@vfD8*{SSG`|5u7frk>L#-`ehi9VSx;rx*;6MIhfBR)vbsN)lGAz4;=_(n}-DDGi-zYJ4l7?5Fs z49jF#H=oN93#7d=OqF3kh6P6YLY$YspAw+(s;OlZK0dXM!mpr$KDfVRm@3173=3pfCPVR*l$T-ZGfW3$SRlhP8CJ=#PKNN4DqNln zQ)L*CVSx@Ve%^)ckzrs1(*-iD zf)LlGIvM(3ko{?dFS2|tvYvl9ZQWfeg!Jn7UD>%diYWEWb*Ibutv2 zm|p-P`bF9QW9>b_xn+xa^M9Vt zpqV*y=AL`*sWWrR3ce1Q>Ul`Q!-CZvT5h`F8o}*?2Lula9uhok^Y7Hp4+*ZhOY$jr zK=7d8>38e+8o}*?2L!(f%K+|GU2u)ycEJOJ2L&tKJx%2?U2u)y zcEJOJ2LUo`>A$Ypr8G>sB2L!hZ4hkL+ zJSccbFs|j{@0cMtAUG&^hu~d;cMBdCyhpHlQSv8vy5JdtYXr9o9uT}s@NU6-?C?uU zJv)D>2N&q*au!@8xLxpo;6cGdf`p^f{lMm ze4(M+S&_y=f`Es2L$gBJScdV z;N602M(T9i1rG=w6g(t&Sg;zU<);g-5!^0#K=7d8U4nND-Xqu;tYxt z@fyz%91y%q@Nk(tSFUkT@D9NP6E%NO@Q~nP!D^C@pDwsYaJ%3E!GnT_1P==~rs(Hq z2o4Ai3f?7nx8Oa3jeX@g!2!WR!R^y!5;c(>pg3p76< zI4F3B;9Y`u3*IBxI6yx)4E%uFzh}pRIy@+NNN~+U&2JYxAb3#lF2O^BhXuDEq@NoQ zyhHGy;9Y`;1n(9+EEvaUxSvfITqC$$@POb!!9#-g2sSG8^D_ho1P2B05IiV&NN`Q1 ze6L_*vE)PW48b*m1A>EscL?4kc(7VOKO}fqusT@YBX~gY^g}eiMsT~}0l|ZUhXfA` zRx2c*f@=h~3my8#b`=z!os!9#+F1*>K)S0lJx@BlFD?}CQ~&>UGRWl97f}OPZwMxxLxpo;32`ocKq@BxdFk0 zf`@VZk^)$N3%r=5`}^dQkIg1P=%v6g(t& zSg`7l_Y1BOJRo>b@Q~nP!73!r39b=5Ab3#lkj)Qk`9Z;F1*@3I39b>`E_gujpy26oEng$JUGRY5LBT_UhXuFy>E{Ln4+|5pA=o|2T&v&-(3g2D6 zU-=&OJ?$$hXf9|iIHq7r!Ontn3VvDeWWjRjx5}_a9-iTg@M8&3PXik3wIV? zTzGZiErkyjK3_Oo_)%e=-|rvopW$EVKiFUEZ}PYJkMsBYPx4>nzs7%y|4YA7G_`2| zq7_BWMeRkAq8}8UUvyc~HAOcSJzVre(bq-g#q*1gD?X$6XT|pyzgYZ!v9ILhlFLdS zEP1Zv^OC#~qee^|vEPV=BdSNN8PPf7ff2tM@!5zwMm{m}`H`=Td}rimBflD1GHUFo z38Q9>S~P0;sP&`TMkPjlcht^N=Z^Zxs2fK;HtK~@Z;kqV)R@teM;|b{a`dv%fzgel zk00GNddKMRkN)xK!O?e*{?+K;kA8OaE2H!FnZ3{Qed_l)exJ}jTle|?K0n##k$u*U z`RVkulGX`RkaE#}tk&89Q<8L1UMXtsT2*>@jo7aKRo`= z;3^k=0HmcCg!v#g@*kh0pcb!D5%l4YlqeZTC&vdhY@ zF1w-Z*0Oub9xi*V?Afwc%ib#cr0lD*yz-IdY-;l~qpO}K5sT@&t~@Y;lrCKOMc zHnDo*krTf+@rM&Ho_Nc|M<%{7@zsfYCjM*U$VrnXO`o)A(vg!wlX@rhPda(hIg@@m z>CQ>_PWp7x7n97%BPN$mo;~@1$<>qVCa;@(?Bw9&zR6oApE>!`$=6Q4Y4Tl@ADsN# z$(p6i&bn&WZL{v0^}wv(&U$6mXS2-N`^-Lg z_Q|tK+t`2d{+0Vj_CIO=^Y*`X|6BJT-oI$h)H#RGSvBW>=7i^*Jm&{< zZkqGRoEPTIoomfKZ|+rdZudeKRj_e%bsf^JmUKV1DKNgXh=GKXU&1`A5%ho8L9RcYbpI_W7sIKXZOQhJixd zC+^31F%m<;7#yx0j}fE{+;VUy#gVpso`F{h(#oLkMowynOZlrXdYEi$%-Q|B!N2yn^)bkgl{0?qO{}A_> zf1-}Z{b3>XH)X+T(xv`ab>sAY1UG4)pbCv%Rb<34!p2ppkyMk6el^+Hf|L7O)xO3y zHPtu~2IEO;p7C8(VVtIx8mFsT+=af{_?}vC>{OeKAE@JvvsIgMjtUy*sgQ9YPU2sL zN%>;cXKfeEeXa3`y2bd7 zy2E%BXYhZA6Zns*`;Eud1Gpi4$aq5i&Ui{aZ9IeX_Rr$9{d2gX`9<}TLHDP>qTV+C zigWdEsE>`eaI*ew^*7^PoUMOfeQA7v)Ab*#e;J?PeEp~D-?)QKnSWEJ`K8J;|Dk;5 zKUIZ~#+Ys@b>{0ULQ1{!aSdQ% zXFcGRzdsW2`MU|O`(Pd5H}4a?`x1hOJx`LaKH3U+?t0?XgpUE7#PGKvqF?N@02{Z& z0Bd(90jC{Hk|+HSLH+FgpAvn^GX#%#ir_~qbNx|7Cw6WF^yck?lPI6ZJb5x;-7zFH zeE(^HKYDm4;2(ETt~NbR@bUT!04F|tDd5~^C@0s{lKg)2e*$<(Ej?w$2;Lnd{`0N+ zjk`c6cHRi+eQ#pt&%oLLqB{UL@46=|_E+F|zqE17!{F$zIPZbSKqq!SlkwCOJuiWC z&13Z5r#R=o-Tf-)>38h`%>MR=o8AV0zxgD;bnrvKHK!4L;9-)#?UFA5pE~|ufK46$ z0etO81P_`^^18ls3S}?&!YF}P2@bwo0=VdUl9_u7mF>zKsZ4a5BUg_`Y~=Itfd9N^ zBH&vL+kZf%x}M>qmlORE!@n@>X1Ht?@uxBT7sEXaOP{89-5s8a)J|b|!`-t$|Kf7u zKe|7`pEF#0!94I=KcIYiTi_v290bmlzbAME=eGU3l=F*DCOC)TK6TZIZTTLxgqfER zo%amEl{ZrQ=U+(Wc5VUDpQNaL>Nfn;Q-?xEx5?9*sT|I1CYfWSME_5e=;uD6G}GG# z^%rjr2VbW=e|0>`>o%ahCH@QsrRKK&lS zUmZj6N`_A{O#jl2Naxujjsg7KB*~*H+d(g>?*!Cey5D?y%ff~zI4he-X2stL&SiKM z!#IyN@9v*~%n8YDfU~#;U;86HJCkEi{0q?=jynah`^`TC@X1A#&hPoFRVC4h<9+~s zFT;aBJ|FZsr(XnE$f-Tgsr4r=2dDJ7LBP}zHvo?M!_NTs;SuTeHT0H=*W3ZlTP%OU z1;jaIKBd2~o8X7161?bSYCpOy&3o!z(A5n6t0?xlo2j(Fc=FfaZ{9`p5Yum+@*8k` zJX-GUDJ{R>{NF=Tm!WPUy5ti(|LE{kGid&aX4z@Blsa zDfa^XT{C&S)ipArk5bsg(EHW;dv$4N^Z)z0%PzO-@6qgb(Wlfx-v5N);&Um7*{$fz zH;C_TORL_X+;%hkZ{$B(P4D_|B>!Ji{%_LkNzur&oJ;&OKjs?I-*_~C%dH2JjQ%2B*LU1^8#p@Ur)N^%*C`}BN%8`Q z%g?+Q^xs~jG_^i9>xEx~qv^7jscma|%8R4{YWnz>UHxs_OZPZ@ugr9wLtkOI=%wE{ zX?oxF%NKv|@E;CR9=s{*8AOlv-dX1Vm4A2aDZHiqMe3nC|6cl@m#8Ode(Z&3bJCB$ z@Up}AK6}oV71+MK0`~Sk>QF%ZIye6F<2Q}+!AStpubyLPySj|+Upb1NSGU&yCCam#&L019dw=0oT16Kbu z&>N6D1Ge}K(5-4F=#7A;Iu70f19tdq(Eo#+8mbM@RPD%}p@M+;Jv!vbP$585g^>#b zQ^0|sJK+m3V7DIxx*K^hRRp;(@Ecx>LH`iBFw{AKrn(ThFySw#2D}>n2U88A-f)93 z*WR`8Mwse46#%?m)q#HlAbxdOHGsYe&{RK#hr+-XwpE~SQH`K~2572Z!ee2mdjL)R z`dAa_mjO-q8t{85>Q8{C`m#G>Lk$Dsx8Mxi!V5p{(V!O? z$AUfp5M^#04|*Y>2|q&{V5JcRTw#R3KNQeZM;I39BLPj^2-pR>3D8u{@MV}--s%Bd z4}XTCHUOfW;nOhTnb-^%hHnGq35fE9j|1fiXsRE;&ta-_jqTu^2Wa9Jz>@$kFir;i zm2oQg4+5I%*TxRe4*{C+ESwJbC*w@O*Wm>*aZBG>hia6F2r<0lE~>RAuIspvwVG+~IdM=!t-) znq=+*JsHqcQ_O2Y?+a+E!_4bJ9}Z~Zp1&Ib1NhxJQ`MTc0M?ne0^)ar05_PwfMg3G z+Nyac=#7A;I?B8o^d><3y0v)^=%WEmb&Po*=wkuVp3Mh99}kFfHXj6RGamwMH+KUD z%|`$`%trx3=I;Q*=Hq}Ce%%h`Z$1gwWj+nqZ9ao^B7mkk0l#l&s2)HQzY_EU=w3im z#mtugi^a0{FLG#a`6M&{lny-OQ0h+4cd>!-_KvQis_ki98XsQ#bATp&_4%6E#xf&{R=?ULS8lKI{{5~SKc9@?*_#9lXocSdjL`Xd4~f&k{1B{O9+xe=MMxe>`AbejDJz{2<^#`60mSd6krurcNYS147;#740F3=wXn(CAMYXLvazaE^= z08RC`{2M`k4rt=e%b$Y&0?<@n=HCMPAAsl)`L}}p3J^Ua|L1^T=l=qn{{_Sd=DQPc zvhQxdDZYCE_x0TeIMw$6WTpX{xG(cTzzF9yVX?Rx@r6(Hto-;;XB_k99*qVF^CPXa`{@_i2aWI&8#zApez z^Zf&y(*ZG;`Mv@?+xIo#4}IT&e-0perSCtW&jZBl<}*w~T>xmRANle?UkHdc>GOfU z7!YmJR|xu2K(snv5$LM`O?8d01oX9l&?0;zL0=CDoxwL6^v!_K8GK_v{|pfQ*EbII z-GJ!7zEaTl0GjGvAAW~Q-3Mr@`+XBZKLCi?);AgSgMgS}efxsm4T%2kn+Ez3K=gOt z4A74PqQCoQg8m(#sUGvq2K_josebR91NsR-Q~kj=5A>6Oruw6A0qAD{P4%qrK+w+t zn(BGqL7-m%L=W;+fPM)OJ;=8h^eccEKMSfruLCr3JLxjOWI;9HmV!e7Pb@eTu_pnd zjtUM3eKH{Gs2~7%YC#=11Ar!enX&=!w1QROoDPUlqM#A&Am|$aO?7KQ2=KN73-IR!UEtpiXsTZnL_psGh?%jV2lQQlrW!8j1-%E* zRDUgqgMI_hRBsk+2K^QwejB+U3HlvCQ+-&_5BO2RR=|%7wgY}ra1!9B1t$Z3R&XjL z{|0EP&kJ^d{yU(lz9={y^p}9pnhMVZ^cC&|EGRq+u(0rKK!4#mfJKGpL9!UoRO1RS z06iWMV@u(MfKv)D2HdysQoyN&mjO;IyaI4~;gyh_0cfiI3ayNFD-cs+EO52V7P73&7QdcLFvR-VJy};XQyy z7TyQRHGt593LgO72?#By@IlbsfTrpxdHL01E!-4?9}Jfx@va7EEZz}})wh>Zb4(=Iw1u&?M?z|BR+115^v z5Ss)U7M%=u zUD2t4PvX}W4D}SCsh%!69rPaoP4!ICnSjq0?F4+T=q&J`2ZZiabT;6NMdtv%Qgj~p ze*%O(TXX^FR{>$q7F`JXFMz1KqKiQf1ETJVE(QHpK-68)WuV^#MBNo#0s3t~)Lqe) zpx*_AhFNqq=>Gs>q$=J8dORTX$>M84F9JkgE507EviL^8n&O{=9{_{}S9}ZTIzU)( z#kYcP0K|+_{BzJJ17gN0{srKv#dm@;0EjX#z8mng;(Gv3FTM}(jN%6X&n$ir@O#A% z0q!i`4fy@yNAT2HfY2q19|e6jAasf1-+?{{5HnQq z#jgXtSiA@D<>EI0hl}3={A=+$fFBgU2l!F(2Y_D|e+2l?;!gnoUHloKD)}5RzvK&~ z?*qh4QSuMK5hY&%jw<;YaD2%(fMq5B0i04|^QTr_7T z;15d<1w6OpaKMX80)Un9AmNS^V*xy2r{|dY*d+xE@Z^%h1*!()>H>If{#~>lyGL#>UZ9fd@)7Id8+vS?1vpN&Wjw(X#|PDO z>Xh;80sjK}CAFrMevST&(h9)ul`aPSerXlp4@#E-{;;$f@Z8cv0M9R7px#gyLGlfC z2_)Z8KQ28S@N!7Lp?(6%H`G<70l+~>zNM~%W#$u`L-G=Z3284l5eZuK=N(%+tOyh#~}HxdJ2;7sy{;VUG-vV3*gI; zd{_MmlJBZlOE&`k1(NTpcOm({dLNSSs}D;z0e%e0_tmG6d|&;o^k~4pLlV12Ao+p% z7bHJW|BJVOp#BZX53p2Rja@k7%PIiN$`%7oD5HHjlggF>PT|<8Wygb_UbaAes%Am* zQ?)-NKUH(fssQIh@>6vHBtKOP%MJlt1j*0T5=efgmO}C~wY;ni@L))OrdB}mOLYWd zzf@}w`=we})&jTzv0tiIjyo_S!Dbhl0|TwEe0$oj|2M4mjM=+R|AeH-wZgae1R%9 z#+FwAj)!EiF`+yJI0=%)#uP|m7f-nbI31F+;f<|=C$$b9(H7N%UU8Z_3p=zfg|GDn zbu0E^J*a-8o@S$au{7qw%sajNcl+6fTG9d4J0@^QY#|$PeV_`$qWQ^?is-##a}_ z3VvPiXu-z9;|k-2cNPAj@ErfE{x|%|qVE>nSG1(~y5et&r=Wi~nRnK_b*o0GJB!W-ysPN^)g#p1Mdz;>p?+EP zW59cgZUVfw=w874it-0&J1|Ch{KJl5b;JB8p5cwb%pq|0{C8&(&L<%M&YmA>BQl+L z=1$@n7%?d&`ghU%vh{@1f0 z5(^WjYLQwU+!BmdRV+nZq|a)qCu+rE)opFdD%(IcZ0n0BQipZeVTxHo5p~gc%pyLA zh+Vyu_+3`2Es#nDL*2brER`e)jtIs3V=2V1vQiDP{$48)OvMwFhsp|OHU(3mZYwFA zdMgwUTN^qn?!cR!>9~5 zj52rPdad4gV!IYx+aHYvJEB&5g=(ye_x1%7c1Q|J;u<#h2U8M-`VRHz2cl6cl#0Y- z2yH+0_%T%quEDiVxVs5NMmu?p3k=vr8d>JM$N3no)hYhfS>?ux^f zwY6!(7FVhe!@78EiI46uM0*J2sYM7xOD^*+Y#als#M>pT2x(! zvWj#@Lcx?(Y1bIuU{?xcQwa*Yl~Sn|FI!x@qwNs;Z)X zNnQ1_+C>$M8)_FXRx38e6X9BPn;srz7JthKwOFl&eAJ3{rMjs^5I~#j&?SNZ^`g~I z|070!XQva(ql!Ehjfa9!YI{2TZG&Rv65V7gLAZnA5*i+tF8P+sBC?LUzm?ixZSIet z@7D&C7P!)+gmRk>7~D4&FJFR2utcqfC|((g_x7R_QbrMq2u`AJMq*Z!#}n{T16Hut z4pFmj3Pz$G@ojpTghZ2-=(2R_a8s+Otio%mRNbQb#g&VeEm~Y(Ut3?d41-|xl0fy6 z%9YD2m((qv)m05k0#&sY)zy{DS5{ZmEv~9qSy@#dSiUr%R>l*(b;v{)X1JFA zjsUVB>7sGHK9cN<2DjIRvRJht@X&BDfG7E_t?@pnGYXBvO2n*G6DHYUm(>_1)&{FD zy1g|{fx7-=Dh^$OXk9td`iN1Bk;4rZ(!q_f zq|4Y~g(7_sl*n2hnec&u@RmpjqIRO|5?06xQ{M@w)yPpmD+Z*NSrjqylsKih4h4t85Mh_ICK&7L z=eX7gCgp%?u@dxAYcazGR8u4j9YNE`erLoEwDiUMlM=BZv?Yw%z%a-oSC{uB#5^Jp#3cp7`BCoEGMx8fqi9qFY7^@;sTy$JhcM@sz#wEDc+M4W2#QXcQUXJJG ziC_%hDFJGo^;R;{6|*^Zegplf?zl&a+73FsPNUwUnT2|V4&%e17i(I#yw*f8mUNjs zm?o@n?RG7M7J|{$!$705@KufgKi?Z+4NrQCe$vig8k34K7?ZSh2G+!5T`N&fF|I(( z%M6pux?rl?E8~XOMnXM0rlmijiOedd#+HJ0;dbH7YR;C3LJh_w61LD-(2=qQkOV3# zo3Crc<-0}Z^3u9J&BhpjQhhCv6o|F4RNr?{?)Kn7YFTTrE1)){I$O5KLNr2fn7U$r zQV+<8wUY7vLI=xynN0mFMgc2ugMkMp0U7)MDbvh<<@B2&SGl__a27 zB}|6+*8aZMxLdQ*;E2`I-)Bz>3DjmMSTty^wxWF`@4h-1Z4B#CGN4vrm`%i}&$ztS z)b><3ysjI@qb(*)8M;j@jjv0nvek-OeO`GQ!m_#c0GA!3)5%JvDc*t3lEtRfvzT=- zN;+V1WkqZVh9mJTZe1{u#iL<3o6BQ+mTawM_2m!_py^;*h^4X~z|7qX4L^(Dm<-44 zVx|vU8Qf+E?eg-lBoz;b5_Fz$=29B$J0s|@Di8y(n-Gt9tUhvkL8Hfvm_$R7i3a5A zct=Nsc=mvg^iviMQZA308irP3(yWHIDPuXLh`|~_8n>=H62+t%ORmM>2Pu}|(T1mO z&6EM%9y=f=oQ7VgIK)Qhq^HS+0t1#Qt$;YQ40z5!FItJ{-@4xjuPz$I#H`cDB%P43 zo}=YW$YsX->CK1R4KoMW+)^2XY;GYv(B_WQgKc`8JK(1CTY6JGjFa|3daPxooR3G(*(s2WWu(sW@izt-(YXx-{tpXq;e& zSgEFV&>K%#7h)XO|ktniWk zqBUN$+8`Qd$_X|?RZPLv;xK5KPuHB&^vF7Lo+TjReW%0BC?<#R$$A}Lmhm)mG9P6o zO*G^P3Mg2Mb(PC2>gp?&EUky93~GM$k|p&GwJRGIEw2hxE~=}lsH$94tB$UF8S4ylH~0&9+>~^|P?HPTQ7sYE_*=+VvHS7B8-?TiQ_9P_?XnasBc@W##hfW!06{ z4VBe(E9)z2E9&c=ai(rvV?93)w_sv>AJ1-47#opPcQ0brMT4nMv_TPSVNFj0&WM0; zEB;^2=>%Hp8XMJ`MpeH?!428nv_>_rQ5)B&h9*_FmPHzq$$nI)4oC|@sAYRHW%Vv> zY=*wvYaJO$5xHTVIvVwz(xtHu+qBolYd5IX8&vBC^_|}6+7?ycsy4K$)>bV3kv{6N zmNsQuOIa*fOPjK-rA@jQf5ywtXzAXlOlt{+kzp<2D`gVf zq}W>8WY1tU-)!<&OPiF(T7r~gEuma8Mtl9Jt=(si@;a7uBUt!eYsq=F7)Sg@ueG#E zIo1+#=CzhKDQ6zbdb!N7c*3=oHgW6pT1#$Q)YFAdhTE`fEp1Zi))F-d+c2_Qo->K+ z6j*m~j3fG_G;4_)mB(5_Es(X9Z7sR^^Nj4&SsZK0&VbiivU#?(WQV=hlFhTNC6uLD zOQ;ZSEoE0RO*L^b1DOKumpttCCM&}87ok=6xk$$pPxE$QYa){^c>+FC;KrCCe%lcJH@ zhEdue<}zJt$<2b-WU*7D79-Y@D+s1zExBCRT5@Yv8eD6f+Czr5q(@1zmPkIAwS-Qa zWi6qVXIe{6Q_irK>=Mefe)KSz&9w)(?3kR^5=Mnw){;&=!|Fg5b6ZPjDmknr5>I3$ zk;_`bH`08NC7aV)LZ$A-TB3%P%UVM1I@Xf@Fvk#bCj<{G(^^7pxz-ZZ6T88+rbpHi zaufr|wwAcPh_&QSG)c+>TT6)7p1FG0T5@<^YYAVLZY^m>rnQ8;rCCeVh2c?kr){#9 z^aqg7TZS-~<240H(6*M`Z*yiD#5x0gy0xVHjn`U|H#*jm&V10e%aF^A`O}*Zog6ut zGY8n*QW=A6ZXrF;=8n^YZF-zL;HL9E))MN?Yb{~W&9s(0U!n~W-4>}DFc|8mr6*+Y z>^_~rcKQJtU@mJ3Y;7%3JIJ(_xNV5FglS!yGc;vu^N57{3({u=F=oId#WJ6&kN0DpAIs>f$qGk;v?Lo;4OnW1ffK6hPi(R3 zlR?|yz#30b)iI=HK_+Nz+YoX{TChYvwi1qi21bD!&2q5HU`#=O4s(!gCQY)V zT$6RZ$p);@MB{xTwyvv>6f5?cI3gJw$cULH5AiY-+ih+t>+tE35SC-oMJ;XLi5%qw zUfP7kS)|WK>%vF3#?dKY{Ob?lohMA<&1>KVPGH@MN{e( zY*RzJF*uE3dzBRX7wS4fvXg-*ENv2k^4}1)78A*i?3(%VQRzld)qLLg$ z!?ti)3TGy)+eer~+D;3%c4PDi<65N^heg}kBHDB5FzGSJ9l%e!AucsHh|EUNC@q&G zinE84^@Xmmt=G65dbh4Qmq+b8lb7K3>B{tCo`bU-pVS(&I%%>2Nr_>efLlDpi(V8P z=S3KM6BqbV(==@iFd!0xGq`55Ykpx7cpQ9p^tIwL&cXdjs4SqiJhzFx>l zMltdAMtChpKZ~Ufy>yKrh6lYePnjp*i^BUI+T)Xal0i{n zYO06BQUVyIuzrcW|4(fwM z$$4+H?C~K}zmpVnVe6HH%tu7q6G_@3X(cjcMC%h7Om$d>J}QD0Xj>3j+7wKttd3x^ zhc-Iu!q8P^hj@Ob#osJ5*0U7owVVi|?oBLDP`eQTfo>+@HQ@_O4lI$>b9=pe& zLg>?VQwhQ+2)eG@3iZ@Upc&I1a|r~x9oc@YSYy43#~9nB*%(Vu{F*obCjTg5Y!ij2 zpWU9=?hxGWVcMZsALNegKtm6sjl~*-dt+^h4RJWv>_Br2^%U%NgEl1((zGf5 z0XwESwu-hM*g@UA>`-%TWyFexlXlqAzZ{M{?u45x+W6)Kn`1gb4})`vB{NruracUp z_Dk$xSlF~kYe!LsrsBjj*NxKYjP@r9_h|$dE~=2$^}-68iiKT4IzY-g8;JGTbc;xC zH^BU+D8^FI(MXI?V{(JF1)Fnap5l;R-)@M}##LRNn!+{(=AcwHp|eM$WLO;)!K!r= zRG&y69O+seRazBg<;PX78j_(P^wA8iR;KMZ%%3b%7qx=$F{;i;6eS3PRrlz28OXp0 zMdMhs)SsxU8=)}QI|xkTu6C<7q7mB4FI#oN-qr->dX$~+XaRfbNN((-iB*?MHaGoa zH&|G|fGj!|;}#hG(B3iLcW+N(yJi%MtSon-cXvlRpyQ&(qUeF}h+<9O!=;^Ekx+!@ zG@72$BVFbutemWgCzGBhF}&yh$SuB{b^yCN3A5{@y_N>R~vAnpi1&6-IrP$m#wy_0XH6_YJ6*BCx+k< zwiI*5+(-=g8!T8m9(fstGTGVfLi)a&7!B%@6_+VfB_?TP)Sk=rM3hTtZxZ4=$|w(4 z+K$lO8$E=JjZ})pq#a5LSIcm}=VpX4op&trfMm~j=;}1A%K(JUfv8yC(5J|jZjG(J8Fd|WZ(!2w->jl#FJ(1o`SV5G{wA2Z=@hh-pADFjU1LsiwTWHjT zs)+S&+Y`n#X_?S;c_UGMgvS~uyfPz<&32sMX5dv8mWjL2xF{fwzl|W#(0GxD=vE6I z8=nDEiWPG`bspB?k=re#%WJzZngmrB$2?9?G^HrWwy^AhTh$K+H4rZGK$63hDqhIi zHuO*Cp^($U>*&EQemcGtBy>Y!;7OkLSZmbO3d|?L!+P4x^khLCL_Ir}K1;nVy{%$x3w!p$5B_%r&ZXI|+ zgS|N;ojTlrMqk@chiGD}|c;HX*96>__o(u`9FVwC0%mIlY-7cbqday7May zEZHxR-jF+zG&c6tWk1&(!@f#5viB}ghXUoD=NPZDpZ9Ff&yJ*2(W=~|E!iTi-4W5p zvg63|)w)`C9M293-i44IX`e{jTRhtt*^i+D8~P&AcvpXp59RSV`WtFMfP)zG1AQKr8#tmy$Zra$eo0KLC(}2#Vcnl+imCr*}2k#&EDf%gE-)#?Y^AP z!?vN*ID1bZtq;=LeU3bMdth#nHTrl`))eM^HfoaVYj1+k1js;^PO~?urr@@{MbV&* zvbF0k`zvrx123=(f=b7S|ZVu9v+(2omMx_9tZzxhX*}N|v&O=qM{=KJ zr;o-N$;Ebur@ctj$Klh;@g#fH$Y`bEG5dW1KIxauUxPJOSn<3MJUf>2(6B9J@lLwz zcs-`lp6~29N*NAvI<1%0H}njY&G-7HNbk(`tUmsmBT;VOxt<7g!B5qk&^}U-yg@np z<CS@+TP-H0c5AOG7jrEM;^7sj>FAaMWR28#;o)Oxn#B|N)~<;+knU+pi2VI zK2$3X>}9>n>E1cw_>02dCIN2{O{L!|voad&%8|I!S8~MV=$1L8nj*1Alq|RMT+!M~ zmi@`%Ez1#s!%UX#Ov{c&K?LpN>RILJYMy%AQ}*NfwPaHTQ`xb)mFz86CIr29nEkL` z;mqbcRcFsTdaT@=IJ|zneW~pY`dD9fa&RqUyrnUHWg^%`Td1>TP!72x8k4n9VE9Z{ z&If6S3aRFeF;dO+ibHnt@VDc9L?0G%bG#e63mLRDq49Ek_T#L8HNtbeEjz9uk%%Yu z5{Ejq4^(H>JhoWTVcYBkX%QuxOU0KvhWrw_W1I;lJ2`AGlCz`Pac+Z!-H;tkZdiR0 zKz1B-J35LV#@caqBpSQfoVg|k3tJeL$4p4J zl6jXck%(r+X#2nxm6Y71wT^5@<6U|-fS(D<5qA>FgXVh#8{t<>Ktt5I3<+LiVPYc( z6hZBERkSw6-%VZzy*fvPyIRV8a^ko0u5`q0OhlN;Y9w8s!J!^IAsC@?PKpt%6$ENm zK{+Q3rwtvj1PR++`zzeV7ztA?@Qj3REG(*t3>HZ_CVfU6iSI40kJe>q)g$8>i`IeM zH&XJtYk0Dd#-JifW6&cWKMWV9H|%&qQLnt%DJdg2@ad@fP4Lc0wQ%07Fmq}XRK`q_ zmz#-05PQV=ouy(;KE@r@n+KDH(``H+93et0lQY+#v1nh(?CoEHVk-iFSMEa-SfjW7ZT!tx(!q8- za=-B#JwYjB4=3Wv>TwD~jD8evcW8UX5PmE%EG-o~YGV~GwDLi3mu`ds#$kDO z(2=g>Ir#oy9sn-WcMT*hgUzwdNOv-g^??`w=K0cjFVR|mf@hJ zk&5oEVcL^HTGiAC?9=k*VQ1_U^u!=}bOIc(=R^^rERzO=*HLbBdP+I-xnt-Vv{jE= zm4!1{cs7GWqge)vlKK`8E2sNy@$|ei3TLF9HbQ5_h0?RXUJr)kX~k?6Wmhp54L#=Z z(>mYj<$0D_#huHKW_WP<(M( zED|C%R0yn?Vl~NTY}}|ni621Q*ZX@sJe#zzMT3*DH0q_~XnConJKi4+V=1sP7K-*$ z9)bzbRKW0F&TFlt1v>@kR_C9V=ujd-fj>5NUD!` z)QU2BqTgq-!+QH;CcD|{rJQhTA)BCAVHVp+JIDAPP5|HG(4Gu=Gr}1qBMDnlu&+d3 zC@aHgDK>-eJhKB_e0HEgUl2n*(q`!)mmG0qNH|=(Vc875`meXVVGkcB^+MW=>?`A;})^1?M$2Em+ zj-tKO6IK`0 zBZ)ZgEjTKeh%lR~$g||a)#MH9og}K!y&H|TrSqe>>xy>hFpbU1Sir~VFM2K zqJ^=gr0-?3S+ueu926CWs4WSHO35)E-IXJqe_P@6@LS-d%q5SV5V_cte2#@FPCgf( zlF!9Q^10X@Fed2R$?k&&1kzE;gEU=GLv8M4%H9I4ub@%7N+6N3VBZ2=$4Q1yXkx1) zHsi>RbLaru5lw0}>0?}nOi<-H9PF`XT2|eePEng-%DoYXAE(?gpOSC_s40g=`|GrY zbX(vJF8mOMYpu>WcC+hkFAmqMoHLW1zD(6&LlpMEYp!#!l#9`skvLM%6X`tnjp=+e zOWyXI&Sg(PIt$l;*wY@rgc9V;rn9N(V4=bh@zVO(0V>zabS?kAN9YY)8S%318hwu( zEE$p6+(ed~{pogY;FN`pXNR1P!~7}qS(K)HnRI$PNNL+KJjrqmplS27diG3XSz@{B zV#+w!#7ui9E4HQ5_B$v@AnX)ryw5lmjAlTV0VL|#DzW#D$SGlG|A-wXGl(@kej8?w zU@uc>!5Ql!%$5rm+0UlsP*i*c6D*Wyf3GIfP8-t*kBrJqP3cFExeK{#)I6|wg7&s( zev_vpuvow>&l%;k%`6;Ab;Dmq9s}l3<++RA{4!6_PG4{CQabY}1Mt&MJV>B{n6h;Q$dmvjx?eo~qacuiEwrYekTgLhp?05yK zT@?%0TB(I(0B8lzyDt!@P?m8_y_MLQ3X%H^x)dKrsE==r(XM9Z@n%bCiZtkuj1Jo& z9_+>Yh8_Na@Cm%>&34E+CsrH=52YAf(-^kCU?)UnZ`13L(P~=7L3ig2&}xlM+nHk> z&yzhjj17OxUxTgcu#vDhm$DVa)VVLKiQCW1?n zsKRgvJNru7g)O}lmm(mCT1CrU7mR6jg%&)i7wCP39O9{xDH>9lfZ`2pB$b4n#9>^l zn@D-WSm);zZaW@fy#!-3s19(5mLG;oHi@%GcCY~<=l~Ll8;?98X!*T%3_ce9RNu>D z^QgXYJi!i%2*%2k&61TOela?J2Ys$q?i*sb;KfqCk#Ll7V~kO6a2sRJFz)oC^HY4D z>KF)7?EOYyb24PPOM2SK z<^Wl#OxSuS2dGeJjBx_ckWq&YYXff5!5-O!!)Q!8Buc}fd%bBmIvA%aZf@)11SUh&QZT2wwrf@vQyXm*p}CQ>WfH?0pO`^9DnDxzu@sjFooF_5>5G z{juPN_*TZE1Tftk@6>}UJ!-GtaSVCb`NB2JnYWowm2Ni&X3!UMS3<3%>>Q*qxO+LV zA{CB@SUU627kME$!XCjh72Pa>49zMl9tl7{%wlV`&SCS^!`E&)EGSe^&qC24Flgv$ z>>Q&j;8^)Va1$<`aP$Z4rWO-2p3+8K_IyHJej%G~iYDudN=-KsUz2#fCWz%(0@6%s z2=MID5jw@&HL!vWa}iq%FfD7g(;%~A#Aw!HNls&Bqzi*gZjFc1=iQpzwcHT3VK-!- z26Z`9IIu!ohWPQQ>A1|MU|%0p6PE!uO&6{?jk+9n1k8$}omKE6WbrX+B`tQVI+>3o z)5BqMx;n8r&Vaa))V7;5Hm362k;Oz_vUu9@3MZqR;8A=Pwi`}5`JnENQ4t=w{t#L7 zT;^g(h=I>6DoYFyIFPEXeiaf-vkL8#jTwV02QjG0z7`JBN6O&B zVb2id5%)?o)2({JXk%9l%@D`GErrjpNp8xXb_?Y+*g-Nan{j!ZcXizxlk0)CeO<}T z(OfZMJIyesyp180RlG$HsCw~=I|ck0ID?^m6q=|il=jK z`h1U~wK-BR2#VF<@h&dZjz;pZ>a*wB{eNRBf>OZFtc9esbB!`Vh3;@{LxG!`6OdlS zQZOkP>#Ee67&Gk8aMJSX@yw(*Wih!8B;5Vg{AOF*chX`-nG2O!WDN(|_~7qAAwipW z-r)&qCk4k~Ni3mdbk;d1+c`?B;W}k_G&6=jMO*kXd7N!`+oaC5CoFRac|V#`K~GCU z#fn!Xi=VdcE)B-}q&-Y|d07LMH!^*w^2Sj1X)H+Fn$91Q&0U3ozn8bir%O|@c+<2$ zIiAL)r#vF^rsj`aj} zlhuA(^jk8@tS;&i$XX-q*K!z*$rhY8j&r1QUWrcO1^bfyban}kpakvSL~E{ki9=I7 z*=Z6(SPZrgPn0CIaibm%^zM9hbXsVAUs`ZA<%q@(5vC!P=Nbvq*Lscu@aKBNw4Ue< z>)}}Ei_4J|VGLA~9CcE=D+`NK$Y8BFtfH+g$sbH<$ks4DO<b$i z>!olckh`2_C^trrzHZo|c&*L}p$B&KcXiS8E)U;C^L82!_ZeXWDESHK)_Ny9RBTR& zoJ~%Emu$s7>tVuuEjPeBY3Ro4$~1Q*<5Z+Bhs)6ol1+$|U51mn1XAzCW@9(1mDf<& zCxyK^o`|%ZOEF-FJ?~j{A9rSYmu0_ zlSg;zB<+zWgzRX#o`kNtL3eW_WnPXZrTRRJ2lzt1)kYt7cOPNrOI@%ph->`TLzD~w(r?B!q7a(Q;j zlmpzp??%Wn9`jQ;lZ`L%#0H&Oq3(EXodk9!WQ(2BGnP;{mm85-b3H$wm$ER$Rr@IvF0IfT&=V+K&Rd{x0fy& z(4^d-qXV|7$fL1lq3$%X3ai()?yWggeAsEE1KM+?=@u)c3G$6Eu7rEt4K7{c1nGHn z8y#miM+tR?=y%ZYPHLjA1g(4NP|Bew87x$}LTLe~cpWY|V6wSd<#UAaW`|DLiP!2M znxdIpe0W#}K)ctkCN4%{xX4`|eUQKbSyR zzD+SW1;S2i=+QaGM zb^^m&@A>z{kTT&pIpvArZO~crl#=#4XGKv`dx^r>lPK3*5+*>QtV6XI8j1POJnftfRjZ+ph`Y%L(=O6Qu7Y z-8F?Pj%Yobzd4P;W0ypdG+qbg&pyG29_D#)Z*lyb9LVH1z(KEHhf&3$F^FrXZgo@w zlp{Bb>G`7&XU-OK`oArg#-M^sWAF_yX&eO5+Ue#(qDqPh+(&jVWHJtT@WU-s0Bc z{wH(96`>L-U;CFM8|c)VXgBz zVdSnB{wDd9OturI*YSw%aOh>}93I=9czQw)rVfi9$zWk5!x-*J&_i@U$zfP_DPnUD zei(?G4PO`LIt^e()>?2%gfWnj7sIYj%)>!wQEtl<)p()U9u(8p-+`U2)Z$<{0P9Aw z0R;{l5@9~Q3@6{xC776q(HbWYr4!`7tYh?UJ`p3nY}geJeVM)fPV0!m##Vgv0#b6U zFpkCuSL@jU9DNi<$m2+md`Jwn0U_z7G#Gknk>@8p2;rkdJN*`fNalWZKw}2Te?(7H;uwU9-3j{ zN47Qe#Y5dnyL$K#Q4{^1R<`I70*zx zyS%inD(19q#cn=GL7Usk#5&xYrdHA=YWga*?3zGXQc>s?Ve+lns!+YSwVB6FlpGCs zx5G%A0+>s^IGalkr;YuNY&O^H*BS8CA|zC5+D0QGyo%-`%MN$S)oc>ofM$=j2o;MgU_M)A z$Kb#^hI{OsptW~l!W9w0y>4r;K|wgp@Jry=h&&uvaFO2rUN0xOErWyg_yp!=j|_ba z-sR!YiFus?57TySq)B3rghzzc+o+qvOeB#8KK^lc=uS<9Uhc*YrpT;xnm{4*2ksY4W7m=akHuos%pZrtMIGlwGkZt>i6J%evd#ef8 zTP9EXR5qK2goJZ(#Y*|n30WA-5g~s4OhG3s@w86@C-O)+ccS$8gHvDGQBv>D*>vX_ zX!`t{fvVFcpv{JQ@VnXs_3{mOO-wxcry>Bma0lIX&81%>=R$&})j~A0?EqIhHI_}b z81k5Tw7PUjTY~6*98aRs)uHcT^pc$DjB+@DF{}r(A;F^< z%HcL$R^(u*>+VNn7|kFR?@{!#$5cvKRMuD0@W=fh*Vb^0_`hUYQdVDj${4{SP)zA( z1DkLYFM1qSt>vdOn9)mIv@GrMuaD9hk`SIk7hrFn-0DYO27SLDh9fwoA;9|x#L9sx z#60~Y4!FXfM@na_wJe|GzELa@<3)B=1XuqNRf!Qc?J_tQc@!2pulz9!fKCT*ue zb)@b2L{rDbn6?4yy>MOc&cc$iHyVdsaY&x_vw}-S%Z&hU&>YkxVlnShq!9GM&aBDT zAn}74tn3*YTMgMAkRiw&G=oR&sZS@3pV>fJX*w0hS{)^`61(N>Ph3m;k}2FtfHKE- zFmawVMLgIE^s9=Rp}n5CU4WD}LM>v{0=0v-8f%C3aLzjk68dG>P{n0Qn0f=@*0`er!1}?x z`&3|cDWI$^!nD5Ml9YV&rB<98+B;TNsQhUfbVIhrMQ;)=tVT3IC)CS(4eg*VR410w zgL%w%(aPhjkOJp@S^aN@6_Xx6U5!c%4Z)?J7 zXLMF<;?iMSR3W3tiSEUD0PW`10^}>B@3zP)rqXF)GnXjJhD>-8M}{!FG$c$C-Z16V z8xAD!It#uT#|^F0Py2aeA|5GuP%DvXd6z&^XO@?U_y<^Yb{p{_JJ8Sf9!r^Vd$F4;ePu2_vPv2_kN>&iwRW5+#B;Eb zer|3~PdS#yIjFSQ0Rxq?SRhPhZpOKj7ajt=>oyBekTPmjl!_Nx+3&> zfZlKw4ngR_gB+0*kehhyVCFQ5DznX&D7aVQw$34jgV0Pe5CE)TF!#x|L* z?s)Yaeo!A|v{fHwxxTBtu*E;Nm)JCyR+2N$QB?^jDEy(tGkXvqjTbqv_+AN`Xvy5t(J4+41{u~SW3c21QlED2spOf=4WZ@h`zyH>7Wauk<_uF%3K?T6WlRh3OrUR&uajvQzj%lY3?MyJQG>^Caw*>Q z04F1CtwezTC&0x=9r$Q`t42?uRJpDX2dMUo;0gM#lT#h}h|^$C*p7>k;;e-nm}9ZEpc z(;o=v9r) z7-RHcqqPz3604W(k-A%F@WOVaWNa0Fw9nDFZR6iwCbf@+={MU(t@lTR`Mm+&-^{NQ zQrz<>cC<(knhknsYP1=oI zo`}q|JDwBk;^eTTE9&%>qWjg1lsb`UuEts{Fn&a0P^ zkn>{gPVzhqbJA%O9=2|z%)${D?QKztPL_bYU->=OSt7dYzgZi`K@Z(|YCY zc5R=5^u~of2~ai54Oz5!hxSKrO6TA(8#W4aWMi|l0>C$o(H={ew%)8llm#6ZZOp8)2tNPC%Cn<;wQ&xJ<5V(j8nD*K;~cW;v&DU197* zasv^%@YfBZQ@MeSv0y)L&`e+_Us(G^-MCu(oF!c!Ml)v+yKL>xwZFsVNJi*~NnK{< zaDxdl(n;P&DK)!oy4%(j4wF~Vavan{*M~q{{4{Ac-yW0EcJ#Rk7C{;tNzmfHXU?3Ns}p)0>P0lyuW1jssYdUb zdv;?Q1daQ{WGGh6V;hHukMM;kezaLvTa=8Jx?m_e>uWn#p~8X#fRzdK7f0B;Ah@3& z%sBw6x9wv>Ve^T~k#I;qG)AU&vad2q(cv#66@N0J_{)CmnUs6|z+Fe>7x}bLK=QNp-BP2SM25-U=e%!9r%Yx#N?q;3I zy>n?ok*qo`^@`UQygMgOO$>3OmVLD}fw7dsr(ht5i@_LEj|>j4+{p}kq>x&-LDmGu zYgKC^97r{cEn^&}8Lkc$Ag< zdg!}0lruw6F$cM;lQWn{8MoEJ#zvU4`VXaz?hK7fjGg;rp+mY%MO2{HxV`^m>WdAW zholAN0V*;kKkP76s*AG5xYAcA=TwQ-JCug9i;I+%dbG>V9TM?4dkprR4I`p%Aq8TB z4K;-M!-KP8%-SOL`LvdL7#hY}hf3QcX`~ljFUEIEOUYR0aI*u#VWkwDE*;V^-+f3u zee9~(-UxTfYnImvicSEfs{2FJ2-iBMo}QEF;Pw4M%Oe3UeVxc(T^>lo@vv)_dbSV8 zH>rZtK=qseMP{D{Yb@6ZKHwz-R7h_b%04#(WK$D{C3>EjfH zndV@9jqJ1@t1WuPY%DT$<_s*3i6d( zeoK(iW=){RS?LPTx+#j+dDbL2VmGxG3R3C5fG7mo$gthzLSRklHQAJ+Sb9x@N;S-E z6S7c_FzVi~^=Q?%m8?;OCAq!Eyv7Clgyi68{Y6=z`fu)c= zyGMq$olpR`mNSn^mh`6?L2IR*8l?4Rm$;-$M5J77HZzZ|d%_BJqM|z|WLsfH>mrhV zo2V@;Ubt2jEFf@a&V>|`i<71~tCWewP+bg$enTVD9`GKYJJs^X6v4+g_$?^>QqDv^ zSeC`P$xLo{0eR)I@IEO38^orYaOjmmSHSi|fvk*e5TzyAN}9>cmh7oVa)0_No2NVp z6L;#-be+DQ&{u}FlAuy7`|V2;W`XSXKf${Zm;soYGe&DYJkY=k%NoOR=o6#-llNU%YxwYbTj6ZyuJi#Cp#~ zXFpOpVtN4v$7W34wEi;fwk@2^vXcRVC`||2ewX>W2U61!7HdGy?kCyak3a4WWx8q$ z&1uW09iu-|GmPWw5#{ba3>8szWGf&YVswl_nlPe_G; zlx@fRSV&SefLEsXup7+6dr4bg2=`eC%~;gQSGsI>Wn{3caHadr;ut!_>yma?{ym*r zNDkGbBDFPhT)a;eo=dp40dT6Tsw%8W5PHsf0rA5<&l0d&BqfY9gjA#7QT?kM;S6D? z-RgYt3}M7R*VS2mZI+G1X9>+I=nR3>G?~*+S3b&ZP^Yuc85R=jt!WM!BwczwTVRk& zkF7(d0H`qXs)m=8_UX;4Hle3Gq3{6|b>+D}k0Mi}C~Xj=JiQiPYKJbtp#;puk5W*E zR2~XwB{XZ|JhUXe_+mPbbW=Fjo8+NIK&Xy6M}2U3B9B&gVgKpuN1LjArjPdMk~)`P zd&s2Kre1G^eNPv5~g^1%0TfFiwpC9q$2yuX6Vvl2Nx$6XOy*^?iv z)T)ow-d(z9vo^{?BYR5E9CVeY0ZXCQmAKnGRMA`=U)2Welrxf0uzS=71UOmDW_!`w zMu_Nhr3r!K{ks(4-{JDRKW%@aViHOE8oMmD`SGcz7#C-aG%Q=1rT$3P+DVD%S4-F_kQhMPEh8KPucR65AY6q_AV1iOP|m0D zDgl|RpDF>X!fQW-6-jzYS4PlTOR&S9~?VD*YFV4_lwh51n8iPQyGn9 zc2E^=MmfCySU)>GwIjo(f8!Zl`L(p-|66qWn;bC0OhPP#K^K1cL=3xQY+!(!F4>W( zqz8vJUSf!C?77-623t@@uQAkVGP0$@MPR9=FXh&YEb~s4%GO|ZiCEY^Fr3}RncDv3 z{*7a7u}tKC^@j0npF0Iiom&+&Y^pQRh7pj$#{8f*z(!IXtU_tW-tBJbQwU9oPPR)E zTE~$v4N8p;Jj`jEF^2i3fkM7bzp+8}3h#N7i*b4v6dK$Eqb+2`z2(;Tu)~&n>zL{O zU|t$R&@5C4Q2ThWziRtU_peuM3Xr0Jflrvf!7bw?!e)IICJrj8X2O!&^`B&;fvUIa zY3(?JI~{i)8tJc)mfZ2RzYyg1J;X;gJ&FjWlB9sBg#PTUDgUqH#a?p3v_q_}bXln3 zQ%b z1*Jlui3w5|*$owTaNOarF;g9^v~_}QcojgJ{-WTg8#l0g9UCo##ZT_-K(%k%=Y=?C zu7a;W?uj~Dn0B%|;tehpvWKP$5DzdliocqM^UxvpfQO57g*brczG&=kU`g#U+F|v# z0gJHVfXL_OXE0Z6H{f>Bt5z2J2F$uLeLJp;%+gA@9FI@rh(w=;+bxE!-O!iQvkBD0 zMTM|!@nhI^Da=^8hg6T4$ml(mT9pIR1*6CM?w7x7XNY=m#KQd=K-iSH2Laq|;N2^6 zFi*wS@9?;L(~-8_)O8-zr%z+3a!9z?@B8~c3vuLjFi$!2(DL3GtAz-GVfIMJ`wv%` zC-VrViD52z^9cm-I&0+si~-9&w7_#J!Pk2-9AK*EJ9$H<#f2Tg5A&_9*m4pEdOnJCEi?Z$*8^h}}fE_YOH?p!YzeqX@&4{}YGB%od+?d+W z6hmERL7hb+n#lAk^UL;}ec*~TqW)rb>RCS0(i_BAvbXeuCB~lB!nT+;pTAjW`K!9w z-=y{Ow^ZYodd2`vx1l(KOX;U(J#2zEL%KFbfzFTgmaW(1p}$a#R)P-DdDCa&ZOYc- z=_QY)@udaC%&IC~-3WE1eXc9yzKVB-LG*Y@moS+5an z-dE6csrPs}B-Of>18X&hwL~YnHKDAiU=$BOk{Zw!4c*+l6q(8RSM>R2cl3D;`!KD? z@JSR{;VhUxbMrinPqWX{z=YOu!#GBc4FEIpGH)jG$~ud_2CHz7enhjH<&U|cQZ9fo z^;OJR$E39!!Oq6@u1#ObtRd z8Y0*vv(GMhfS343by2CaZLLwL&Dn_)!^4Nu<6XXzkrhqVwx^G|>J7_ESihk*Ow0M& z(5*~1bwVfV1kzzn6QJl{{*-x}F!s-sj6B4YBjrOSpq9c4Xi)uY3(krRLiJJKLWow- zRY5xDS4?r}$bo)+OsNo-Laqw6iLsDMunS(@GcwfA-6R=0HIqTA9ED(5O(6VIDHAa? zr|E)+LWIbs;1$gjy!mpp5NKQ}+ct3G$V);Dv(H$@T~@zTAdgS=cf;8XQh+QImXwJV zLVJA!rw|fh)IEATF_ipQQL4}2a zZK_p5Y9zuQld&AzTSEM|-6cez_(X#TD#{z{PnA-q$ihP1Si3s8%b}>{VnpBQME1@_B4a1aQZ|c4WaEMn zUr<9Wt{#Z~R5MfBzX%4Tyr&UY~Z1GP|{#P$Aw918mP&!CQu9bnn1>jwt1@Zr+t$` z+fv~c7fG5}Wa{1n`|1e3tl!hvOx#NS#e1)0A_Iw{tS~@E9O-@RcH#|aV<##>A_EuN zS+it{WG$@^7fv^11ChzjQfBI9W+m=);>2~-H&-}8K$`TayaOCng)6u)SQiY8?9l|nBGeIBDi)jPQmXMm1%%%l+st< zDe`udByBpb?h2Ph(cGdh#x-}_aDS~`MP<@<`l`B01WmnCud$7g`Zz9XTAtJ^l*%Da z>cuo;UV@UQv!8WLeD|BzWZM=)A}fvliqDx$0oq69)C)h7J9t$5p^EekPhi={kL{J& zi-cIcaI))wo>(>NF@Qpvd-D1vR}bJnFnlui$Pz!D6e)ulGuT0aa!@qTFNgY6C9-8} zAZ}?D&069nJyUv@4Rj-XPEAxukK3ERs)p*c)N6{#9v$|xgo@35td`R7tl#ovw$4kV zxqrckAoU8qdJdIg8e$z}dYwW5_c&NCwMGAEA%aPve2r--g(}lL#R1C4$kcIF(Yf(v z8kpM>rvaOon?3zlo-Lj4t@+|RQptd=mej7*j3XujnwUrQ`T>FHlZ<-A7v_K%beY0M z0;EmdZE(l1zCHs@`scPokG#kQQEkTt`Pu=z9M*;h+PQwc$20z6=hz<81d}d%akIB= z<1r#WWt=V%0)CIA4jF6f$!r=KBIsyk$R-BwlW5Bu670cM|<2OtM9ZE}7lh(;xR z2lPpUdTOEEyQEj+4WVk;_l+BEJ zqVXst@wEs$u%hLzZqn&SxV39U=_O~Z(p~rXfjt|%Ty9bLW`R**RnSN|#eNNQySrT~ zJ~r$2TVXc(YlD3+DHp)fG7AC9XeZ9t2rx+fnS^GE>8GrK`0iuh!zH9swRC+IQ)st8 zzALqTMmYwk3LLzX3>1SLi&D^FS}=O!5iV^qBG{*skXKDh0hSPwBw|Ce#RK3d6`@oc+WU@RI=D+h<(P>7R_f2$K|$XoV})5Q#Bh5 zmq92IhH(I~yUy(ygO9Z=uhh>R37p>xBw4e8<;__#4Hj=XLugYOre_s= zK2)Ct*wS!412{FbRe#8y0p!xKJ@fo==$-+DNZ2*Q_gTP-L--6p)HL-Z!}tt}h&8Sr z%FhN=VK`3$rZ}XFNpHSo<=(x6>Ex;FS<)q+WXg1d*jI&iFJp`pgsArG)$yhnAz`6z zL=21x0Uuun(*ii=a1hy1@}!9d`73gSeUXS971UO!kubB$UZcKaJ2#TKzG3G9j!hrY zkx`R1P-$@b(EUQN=tpk0orz)?xD~zo3fXl`^mgz~=T3SN6M}>n|9-wuUN10|Y?b|#tDkt{{vCNY;Nai1psrbBGA1fAA zaD4Z{Gp0d0sg#3dImrGTm-1WN3wAl=NGYDBpQRJ_JI2O*VQw!w_sPpOY^<(qeaM={ zFGM3 zwk?Eq7wae_FZt{gxj;pYmre`mtX>LSilZvX`k>~KEJ3DP4fdr?i@?eT6^fFGtg3H| zM5k60Q@kP7<83`?DUA;EOzFbH1JWCy1+Zd?vC^PJ`J963`e_a+;)BjV%jj6Ys6`OX zQS-CSqX5@^#!97uto9V=I!fJdC|^Iful83^GocRF1wt!WdZ(}4C6s#fWpM?Xbfa5y z%s1qZxNQ}Aj+d5xpFZ?TlPtsBlm>j?!vfPz@8yzzPa@`O+n_OEn_n|n4zH9_K?>HE zmWA%==R-L_b2}w_HOlted(00a*vx3#)h9;_+#bbI^Z9)dsk+NTuzAI<3AJ4@u(!Oc zWC?3#O*1&shP&-09ny<^w@4=gWUPf>-vKr41gre28*M!IgtJr;o>Y}%$I@Y1@T-=l z|0*UZ1!yjbkxI>ph3KUb^>L{5igNp`DLQK=6)-dvtj!ZoyhEqmRLeT$dhMkV@#SWL~w< zc3mH8k?~sr=F!j2F?%)eI!4V!Q7U93Dn>T1$|ox=Mw@HGJIf zeGTdTui>x?F!l6=-ZmXRww=R~5DuQ*>?^SCkZwlOu`wdmQPoDs%ocM?HZpS4@)TIC zY-&msL7CS+k$`3Ehv4le4L>`Y2i~5t!j~U7bZ1}3%;K825qGhQyVxr=TB!&&9 z*lig;e9W$WSy^>^O!t=KTpw1E*>AkuACp8=9_vYds z#lZ|Gcnl7q0^$to@X4^Vf52bd?m=Ts!I0DL;Q> z%Sf?yLSrR^h>PH#MeIpjez6#<313MhY$%K!a+lMw<(st6J3HAcG<7WLBd2}yG-IzF#>PBkE!TK#-ZJDGU-=m}y{nj?4 zZXXc_Cr+{h1&b_OQ%FebA1fruU&HbXPp#kStgeUgZo*z7tNr7fPE5>Luw%x=x~ zzDkHJ3MC8<>)p9cR#bNXpO=+;eUi_Q_oY*PA;8FOd>B401Il=hpkbB!L~`tH7UFx{ zVxtfu)XO=z1p$GPxlDKxUGQN7&5n|`J^d4-N>Oc4mB(cJw9p}=06~No;MPmg&*$I; zO(l>@1F2pz^?z-+n^NWB0NIU*KFmfg=X&#S5j`C+8fL`z&cL8OT-i?#6IwIz6Df z%v!>FCz?(e@OVleZ1W2jHI9VS-DBA7<+k^WPMSczMdOM|*Xg9~ny zmhoYGMCPG6bB}CuDi&;l6qgz)z0Eq?_H`fD>mWk0Hb`~zsJ`_&c+lS1j2%>n(2C!M zG^8?*Vvry*zc4QPdr{Wwf^rESSt4aJ@wphNoHc>oH^pSb1vuRDKgKpGhs`t4c2#j! zXcp{i&WSvoRw`MneKRHVal>Zzt}Q$N{$)CMWM0+5#DFYB6{rf4Sdhg#qtgVM1r0>t zeaBeMjMMZOn(|<&92XOq6WK@0yAL0h@li$5>2-QchIeu2tGb@EL(Bnj@vM1I_ul9J z1E(++W6hmfFs;WuEjnFsZuMuX7P zqvak}+ANAW8QfWp?7d*ZVk$4nC`w2%tV%YD!NuH+_;OYSROeHe)O`Ke6zN?vDP{_% z%-lgAO&)4{=P%xffJ%<>SBBLn5F;3QP}VMLLpZ*h3$V>C1yYqeqX3Hj9Z0 zv>3T(OP@r!EdEH0sL?P)URTZgg2q{Dcu%9Ncnd+GMZIT!*D@jc#dztb(sw7H)MFfP z*fSNTQC$&#T!4Eky6T&6G|IRju*Oa6O1O&C0t@lb4x?c2IUdxefzif)WNu-I3-QQYrI=0eUCW9WdNgLYUc4nsGu;S&I1H z3!K;*Tu@BB+9%97K%P0hs4(jQ54CJ<*?C{m2D6m*kmaCNv)()m zMC;9kgTPcPN8FbISH9tpEFJ|~Qr|p>>3$NB!w7F+v?W4Er(a?5%$gh-yRCNwiws ze-DRi!y_Tw&_j3W`)rP}CT0Dg`Pd%>w?9a#9g?U&Xm<)hJIs)4V!1Wk;MGxZ|EwlC!GEN(+)xsQa zqvhe@utIG$Bd4kAeu|@-eqPi#u3oQ2Y@U6uEuTuS%~AiTerhu)a8}VD?i5W8S_*Lp z(WE#|G0id?YwGhzA!Cf5eZW%c8wvGRO9mr-i0AC1#AD=Cu3{T&ys7UxC{w&Mj*R-8 z&qs^WtCyji)>+{^xHxXk0Pw}fRoXawFLH#<_?2Sf2BF37*ymZQlQ3RBogvge$|%;g)b)xCXv-W4JF|O3&XL?hm0` z)LP_#nt{Z{55cQ7J3GH|4p^^OlGCpc2od?XHE|?Bfp7*dhFBkL-tp=b4XIN+HPs)o zH+8mP`%vo$yI@JTgVyEI+*wLYIr*Y%1u*tZ!X1{KTvN-oSG4#_heXuh@kR0E|DoOKvR|YA6 zD??y*Xt|MDUr#O>-W{tym2APId@)s7W7fy!F%&=myp?)t6-tZF z6osh8iD@sVq)oQ%v>9BJXQaP!ntCe*)mi`Zy`ZDRr{2aeOl4cFNI0H!LWp zis4DS!nMfN)FD=rRFzi~->Ot$UKyU{Y~4VsRL3YRX*c8_aq;AN zk_)$h?Uv93W_N>`6n{RB6I7!kP?aVm#>|}JLXoNEL>xn!{#~?jS-PAqa=8dg!p|;* znVq!H2(Sl@e6 zy$)SeSacI``gvEQ_0xbF^!?1|Yr=J~?fS7R&`l|3hMVertjJgIR2*_nM>d zqgi+`|45a8qRM|D_qQv*GzGETFvCOEg>Y;Ocpu6L)~D)?$fqKWWptMlg3EQ|)>*ms zS8QMi7NlVu^|$IypNxx=kF=VxRq4u>;~~8CnU`E72$d~%*O5w~k$CHuE;7^P>N;-e zu96n|ahD`I)k+hW2tHRjOx6a)0V7;Q8D7Jrr5}0e=gwC3;`k|cfx2uzC_69L*29#m zJ-;r=wwFU8)zLF;nyKNYCer|lO@?s)$k}SKqPld-?b0$5!qKyZ!EMw|JTB*K-LRit zV?X)u5fLJQNxUNTaS??MB5WriA}tt(+Uc~9a(3)0WoKuv8}RO1Q3sLQU0poscVfv6EYPQUiqw@@`2E}csL zbEYfi`w*jPvZZG}wIp-I^t3cgw;OH7mz=38hSM*9_DDN#j?ByFl_KTVYd_I&4WB*> zgE9&gWsxG+2o$k|vQIyLwyK}63M3v#NSJc9&mI!7cEt&#c0|{0`-h)>LzEZbl6Pt) zidt;wg@r@5vp8Bu1_`I4B-l7j{f5p(P+!zZ&oOmw3s#*+kaq?cCK`HoLao@Rz_5Jj zEyfkv#KN$6xM?flQa}{-W|G6=LeWXW^-g&Si1eEH=|G*PdJD5qQ1p*p9R z>N3p;16p8rP*?8 zA0-P9U$Qb=VCkT~XP2r?TPi0=w+9)sdSRNhtYHBrF~YTG+Itgg6Xv01IqW_%FU2D` zU{8|nD7P*HUNSQu?}DSf?_54jRTUSi&y-&(AT449QxdE6j=oc>*7H3q?a~T!^(52F zirWcyn-wkg)E<%A)L&&TQ&D@|I#~|yBVU-;$=_Wsf4)&5ouF^nnvN3NzNmw^<6&z;?5b0p8R{f*3lFf}d2+>N9O5 zYn7v(>L<74lVtu$!jJK%5>#I?$fRu*3-DFwfs|8>XgPID!)B}^%_wac7Afxu@{9v( zh&1xYSiw-bz;nOU^9!N|dyJF{6Eh*);*Y?<>cxlF>ygL8_4Qegm#7rW40rXFn2)s7 zs&UfRZ#4}!G|Mk@4)42hYNK`>2A;R7Ly$&HsYEBjUQh`$=+y8Gpo^s(N%4c7p8*8b zaKAwq5H1(yJ$2k@rHc|QhRvNpqqK5wriOCVVNg?SZ=)7+dJ*fB4ofUvZ7dTPg=xB| zV){Vb2R(#Kiv6ikrHv(z6HSFyG5)ZuQMqpBrO8&4r6v%l9@x@A%UH138ww+on(B?# zNZ$yv9Q4uRM&*cRm5=Gl(n5*L^0xHYSeEt{_E{TvtB4ONm+IEM4>dm39x5xgL|kJC zf=t@N!DcvW5g_w0smN}CW9TnZy{6f?g7Gz<%F!n1GIB{@8ZnRbowR#d61KE!ggCG? zuXP@}%=%2Q#WOY4B~58{lr$>4o}i$59#K6z>&GvrEZ=-ouZgz8e5V-lr<%gN#EE0&>MOfMhs_KxZOWK^Hh82y{Hxwf=zoH-K6=^{s z>Z|-YCR`d)mV`QupD-hPBk!2zmPzn`h+1l%68@5HnsX9QqqGlcZUb{lSkkD*-a=kN z!eU315pHUfI`Va=@*~C#y1+@2i04ga_#2W!!@kyDfkv118i`;w(ykj81iU=)x70A4XLTMQqy)by>^=a!>UGjsiX%< zFLhMTt2DQ%+(V+PhGSQG)&5E+x=@Z$aft;*>h!uOT=9~r!op&_%ZW@__O-mX4R&1qo+}xan+;Y=*?S3)FsOBWu50l z9%$I6#r~Hh={Ypp57J7LjW|!EJl5+4ex8O9b2Wd0c2YfM#~EyPX~-?yh*}s7(MQm3 z(>Xv=p=8FWZ%xQG4CiakDLhRwQ%~(>vW?S}6Xod~KK;&8+IK<6n16(;jk7h)=>8-t zqic~LM0=wCe8j01;0zR(u!{4I`gRBmRkG?Dz}oo-T%*w9>3l{i9if< z;zUWSa)$O|*%kssai7NgKx5KZBG4#3tkldI{f*k9%u8d=E^tszt?9HLk^*KF%tQlY zwpxtqCT)AIu=(C|Kv$=Kda}Y?Xg&-PYT7SuY>OHAFqbY&OP6XiB8o12D@|^SBWSg# ztFyH9^X8Da|IC|1!jUFgO&NNhT637r?*HrNs77711k+(Uo^E64Tp4IbPaZc-k#5Au; z4o`q=(($6Q!fZLE7L5K#Wkf!y)HFZ~EF-6@SI6LWQEjG@Y+V9=$PG<-y;6wRA0WTD zt@0YVFU;2w;+B%iVu;cl7l&@xzv4B=!Ax9SYh$DUjuu?cpPpLn>1ond!#N^yv@{** zjgOb4<}{3h4I0qW8Wh*j!aK$!wkw!8|V=7R*X6!g;*__)VDQusu!dYXKv=f>?q&g0*`@yO#Cn`k8iNL8% zx^r0Pbuc3hQc|3!nMZrr(oO4wjuqg^*oK|VH8Z77Q^HjI*KG| zukpO>kUdq>qN76lCtVRKg~`^y_qWh?z^T6}R-PtdYec;RuWve%W2#(EJwO}K&dVp8 z#t#5{8D>!1F*)Ci%yK|7Dj4c?MyTNf`IorqoRU_^1H8{g|lcy z$6Q$*HC%b6@s^HJ-kFas^@q=N(yvLQCn+bH84u3V^Og%?!Jdc@h1@z4JHQClM%W2z z9d(F$6J9R7gypdmtxhyPT(=x`I4WN=lj?AYv5{Cl_{oLEHIiTmp0M;3;8ti|%~#?K z;uc1OK#{aAEObb(Jd)C|8U6$kZ@vlDSZ9!>0HQ{RAnUKOB;Yt}E6>|jcx(JOA5ESn z0VAbtCZh>r5hp9b}i-t;j7G9>pJzle$G`htd5c%`jO;DKA8_Jx5s99EJyBy@3&`F#06O6$c z&hFtJPx%cY7xf$Cj0$ZRtCVC$j0skTWXT7Kr>v%XEHPK)9+Jrf*CD2IMM+!xAT**K ziZJg%T1<1>GFo?lHfDtn7HKS{>rGe~PqZf#TBA=;#5V!HDJzm6p?qb9DO*9@RpW0aNjs!8;9THlN2)Vi+y)(n(b-qk4# zXt}h9sD-OhAgNZ8t6DBA#%dglf`#}@-j?3R4o5qwuALfXXBB9r9YLjWJXSN#%2IP4 zXOeM4`9duu;|W&;#GRL`Hcf6X-Tt43khSCmEtHzv0?WMLB#!(%U%<#1;^5A@F5;QX%VpX1n zw(6}p%rXUN)uMF}wFh?OE_$PuO=ntl_-+X+!$tG+4UURu2xQ~l!(r}XVU+7eoTxuzjEDOoRoyR{e3!K-E;jBnVJK5R%EKAv=e zlFvw*e>7)H<`WdjF^y$U<%*aWSAWWRT%4>at;adYRp82Vg7QL}MlST-aD|h`TRPG= zEW`J@i~2vowy{&<6$;ZhDn6mV(ms4Kj`nPVTZCnEOH;lrEi|X?X84oVYT8RNl_*0J zqU)OIr8GaY_Z0GLg)T|g?dog=M1I-5(UQDrUf`{v^qi$=JHniOZ4>^ky*};BSt?5n zZ)qr{#?+DoRzi74(1=0<4RyVuyqM>D-s3t_trK;Cf&n+_ZZr<7VQ6mGZlOkw<_DLV z#iIm?anNvOS;R!Mu|}-t5?51hdgs<>iii5@C^c0;d&F6;LE0M1EgF#p^d5gKR_^Cph3GcGJ8`~hzx854U>7ck-Q;A&j)d|{8bB=Rx z$q+v0#2#}vYL|ngYs_2XY!;;pS*~^2*p#M5v#4-7q;_g*r?H)Ud$6S448;{SsYhr5 zB&()tDd8@zR^W=1Im!;W%2sIOS;A>RBVW4>Y7y1hxHs6-S0(*`Qj14w#>}bNcCRcK z2QhsB=piw?)ZehmCg8w}kD2AGUC;!f55 zTMMNN2+wr$*vo|`PQQGzf}hP^x`bV^PgnRkfvbzvVYO(h<0ayU1-_*4C0%4_GK!F( z4KdMddeUtBC&RvR<97i;hMVe&Nq5_=WXhWYtF0zZo6rqoGm;#8HW*iEH!V%orc!;M zm>l!8WOel`CM)`XuB&Si_s-PHN1bV7;MipNHS5eqq&8{Srsb=FUNad2|8ou02z_rR z7GMn(&}tNo8*LdCnTr^pMqhK*oo}*=xtW^T@-fvm5w|qiN%=L-R4ny`3u$KR1=B`k zX<>m^rIOT$)zqTRB-KhM(wa|6UbA>|O%$&hD(`V}hYJN!rHf}A%ft!i6DPE2CFLnf ztY-7ttPmG+0Yo!q$!kT@Rhj;CVo_$B9&ez${c3Wb`(g|9ziBo zAV(&yxOB^O#!*Vs=6N88-t@FZWT2S>CTJ;RAT6joc z%5ii4DnUflq880#lQyM?@7a@nZAgWJqGk6ngQK2Si)ncz2&Ss;EY_=0T5Y>B6qht> zZ{ev_3AGWO7U9O0)|OgcBbhb`3pN3$$$n8@jkxOJf=PWFn%>ukuLXxI%mrT}Zne_d z6pI$;tto*|t!g4lL&3}s5lQ`}bW#zBZhgEdFD=zjgsG3IM8Rl8ufA~=c;h9B`ZZUS zs&&Bo%E?>YXF;`w32`i%rbcmER_anIue0)-v1!94lgDQU{-mD}O%!;K+E7c6NKqOC zj08(b`{6_4SXNXz)^E8yMbcJbywZ;)HAWgn+yEl`WGxzv;|0r9?oCIQIHA&s1M2P) zQwdwnX0)ollakqQw{xE5+n(aWGFwp?ZLuh}&2lS6Ev6}1rD%ed>5GfldUM{UNn5gr zFVkIBrrZ_}T$#%?ZUb!+Y7r-XE0J9iB7CXg;xCQ2bYRpp9r0WYAj~yCz`J`I&FY>? z6sL3=!xGAu*=W-oAqBjCZBdfK6z^eqw{0?*o=)4C8a+9j2GD6^ElgRg6%GPsVbt4} zt)!CqJuTL%x1zy_`r3Qg`%cFd;C3_h8;wV#lwiK8F-6mit(e4aC>O=3M{G;KsRGT@ zh>8vhZo{nx;ig5bBn(e29;jU6fqK$s)QH+QR3>`;qB)qZkr5>0v<;PI9uHLNrIcC< zSB&b)+x@;3B3f3w)Rv9w;_+%NWC3OH5|iISwzK{^2FK5bJCv;P4>OslH}AM zsI{QO+~@h>Vqjuh01amn!O@X4QKTqE<1aNUAg_8dtjf7SY;EyIjZhyW;=Ur{{57?&tmypDXdL0Xs9BLoLKx%IJj~nDhicXOLT3I>0QR9ja8>v3Q84k zYsN*?Kf=zICH4gJ92vo^roT0}F-9h#)nZ!pn)|JnCh6@wrP|lcV~R7bddJO-Jsy5k zGPG2l{T#%IhXmwr#*Lje)RHn{7ECjFZYWtebx1zeCZ4EDR1!^Ejqh-~fh0-h!NN@J z`LvBDX&dg;!nki!O0a9nX*^9rTAN!Nwx8%h<2TN(g6^u$YTC|KT+%}*O#;qZ)xcMq zN}n;6urVXSNibI$!Pb*e)|6^uDs4r<;pUY6s*M?SHsmvEVXb3EjYmjM^bxD_eQT<$ zz|2B{Y-^8J%~mSMq~NCIXiN$}mv^<9L>rPHzPQ-&)?s#G6mPmH&QEGR<2t2vlEP%3 zkV}i6j?q^#+wpX{BrA+XTmHn@deSCW?|=F`E^!WxysD1*?L!Xi0167jZ!DG zoS%!*oQmxdr#AndK=ClAa(ie(tjuC3_ zX&a7Hr&F1+Xikt}s&dc=g(JiY5jIE`e1|7{x0KYRU@R+W$5CCoHXxd*3TE?-%rxH8 z!Ou$@j*62UB+iC1x#6gd2Uw1fN-d1OWrkJ?I%H5blFCAXsd&Mb=}Y5{DZx;^{Z1K~ z@8ol*_pU~i>S<>Bw>FYVo5Rs&o3AH4U3pcLhEawcoWC$%1ueHaYFpeTC#66VS(uMq zPjS*_2+h)}@lic#&GKq+!dg$8)<>yjc?GC2D5Es~)#JrHYJ;QHLTxX8)J%eNYVlOc zXRE=53N4zK##Gwi(lKxPso@&b)2jC+7kGN{1m)94#0jnlxweUnl%F^gH`V69R%O?r zi6WQf=GMoCo6C)Jlgn~D4w|LQed{x~(hRWe+nATAen;sQX$um*$&nrfUs9AwqNFC6 zN5DKw1#~mVXgHU|oG#;eZDg>Skkd8}dD7p-gE}n#^EZ%Mp!A2jkZod3MMWgvx((|YR#$RX+EBWg(#8r!K8K1TP@8o)AMS4 zH#Q-U^)BZw&a&iAu>kYJWgC;{^m;Om3VgPHE>Ec$y2u+uGqFb{ji@)xtf)yUX>OGY zF482Gq$yE}ncy^>|5ScV<>_rE0sawfOE%ojtUsDm$0Ll$(5k2V;0PA#G;vgP)RaTy zni$nm^Ks+!YB^7%`BvrFQ7L;uw$Y1U7QP1;VnhMVsNxNhAy{a1lOwmO;NY0$`CT`!dmZAns5>5{=T z!@^tBTyQiFEmp&pG!Xf_cmlHr>80_4o*QzJm?Far?8VC(YgpAT;`xUtPn=uQjBbjP z4$0@@gmR@_07}!=^^p?Os@;rx)!F*i@g%KE1yku<&sIJ1R99gk2~h2$eH!Ur_|mud z-U2<<7v)2(fp}rx4A-bl%35ir=drdWzpWxTtRW2Dq(5>EkE1V0W$WunxuUm<)=j=^ zqSjPS`1<|czO@?2SXy=7XSCbfs&X373OPnz7iib&Bu$WViZkfRn6f9Z>?y66!r>TJ z6KRSYUq#foCR(Fv4Xs1-eq2rSp1vTdR&REM-b+8T_A8b;wQ}GOryrlJqn^!{s;k1Z z$dNiOHi}5m)t}x-B72F@-sq;%8JrBOTJjMi)pE&w{7?dT*tIBXTgf%LTnp~Ru7T?Ys2`t4k+wU2{6v?#*e(KJ1d?9GO{4-B zwCBE^)WD487ZgKtJy3Gbb_S6ob(fhncj|sv_v_AA#p+H{nP^X#e~Mp<{am!&n8N)miY6Y=)b`dDyrWV`eq%YdV{)N$0Lbtzv2NM`!=@9X%cU})iM1eheo z+Jw8h8^F~_@r%{PKJwbCu7|9)Vq&_N*7bzy0lTBLRbM>_yL!R6c&m3_rsjci3;OM@ zQ~185eGNA13td8N^d$tx+NExn!LlnfTW*~qeo>1xW&Gyvr2oAhs=uTe=9Kw8w3pVR z<6KUkg>tCZCB(onF3BImA)~|7zmQ)|EW%WGYMCZwppbEL)wRd2@`|6^(%qsu5v#k^ z#P_96jhE4GA-DW4<~Tu5@VQBSF{E0Zrcj})I7cm}hs;iY+{qTL_q=NrX43|)4* z%y2B1k??_~hH;k^^Gc%E0c^FMw59AWWqIqwU098Kq`qW+5#ubBgU+H^i4Wo~6Zmw9 zKH*z+CI9|zV#E#9T546%x4wDn^NC1I#2Y!Jjs+^Nmb_j5SFBTnpsKGWQ`3w6k^0n= z>d&)Yf_=qS>)mL-5cqJ1`(l~;hO*Yj($GK;GdjYIU|;E7+8Gvez;Q{q9L{?ctHx!l zTGoYI!;3JJe}E5hyqIq+zl6^))%)V>a{J=zt)vgL^zGOCfGNnKvpV&qKvjxcX_0k6 z4oj}0yd_-hQ~Mp+m~tI`)>*)5FEfL7d3F4HEz*s@uQko3M%D;$wbt!o4^hV~Za|+v zI(Dziu`7tXHchcsnx|PVa;pE)F>uqjWPJHF(rxZH`t|T-*0QoO6I@XZ8sbILTl}rhXd3k8WG%-9@SUIa=S%!Tc7SeXr(a|z43Q71R+k>>MxD$9n*X|4R zM0=V@C!nh|>=J*TB;`unTBzM?xyo~w;?}Pd%okAR;q)oZLN|ULpX(!^WcY2=QtOhfz}8A{BjM6a^riW>5U%_?@oN>g zn_qY?{sV-leA7*mUNc~5)hDP!n|?R&+=K`te-GEg`%@oB3vC-x{|5V5ny~fwEvbKd z>fi4EmTqL{^*CU*Y{d28ZpUrH-GS@H-HF?b+k)GQ+lJeYy9>7i*N3C*mR-2Jal3JQ zaQEO|h@F#W3-LOQh1JI0u7@IT2+5l6u%6m%(zk4ey*8O3A zJ&gGxkCVqSije5!L?Thm{Z1^JV4Yl~lyrh|av7$A5*bbrFLH4?*GWdq&+io&r}8d9 z`kiY|LV2u{Qtl56>LGh0pGos2lH}fp>3|#QhHIIq$gj>Jbj|d4dA3U(87N5nyCe97tUt| z>MWW33llAc!+Z&(-r{Qw@$@c@jjs6N6dY|xR0{bzIvi#Sm3gSvkt%W)n>!?xWer+?9hJB%R}PcNGPNd zw22V*$~qb**MCj&k&}6Gz+aIP;FTfVRLvB$ zcF$E7t~pS@3LEX!+(^j|Cv4bdeOoQ_)P5OCeboTQs_OFdn)-g3) zscJt}L%y08sD&=Zmdl6aSuvHelt*nS%A8t`+~SQK3#-d;$}@eyvg){6s)?$wdNr&~ zUGAHD__}3@G#482>aD6asp%zgG;tA8pQK^aM=h_$Jg2u>y$yI=-8g-jK1sV+d`naF z2&Kh|SrjI^(+DCBLWk@4WwRv;lYXX%Lr%}6UejoV)wV`dP?8Ics3gmM_E~0WjMZkL zx6EBMmc=#1LBwH-tr^vqG0w#eA7#ML)<(r})p86-;@?rV`*%~_5sq~D1tpx zNaBhbt9eV;)&lsp|B$u7tXRIaNA|(=dgCqbGl+VMJlQp9zR9N+r;HkkY6g$=oCm7r zGU4Ia4pKO44WOQppstxpD^eG`qIOQPE~fgWAga6QsQMd#vHzBuW~?4W)~78${O_dY z-5p8G^Kq|El9r2kUXJU)b>hA-Eor%y=L5vuz;g%BM{pPLej)B6+#=kixOuqe;=W6s zOFNU6e$w5DzmMlja3^t}4oS=Z!A;}61$WD(Nz1L5Cat$zx~e5<`3y0CgnI&a{yCJ4 z`vUKOhU@Q0TGu>%&iC|t@%NIJrwIGsxHX+g%d5!y0bBrLg1hx9YQY+>kLOZK*v0cc z+#cKuaUF!c^-5~U^H+Jk1NTncyKwKuy$APR-1~5skmi%PH}HNb&(Bllix(#?=TJ^- zB5c+gPCLNq4&ujve+2ge-tWY*AJp=vLFs<+yZZg`caxT#gm1xpmbgF0eGd00xK)I; zlXo-Ef1y5WI+B)kynhY%JlvlX_X(coQhqD$N!*8V?X=Sh+#2HE51!Z1Ca-QuT0V%o zj`u^f@S3Mv4bMx!^E0IT`z4gmGXOKeO~ajwYrUK@i2D%k9Q>aq%~QBp!2N67I|+XR z_etDma394jzKrsCz6$pm+>bBOPU4@^WBr%%+w!--Ie)QmxWRDf1BbT(^Gmod19LZd z?#AuHosZjz>%;B9JqNcP7jXMcrAfq5+&XCCrBK8s+&u95 z6)540xUW!y-9Y%Y&ZOnzxL@G?^|&|SUWa=x5WYlj{w(jW#r+)avp_zd(*7Rz8QxbC zHVBnm&vSyXYp8$1`vtgZ!0h2UN_aod<+v`RzMWunKE8KQ!U9q~iCa#p1xrO2zhq@3|^zy~fbf@IsT#EzrFT;6VZuI3p3mUE1@ZxPKter=YPh!rqRXL;POce}l`Hso!7X4%2SW zC+$Mq-K75w!u|@ki}z)u-GX}_aSL#pI%x}|pXpZrOR4|s$^RwN{{`-6dH;Fb>u}S_ z|L5R2k36r%|8uyxz?g??CGJ1K>s`2(4mcaG754(-?!-;w{Q{mBChEJJt*pB#>-Wg_ z$JFB}u%4v7UW@wyZav}02;0l^tDVeky#J}v;ra->mayfx3gJIT`j6ng5t5eg3ZH`ZK((dHOu7&t=r-TckdSyS|f_0b(ES1pc>?>(#io;(ii0LfDV< z{Bxs}TP*(`^1p?!iiN!e{Lcf*PZ9D;+^^ss!u>uuUrV38nD>*6+Y!U#JnB7@)K^j7 z3vfTf`yHfu56>6T{&RR1%PB5y9#$T?)*;Zg6Bs_^CZt!{1@~7J*urXWT#Gt{~TyxO0JU zH}30T`}erjgss6{NZ1YMs6}QO)TKbZewzH<=D*i|-)4O0Q^222`aQUFa656Yr}SUL zeIIun@UF)_pYR(E=4{J-1u)kVzJ%}|+;edES^Rp7zt4W(Ze=`08Q<;%C(_@DdxF-P zi~kpZ|8d-3!OQ*v_bS3)Mhm@*y8IIHuf+Wc?h?Wm;oimj4LmEjxA6Wh(k|rvLfm_x z^!Hq)d4D#(=itVH_%O8fa^8O$_X^y)1PK{;6Ygf*^u<5`^P6zj5x*aIC+>rt%qFz- z5bg`S{~56Q3BLz-9(jJ9urK1ig4;^iTY0{a=T}JoLEP7Qe}d;-JRiV)iugS|ci>(Q z*54-X5uU$_dnxWw+~d^X+csKWgYTQ9IF5TW@8djQY;)ioYt<`h`&SV@0JH~jKLQV) zK@IM~Jx$sNaR&+icfxN?;DfmLgY{34=Kyg(#`Dj3{tdPIA(;Ju=fC3q6ZbE;cN6w9 zD{q69cR%GVBhPBw0`jq2-|{-r{5TswJMKJ6e?d^|w zd(80rane4D@BNnZ|M2!wEB$ec{Rv{baT^K$;Z>}rTBlk5=YsjyX@y^)4_2v^);DzO zcg@r9FfR64XyZr7^Lc~%GTy#mZ@)!t{{i;~>hcNPVn)OBfYS!#Emq?DDDAzt_u$@5 zzF~#7-V#Jp=g{+ifSX1?4_Wxl3U7VFa>C|YpY%}kFDB(Tf&H_%rM&+R<^B`ycX9uW zyO`d*1-Ctc_u$r2r(Y-Cr+~BO>A6Nb*U(GfnT8}w`hUcIn)oMi?*R8t^87gNmJZga zJU0Vl3+~Iry%F~*+=mU;?FQ=sV10yiAH(gWtShMD{XAE9GD8FV*Ki*u>~6w#WnJfFgSQ+}|!nmmhvb17~KZXEXk;9t&jDQ-UQ zLMUO))BQmEWnw-~$U~I+5uPvR`5~U~!@Y#}kMVpG_ZPgc>OfAw&EdUkFGQP0uY%2&aMKO@=Nk51l=plqd4RXw7V~b)@da``k5axv?7B-=kZ&h_ zvkUipV1I}{_-i=jU*cZP``d6I2k$pg+gIa`;r~;f9XwazF2?oXCUDQg{W5WHz+J@q z^KsV!vjQx(^jhx6{V&3P3inFfo`l&3cQ??@#jF z#`8YhCrPuDXCLm{(`bEq-~(XwceK~v0_(qs|52mdK}zl-bPetZsoA$_`5B&bjW)kX z8-IYbzX9xzf$?t=^Ut^gxQhvYVFDhwUnlp&r1>b%M|eKL^ZmFN5w{n2AMSqKuMzfP z++UJr9?zHZ?4*^tai8aXA7M{-G8fTPH-X8OlyjY};GbvIa4p!5LBCg$z87}|?hf3m z$nzfZ{4(wJS=?uEHv{iM;BDafOFZ9%djsx`xZ4T4jORG;SMmH4o{MRpck=#jYW{AM zovs1$X58n9z18~Z1%|~CSUdn0uYrDF<0}i^e#YK@8pyB0y%P6o+?#C;^3}m>yDYGFSwXw32KLXB=cBmaV!qhhq1Da| z+#dk>zi_{gTS1A};;vf^jT@!iX%L2i@NL3Zlm1EQ?LMIW4bK}1y8-t#FuaN9A6cpI zvsV2wt$I1w+>V=xyBD_)EcfHSO+e>2K?zt!bDa2F5tWa_h*ECoaYO1e}{Ws2b`Rq z-vhD+i=Gz^91f{-tWY{ zEvT(8vRu~zvyHIbwhr5FVGr8x69(@$f!9U+R@{FB^AvC%!Y#mmJ?>%NUyQq=6A1&n zJ`6RldHQ;wK9AVzaNo099yFLw8qBW)a~AFR9Ofz6CWIy0lh;jPH)7$toLwsY>2$j6 zaAjejPkDwLrjkl_jQZ1^CfQDZ&(w3SCFd5~89Y#U+k(|uSThwUvis1VZdud)KF=I$ znb7FAjnF%l^7er3W=ivV3;VcpCM)xPcCIjexoIkpa?JfkBJ~Wdjt#5dOtzbTh{ioS zZzO9K?IUYnH()WT{d%_v2s3UDotV%pp>K-zn-`Rk#q?O6P+r`ElMhFN`t%L=fEmI$qa9$GsB23_3d zl-tLIIoci7K3;n2X-+i`!n6}>QNQz4y)bAnPT6jtb{xaZ%fn)5@&@d9!mP_PlQ4Y5 z^poOzK@h{=b^I*Dnomuz&_Po1EC|u zM^-@EpB}W*{e*+e9ph1+h=(A#DWHDiE^0lvrIIhKUvqG3T`u~9E>p{ySvN!5{!aMJ z+)OQS!lR#dQxA^8k3yom8Jr)5IpuMrPn?S8fzQc^oPUKm@pcL4XS$QD6yF}n$Z%^e z;|>dCpP+Ws2vsk-y-%1U{vle>ZvA06S)|EwcHm+0coN zYiR#RI2m#ur$k-?7q~w>!01}S$i0caxfMKb3zu`wBbnLDxIfP61Tg26KtH$+m+g)g zIu*z+WxdtRZGL5f8y1L?hU$dpDf`Hm*)U~R34$3zr(#R+WVOtq*PEZvgZ7>1+(w~$S3vQGb4WNJkLMg*H58HuJok-^EZ&XM#3Daxq} zMdA?f1`rymd`^(XqD82AqcMT}zln%OhPS`>XbF)8chf?$fXb~tSA_GhMyzL@=chGw zrY4@8ESw*|L}f@O(x{h3t4h;tCz@6IL&C|Vm`k^_U$67@i-eooO!{pL&2u1=Er@tk zL5B`i51r3mW)vwoqqa=Rcq&u8O0uD!k=MyR-Im}nIuBcoD`9iAPSE(4ZLzG8V~Kuj zdC=+!RnJrX%MiovNOtw})Spvz9K?Ifd8zoLpMq5n?w1_GStZ%5$*+&DiZ6!l$;*m) zWFaWtA;MPAr51MUA_Rw6{|L7FSvTgXcg4FsEjVR1hK=f4YqwZEgnU+M0KeUBF*W}v zAE&KW^n-i7o39(50-kaXuT>=^%NmtYJWrgZzP?fFNzODkyeT-Ila3UiRu{(~4#||t zavo4T-J)2}rF@iQTz9d=^95%$2ktjA)6nZ@@M${kg5Y{A zwM;Q}xIjZdlaPzUITw!8m%iN{Cs_$58cfx92y6k0CZ;_Z*kJn7ou)Vcs6-dj zr-rz9K+Ltl*p3E+AK2D{OMG9QB(X=>MO-CX#N!0{(f`TIZG=&|>@G7zE|w_)oT0fy zM?oBqQT!Wi@b>doZ2fTh>-SKVW1uKG$vKcqd$mm#n>SW=0)8aA`Tte5ProYm(c~?> zjXqWdw$o=vpa2Osd7nDvOdZ-LavuZMrYcCG5?O4$%K@U&qR4o~vNcggky|o}i&0Kh z8WnzcNK7#bWck$-^#1?Eg&R{D2;OMT8W!X((b*$a$mcelx$?oN6&4z&cHPZT4k^yj zb|)n>gJv_Gq*9q^pL+a6=vWo8>sHdKvzjnZqF@(rHRv^*g-?`g;tDlv>!x#xdYDG@ zpE{`iO%a;sb#g-In8V&`c#-#e3rS{hiKi@oD11ur7j3lF>nJB})oKUIYXT&o>Kix0 z(wL*KCa#Y*QOl?YL%Ui^1nI|CISY|V6j4+1j5J)!wgbCX*2vF2l-h0HCeCi{vO#wT zn#3*AA#!qG15xu%nAOE^=3C(UKf!mIO2eL1$eG^TRpGNlg_89SDb>L^jO*Rj99z&i zsAyC2sdNjjr;7`WA`9?SQCd^$G)*q!X!!nIEUcIz-j^f7^vheybCr`rk%!faU)9G( zoQdb+W-e^hN9@sv*t2N`XIr()C{3q+e~K8LCREA15(acnqF6O;vn65>+q{f&Z22jU zjAJ>p+M8R>W<%$99dx0I-fEOrLC=g#yS(V@f}%y09=8F?kiO8zSE{}1^!6)<`lxgY z&fBP7%BXwEc}r1WTt~-;c4h}7OFI1?`b3(2>FD*|%RzXZDcwe>#I!wxNMqlJZv*}v zyep0L`JTTI4Pj{QMIZ^C>j~?#xD7zqYB_fh*2}wKggHBbu*<@A-$7`<6PWi{NH-HL zqkW#2y`J~mfgwCYyN7iXB8<7IV7{>GBcFU*DZx0!g?;Al#lM-*U4#k_>50)k#0&6g zcS8FQ!it@u1**$dD|-igXGe-_m@gQc41->B+(8cTUtBL#{Awfc1eZE3sNYUuzC*t| zP3bicXj?QB__^MW6a!(mgLdgaoK^dTPW7$Eki=jKz_Eu^%gw4sr&hLFQHhUBhO0?| z#wMN`)=1Twu}-S&uG>0s=-#7%9IlQ!C9U^%QCcsH0QE<`e0kc?eWtXxgIXG`&D1Ru zn`!NC=s-OqS}68Gn6LA{dq`0VfnkdT}z8Nr)WQ*IG5;tNA}8)R{ZX( zY!yU4577vnR(>+5v1aFYIBg^Bx+?B*#7j$!0F?1D2=U3N+t^o!mRHfBjF{CYFh@W;?$++L6 z-)tWy)vokJ9$eg?i&};$%Q$u~Q?9d-h@5NK>uWHk40|wQxREjA-$Rsm-Ul^Fa?>oY zR@ZV%Lc8PzNu`oI572Mbi`?=gteK8^tv{BrGwVaYrE29_Dj^w;B?xQrmCZn2gL7Iq zOZC_lOVJH9tIrbdVScfVyVDj9BeAS{Vp1H5eiqk9o_f4?wwr?XZK1}G#z-tX?_Hfb zt?u!9I@P!Y&+kXuJ9K*mN!@=FqKu4 zaY*Icw6P$c^lO`;tQLymaaggHvV7TJECihg!Jhl)|XAWa!^v?IL}S1V~?JOH3-Nvt7`tg(TrpEgjpf?m%vN z2`tXZEt?kXqAD%+G~os=XY6O;nzaBX6jJBHuwHsQF=Apa{<~7*K!_#BUO@0>vdS;9jIExu`6R4scQwrI zh8R@))zfaUbWC9F)zfTP&|rE+9B_!~#G3ijDK+z_lWFEpr%@|$H5XZ|faY~snO!M+}rB8jdM5a|-d)VzGBrcO&5NxDKs5@#`IfO=&XWcy9x1-%K^`(@v?e$=M9e=9HwJeB~TD9;HUD)V#)RlR<(oX4>#-WDArx+Rf+rpndDSiik zGGUT}=pp+H^R<-ntBIwmNS9JDI zVa8Kg1Zu=a6BQSYBvJ^I>ZK|C@95bYsZw&Nog5R@Mm-jLFK%^FV!HiXUUr6sKGOHX zL3HoZURw}Jc@3k6(t!8M(xTn z=58DxA=F=I#{7+9WjVJ6r%H2I>4N%rhK08^#4ucVo2}RDtZ|o2r4hrN4(#3XHVk)8 zw#tunnmk=td>gCsNpuE1leM7QNb6+vVxx8pw@wDdsi0y04KaTsO+u`7<9P3-26~9T z2)|bU(GhO8x+!KiZ{?J^R-^;FIkiDd7iPrwuqNiIr-SfuQD-gOej9XG($_30`(vHU zpS3h0ay?ZC z_HIsZG1Zm$JB^nx;i2^wwv1DnF(Dl;iaHLZxbyNYz1)y2c=s9ERuB427YQ-xtZ+z3Xd zE?ZGlf;F2fg^SItZC>ASNtyB2v_xk$^_U-5r+whB z)w1Nm&{+?gB9ySfDYGY4kvCFNixcQd<84OCE+PI=W-nvW57JXAfIxBr^TS^NVKI*)I2vwSSErYb|QO0_U2`$bg z>`Pgplv)~SNgT~^e3!Fmm|!EBBsbJM(ut%<+a`Y z6;adYi}s?qgew8ci!+uhnN54`^2rrD6VxPXW=l44rk_5^AoQzu!z^DQ>4XDIS^m9x z?>9g23$LGb+oN~?(+y8`Jhm#dbcBQ}Z<6WUd6Try*XwNkOf&zMb2`G@;kNm6N0Pax zPxBm2pGWmy>Ay|pZuZcP9=cJX|B%exqvsEJ5)58?kW~+|#>o59#P<J@&<8$)$}>YR|wp4|qR+3kU*sUvX|Bn=AM2Xcr0q2eO_D3?DH(*ymQls0G@vy1)N7q&OWzo+Vr`n-v9;kD<6;P zR>@b)J+1#U!?d}N-{t?Gb3O;I!}%8n{k5J)mRFo}?%dOFR^2bslhT0pC6Jyy`yzS( z45v?TZJWk}-?`^cC&i*xJv*kIcV7FW@0i(k&fLeI%YRD&8J&M_Xd&-Kj!?^VYUv<_ z=S2c?Q3~Xu>5%8KWHzUI6Oqikpc;OffVLKkm_D22(7-uuN&6L`00Eu;Skk_>C4|}F zG54BjbFVo!fcg2;Xwl@N8N`2L+T1;J_grxPv}po)u>roAQBMSQPR>2g;(<%e1cSzc z4ApiQQOw+H+uEkJKmN+Od(NTc>F27l_Lx3>?zQ;%g)q+{kQbw;*IA3d&f18|igsH> z#0GipebyMWMGdnrYnyEY;PKNmAjJZI?&GJY&ra#<@zeNb`xqhET7nR$VD_SxR*I${ z0(qd%X|uggW()I0L_dcC1VpRM>{)FFo?#8^n|(o>2fNP#;df$v9Y!g%zEBm?GztW# z#$G$8je@36U)0ibe#@ekIV~5ooj0dde~b9*IiH_7dd#5-r&5{M#S2gP#zu_myf`CVO}yrBLi}LgZ0egr)E#@n1=t+ zW7ATkTL@spotYM!n=E6Ckfh&kd4|k}jG4eL-VKb|z>JwC83>mE!Caf@IL@{o_C76%^yf1N9k* zR*&26Yh0jI#s!;ghZT-ns$%7FzuWIl(#-sNCGn)R0E!`AQt6d}0uQ1xY%@RizENA# zWssl@S|Dk4)J}Rd0!;y(;8L+9f>25%Wx&TuW@k|{JL46KjDDmiII{GSAH6Uh5>ncU zYIQj~7_W+z&;!E4I?IdYN~hG>4(qF=5%z?RmuxWsTfft zh;ajzNqU{tE$Y8XwQwm4ye=8@&=UNp&AM%Ex{I~JL8nR*d1nG$GwSDd`5oz;Q#`f) ztT=A9!6;vpr3R8&IMs?nZ#89Vd@!^-T4p^^1(*q2dfRDgOufJnR?s{CBeoREsp)?#=OT9t3?D3@cf4K+Z> zSPjJScqMIBOrUn^hHxtLI4(;qUHABZZU};}8U!>p$T}$%_k&XzNrO|Zx|@arUPc&r zXH===7tlR^{#gk>)xFP`_(*Rt1atsUQOa0|6Jr&1$#gISW~cy|o6aBb^Dk>)mEo3d z<1@&Ip*$Sp7|NkN-KM+)4fiC+!7n|>wr4FOQbmGDU9qwy6%jNGgM3}m_Q29fMUueK zwlqatgOO-TR>u-R_Y)@=d~hZh>W=QQxzxt&s2DFPhpb47a^e(GdP=N1o!@7F5BNcy z&4LVEef%b)4kaT~CNV~7H=RM87e*qHyOaJ6mvMH9ENK%fC*bI^t`By`{TSlw`b!a2 z6N5;HBCed29W6uDX2dGVjPA1}-4@~}r-RvyAzgeM^d%OHsTQl@h(7MZ9kPLu$02QG zx*)!=Ywf6(p1H>l=AnmZ#&)Ti!o3#W2LwZWf0R)@;*T;|SS`|o)=+n$hWeil79-u3 z{9viiZ|)u%Bt$ItgXQC%c@$*x{wlfBlClPXXtz=ed1H+tF*=<+2`LZ43#+h~I{pMp zZNw_U!Xw4N(}cpNkuUwkD~!AVYzMjMSLxiBH8|Ev3@}VFH*I2tlDq=k9aCe~ zD8t)iPzmi|X?b-y^9u0(D3+?9pX$eA^1*7xfSiqL^+<|Gl70w)_ z88miE1H|FF6d)#D=`?h+HP@|jN4VlehfLX^o9-@FJB`akN7*u11Xc7%O*L{j%TaD_ zSRxI$doViFg$MMTdzN8BCd31AHKV@OSV8>Ass9ia#k7paWwlpTRc6Yp55moqSQW}A zxLho$V=TwgNMh?)8NFOGj;X7>tc@MctuRdJb32txrn-i@2Q)08x!goiqPo`(kb5hN z#-66p)=v*;u0BwK`W&4xux{Q@iLNwqY_xH{NXwh}bFvGn7BCUbtQ#+7V4 zNa5k*KYo6d56+fbco?UcMV?SkhLntvq?*L5j?2XLw!*_9#f66*_xsbqAQ~7oO=D2| zbsEx=@nY43O_;ELZhxq}f=!`z3pSOHqvVnj3pPoC1zT{q;TP8ygittUXQ1okvbM-3 zd`Mrq21|s2c?`X(WaysSx?0RSRlv#PP9&*}Ho#Z`DRV`WMS1164H8HZ)|FbjWhbiR zpdV~!u4H0}pln-$;cGG$MFrX6QT%ZhF~bn#jrzf7=q5A~EL>NEXcw>(cB(aCscaS| zo5Z`SuB0Nvl-&K$Z|D-SGJJd|A$0C19o&k8;nTo#ExKrJg~2HIP8l{RL5cA^h%`Gk z$;rs?LZYJ2$c|_(YomFF)tbsvBKZ!39o4cP}R0NoB08x@0kIsxFB$@z$^&v&}q)P zKP5R9M$w@_q#}le{d`r|{U^jK6{_0V1fXn!lVg?X{E#INzeGwkQkcqBHma$zv3R;# zSt=Aa^!EWWEGwn`A=oozWo7DF>0o|3xZBEFn=}9(el>6fOZ+aTv%#`-&=Hr#A1rYm zEsh1)yDaIYG+|>9d08uQ{%E{8HYpuwsZXgHdN3!^u<2lCn3C917r{A}!rWezBAH-R zW0N7y8a?6u4qMbr+wp@{_%#ZpgB2QYf?F!kT#75C6ptHy)UR*x1LablDRUyvNEx;D znUCIN%nDXe6;mPQ!>S=(TWtrYlU=PVgU@uLD*`S|19deyZS-3Rs&al@3Fkst*@9Mp zDjN?J%`PvN(n1%^2(zM+Hp7_~E_3>dCbHg)DKj)*g8x)h-7xGzc`p=_!+a$)htn(p z1vg6!{op-@*TP||I&a2tMy%Qo-tvP-{NM%RIB7cU#2d*bh6^Su$=PA279{l=Y^o$(5kg>@N5R%m#{#nqC)>0)W|QqC2|XI;FyfAvJTbUx`bsl!g=08YmJ*6 zc`uDxD7?cj%GygJ-XFjkDKMB0e_|zKpNBnOVMhStmPJOj24bzEQH0nz5*YWPlj#zA zh`t&tC85<~P@Zo~(;Qf`E>^w`Oelf*HraH?h1i0|hd>CjLs{{3i1pLjY}=I9AYs$&Vy4&yeI`pSCHDw~!um_|uXriTuTJQkXNG7QZ>X=god zVb0IrRz%+hXEa~MY^}BHCVTv`$xaUQyDIJI%tDG^IMw!a_^ zAG|4HO6QOG!7u9gu&ATnYf+ZQW~xXgRnSjeR&>k15C*_WC{%k=H5!X~JGq=);=ugZFKb zl;59Z5&+LXM40*J4r<=P?6rh>ncoAu45})kIBdH?-iPk5=sR%n%u%D z4N&a*WVFeHUZCU1;>Q%$GD=XV)yjN13;*A-0uX%lI5GObiV+&%1Lgc+!41NxOzv36Pgo@}+rj77w2ako8d`j4YH;x6hV;mcnd3^94#|KX* z^$D?ZW8Puv_xc#|OoEtO zG2whsJV=jSs)@YAD=)3*ZkKh>(z!{Nr=*rM3|TO|o6v((K=k|hW`W5V8Mp8OZJT>? zI$ZhBvkZj{vD6uMzRA}%k7_B*OXrtsO3R11k}4Y2uAJq!+jTr?`*)-`MSOw1M=R27 zSgYvmc9V$8*^Cw`bE2i8CV#n~zsk>F>gPWR!)=wXLUoH6%1vYtLVuLqRk)%7w@Blt z23$farfSip2X;LkVV!Bz@(2R*lSN`W->=b2VUU9k0v*O^$C2-$D#fJv!DDG{F(M$p z)X%S@Q^8X$0Z}(GD0h$4p|Oj2V?DMq_T%RRvp9B=tK^7ej@gztaz1FQQ$tJ$5~3>~4-+NcD0AAh<;#;m04lPwIZ`LDE_w z=41eKdPm+ftT>TjQ3A+1|5fFF)JnjEQ0NzCg{&&(twD=^eXrvELL(8ZraZE7T>7fb z->x9%ZF53Yo-hGpo3gMyhj6uD9;+ZoRwzmPTk(WLDxQxns0PLyaB9 zVAo35i*~EB)@>Z3ly$rz$tjH}^QsKN+I}b6Pvpc{(VC?eLVT%g0O)uvJ1-?{J=QwB z3$l0}gs~B=PxF)fcPPoDG9QYH{C5~OG(4!e@-H&pmPBerpIW&!N5zo8Wn?2!_vokWMThItrVM;0=&gI6Y? zg($F#qJ4E6Pg2Za&mbq^^0!yjF&qT9Oo#!CXbTa?2YcuEPztdTc54_5-k)HCI16MF zD_ZINo3!jN{5FK&rL^ znJLV`7OpFy0(OhUDxJHvf#J${6ZNGC3DFF_&>5E&ppCV7hrP_?+pXj3NDt;#DIMA` zFh#Bs8Cd_w+C+3(=)My|D;%{PMt69%N#RT>*TR`p8v<*!Bt;su02VR1jor8P^TZS0W_J zppGQyUu*2sjFznXus6%G*^$G3TaBA7`~s?oRkwP-+j?)SiB-zDXUFV5HsMD7Z7kNw z=I{%5peVIIr$cl6THG#na@h-~X17MdLvJqfZms2!2f6cM(ZNQ4Qj>U$UFTzS$L>#Q zE7bL13!DG=UQZP7JqTKiM zqTEjQqKyJg0vt8>qAdcg0^ADrqVoiJaNCRWUcDD>7vQCIFS=0R9Dzjw=L(!B&>^r` z;Cz7#1eORa6}V8~B7u+iIZ^Kq&i590=Wx^JYz~)q@$B~;`v`dCBTiW8j~$jq%Az?X z@L(*BW+E)ldu*zjxMxzH;r#PCp2-mu0d3T8J9R_;hcEce-~5FOHvu zTzrCiR10}){93P@Yoa%CP4u%~nI0pb;l)KxmsjN_^bENi8L!;S{5FxNk%uBIgw%HO zN$N54V%FDsC;xVQRjQbx-Q#q2IXPE&k$5B($wbbH_KhkAsU5;_?Rp52m*!ix+-Dim?Vs!f6J(=KQoKMlZ=&gKK z0^JLx&flcxq0aMk-|2jAf#|`V3%L-ti~@C!V+D6xE+dhi+qr@Zik&=IbhS5C%&zwu zxa8Z&b#J{w)5=xvd0x%$Lr(d9$gH>I_o4rvP!rtsX=FvWpa&qSiwf$M#X(%U$J5JK zmna7KS3mBSVpe(;qJ18-WXj8R?Q-+<&vc6Hok5RNfvY=W0A$_9!c@0lHy)W z+^u}|M5CigcU{!%DMWi zOK-hOm#glMJDV*RmA;FRF7oK2Eb&+0ZC-Tw;$@4X%dS3u3yMCXApj-8pY9Qe3X}?z z2{7wn?^mE)qXal3P^JK8Ga3j0ait&v|4>ZPXpT%va|DzL#B!vF=SWemfC_<1fkcjS zt8yf(R+N-*X}NqQn%sW*|VNwk>yteKNFC$yOAR+DZueyf?(Y9g&>N~A4|QH|e%5TR z%$g}#vovc~WzFSTb4Avy%$m!xW)gI^7_Y@7TTD%hDf5g@dxA+AW?dN3RV}6j??Mw> zXd(-ZS!gzShDDo=o=JG7Bx|ZTzlS?%s*)z!Vq*1XTGDt)b79s*+l|*`rnH!Ji}5MQ zGoNLUNg9r8l`J&Tg=T8jl-8S4B0y)>_&N$`E`)$2`(`FmZx)jYxy>_^JX1q)^`^%& zA61*FE#|})b5e_$)?y};XTrqW&EGYf6iw4&qK&4s(U?Y4(rC&XO}x>>8ckWFsc1Bj zMzbtymQ!xllx0mUYfggI3(R?0^NFmvDr>IJnrpJ=Q(4oMHJ{9y8Cg@FH6PN%3ru8z zDP3Tuc;*DpG(*f)#$09M3rz*BlQO@qHuWjrY&V! zQ)W@h%uAW6p809BNjDjjFh`orq$cwklsB2bZRX&(nVmJ22om%#4#P~(oR=~kDUQjT z#cNDe)_83u-e#h0rlQTn+Kg#4kv3D(X3E-3d7CM1Gs&#EIBVXkHZ@IVQqpvK=0wkY zxX_&BnW-?JrLm;B%Hui%hri4PR3u@p^h|ZubY#s3)#k*cIU#9E6DFE4nS`01G?!$} zIVn??Fbg~;JLZg}`AxMs#WT~gCZ099b4)60s_V_DXKwV&GS4jc%oU!w+%vAV$aM- z8j~`odFEpfj95aFXU_1V!!p%;c;&J7wml%)*puPniWNb3xXeh78X$AIq8(>0F*UADN_^Cybvk zrzg!!WN(dmXN@VVHx>1!s@^O?^6O2q-qdByR?lpsu{_h^nafD)nKM1J(la0T%ofkw z;F*P&<3S*35@;+IOKTTWGwT`OQbhM55dNe8Fi^o(W`361YTQg}|i(mkIDBfEVRjs~5do z;0l2&1$ZLGi}GBf7rk2G8i6hW{=lXe{geQIT-l3u3-k!A7U&h|6X+Kh5LhFyR$x%z zI)Up2h6H%1*Nd(f*dVY`V3UCEGe)^}>P1Hcwg}uHuvK82z^K5D0-qM(FXVaA&j@^0 z;Bx|jKwh9AFeb2F;Ew=FJwhuZ)%|s@nJfB-6~Db{PQCuk z%AB`lXk^Q9fBX9WEhED{L$fj~wyYi+?7gUebk&CI``5RxZf)&p?rm;qnAh0UU*9%w za%7cBt-OA4BRLHY4EFYnkX?im2wKVE4rQ4i*Ui0s0=Jm5IH!tgK#rDh#;?rAN`jhh z%1ZgnjFz$ZrsMC=5@(ijVdIL6bY*^*GT6`hlwETnZd)m9s)d`%6^A3V>9(Sa^V+WT zCY$~jT!|(667nbpbSST#VXRI9GW=h`{|+K}ePA=fh2y|!>`NjV%AS8|7oY00RrT==&v{w>ua;O;GGqWifw2rC@m z2p!*`MqsKytw2U#x&Y0R4rU3|3(Oa=%Y87C^Kh!%D!HhfA6zBZ3b~d5@~UOfC-2R2 ziMzp2SdCz9u^I$GQi)>Z1a=$?*dhP3N_G<R9Me&1oLs1xYt!awssZY8P21+db;Br8orse3QyjTF@Zs9#Zen_ql z0Anh5jEb|QC)|ATp3Ne7&pEgJE&>Wm2*}%N)G6L`0-H=(t>VK=KX0?#Cztv|{(vG( zlk13FTNHqotxJIh0p!ci?+qo$$P)-`7kEqgP8C=yFKqJjI|0Eu;b>Jqe`b{vGl&+o ziE$qbtsz5LNC#`TVMNJ6E9`cEOu1N&9FuH4S>^u# zOj7rkcC!8A9PFIvn!--EOOv~$niXaAab0Oj$He?pl~?NgT)XpA6-&%EU1v$%47ElRs7iWMR_ zA%I_p6WJC>*TAN9jo8FFZHM9tW`?qK=~Yy4hVA&O)gD*1+GAC#omjQn@v7BMs2Y1Z zu4*JJR;@Oy8u6k!JN9>`3b_d|D^6!#FJ2;Un>y74-mB+F;@C zgdGk$D=0H`S{4(asGR~`Rvfz!_lUg=$7NM3R|Y({+kcDC^~dqK{urO@C-S*|oX_`>yfFd@Q~=N=hh;dQ zc*qg__Do8ZPF>{o6Qb=vTYZ(z2}QOciveO#6979#9BzZp>R(BZc*L>2kLMUXniQd= z4n-cSUB}%e>`ht;NLG2=j>bSKjB#Z)&MFuEmVI`14NGladPczP?vp)TKJwPJ4BxCnzh%PB6!{ zVCS(G?3~zwoV*NMuyaBSb{1QZWW^Tj3|o+RQC;dske#~fEOw(1NjzUTvC5&;jf4pi zwi|WQdQNFE$g33)*>1-z9Z3agdDiK;#kIPyr4(qaMv41fHJ(lsLWu?+ld>ks@%8RH zR`0Hf_3j$4ch`h^cNObRvSPiv!g>>rOT827tvk7P1PYO=w{WVrL#f`vga}*jF1j*X z)&%Iw39CqzRR&IvO1$X;t|v<~WGojlzojC(k89iRV|DDFSjX=1I(AQ}V|THRBrDdj zJFFw|xPm{Sj@%1!bqtZJqj0LDL#d9!ga}*5Zdb=rj$!7mHKR(z}njmM_>Hh&vy z#5Q=p4ck^}V>`FyX|2jmS!YU4*;zCUH$`=BKm|(Epcv(J+R}D)wU1B|Od%Zg_V7x2 ziQkljgE}98x=<{%anXy9W{}V2F8XkTwzmnDM)`@gSc15!$Ft%D-?3=UQ*EVYzt0IV z%|= z?c=sWoc!ZaEWG|`jRsFnARiVg-Da=k@AFmb<5BFsGL_Zs{^Sg=vgl5cEC2V||H+j8 z)wxex63ZJ9l+J5BxbpA9+sX`mA#|6EiTV4PmRXU=-(S>EO&Xu(f?qaJd(s<+VkjqNuBLY3DD?i(RRnAS|6cs*k#R zrXPRi|VVT6p1rYOjJ z6(5fEaB;kZxn58uaTGJ;M#C{lmHm}UqJ6DfS8-6NxI`tDDk}RKdcIx6$6z1d{_3r0}pChZu`fNuC+PcH-q9)`7T14wYCb$H&j@ zll=yTEIwF$b3k;kR%Qo+{Z_xSz)?=ST0PQ~gnj53G#*-|NfS`6C?1J!~#RxzPA$B^qZwOSHHKc7SWk7^gczuLo0G2+KtBY zkhSK})~O3wMT=e-iXxHafJ?~BAGEU#KvgRf+}sGUFV-k$=JlRh83#4xWFC*q$p+U; zHoD4=TGGIvr3XaDy`MIoB?{lA#zAUj!_1lWgfa<<4*Ve-rC@mS#2IL%FhcrB*Y{V0!eU*qoHe_OGRid^8e;5n%iD(ax|stoJys){6x z(SlfaTR2}G4-XA$zdEALz^_Zo)FpKJ2}-tZ98{V6&FE(GuvQcw>tRL<%1vx+II&7H zo<<-_##P4u1U~o-#291dOR#n%fp8;4vkE%OpR4qJ!*+oWT=Ez@dDx4S%KZvF~heVPQ~&&H(sXo*8{ECp0fD*z-BX;@l*j=K?Z`?>Gf zCIjKh+F|Q6WUJ`L&)|iSa{8yr*kLo=AuWPB*>S9fuVIM$h1XogUbCYL3-&grXC2uO zN?)))3?u|=HJs~E6}O%kxPo(zmYhwifrsdOEnymoS@vi6WL&+6cPr)Ht+M>!e)oC6 z1wI@Gu65pBY|ksrF4!$`$7K`k;_4%5cTqs44adPRq=BS<^0-wpgc9l~QMC82poOo^Tnp0HWO>j!6ob;SFr>>-qcSiii2D(`0xRuowD67z z2hrc)m&dj;?jfC&mU?vM*e=N8un6e-Ku@4TRo<(Vu7XI|{T}L==6FwD4RBJ$WsDU# zv_ukyzy-KBTEUK*&7qAC7YkSwqD&N>H5c9Sf1HZL2Oep_R0p?)WGO=JZX##^No45! z3YLf>pH3we*|>sm@$fjZGCWCimrs@VK4T9}@(r-~3;mhKkUg{9z9dl!~CjxSL` zZvI%DM%p`fOl_sXfKq-lca4=d4T7aX;`9A#BX zYjs#9`FEra()k0S@|b4xo#s@Cd&`YLCFUb06s9Uh{w=yQJYtegr<0=PYIQ){tV(E= zKqH%I9`}fD=K3~-nB5S>bZAv76RvHO_>d5m%0j1YghD5X>Wo_pD)g~M$5x~*s*mep zxLxEvD@h-4ncCJm|PnY3TXVHe^#k4DPr5wOLpMjbPaUMtVn4 z#GPYabQ9v~RFy*IR{m(S{QXw4o@6J>Xo!<}!tS+(d;7H=fSZM9N(^21=3~>$wxW=q zZ9NUn(-3DwVe_0tOXbhEI$XfgZF3~F+eJu+5%`jjJLPFh4>!xx_*X6sB^A-1b50bE!sD4Y8vdJGt`QgFUKD`k@=qM*|$=`Dpq$ z1oVz3)d)^?$V>mhJ5iuVCuf+-IMjrkPHo0NwYtxP<}F$>uwaCkTCSeE^_S+{g@aZIu`&GS+M zaja#Cf_mN0-#!g)<$1g96?yf$$L*iPq?`g>>(H3X;Zh<7cbD7tZ4Z?CZ|BRt4$9~xM7(4sFZ0dh+|*2wACJ!D)C&G&DURH}ikWVchgGV0 z=&T?Li%$fPMrSggk#{BlyO|j7cp!;&M1eS63T`VUA}8&D|9<^@K$l?gumRVQE!kHFM zw{Vt)^+2CT+7$bUg?$!tvvqG2H7qJvlxRjmEPU3&oP~QW+z*vJk40|zE(>jK3oidX zih_Af+tBkAT(CvvACntF5q!?VX+Rl@N-$M0xJCH-mrf0w%-1YI^4Qy?eK=Jo4NbP>397kB3^9y;JW^c202uHdBj_>DAT)P z-NvE*k^ao`rOOv*IA}ZEGd!BvIyka6vw6$LjT?qXG6NfiGb=x#aE{nsuwquGgXE(Gq4>Zr~ZR%-m?Df3hnur%%4pk$o`Zteko^T?#y}o{KQ@wtg z+U#eZ^VQe4)X%kuFuZwgb7NCOV}oJ}-yj!1jRXAyJtEeJZ*FgMQ*TdOPeXmrKyOo1UvGU| zOKa0WW8dnQ=6Oy11I;k6rM0iIp_kkm+E%v>%&YHf8<;z{zPD*L0m^=$c{Lv@Mkc*& z13mq#xwu<}v^C6`J7;dgoO=FVSj0PV&c%yYoj=^Ou7B%>;p=A=&u8Dj0d1r)Su-Bg zF}Qi-P|xVa#7rqoW;`U*)DiI(UcR|MvvjirbJgg^{>;qHoc>ke%|N1o}YiDIPY#GUP^o;bcqWnt+1~&JPWcu(<%ztIXyZC=9|9?fE=S92) z|6-p1iaZuYy!prH5i)9|f7{5vs%CVUD~`|Mf0A=yt7mR-r}HOrtv%wk9iR8_Q1>sS zZi{%0NC@R^{XK6=#7lS1UcPd9&*0GP6~luYbW6hJ+S4m-KD&3V zBpbb59q}sGj*M)aZMnh~lZaO`xQ=T!<=pXH$}J0v(ydL;yZ!Ya{>?Yf^9~-p`!~V; zhkx#+|ME``#Qy3ZhRi=t{`R6*|7rFg-*(H3Wor)9_8;7R)-U@nY5ZvW(Ps{?`u^(v zpU;@Q@>AC|jlTTtU!DBu->#Ul;?@_UKkxn36Sq{aTl(u0?n>;Q^cRu8+B5W2o!Jrn z)DvHQXSC<(Z!c;b?)&R^@7npfnUDVcpT9l-+y430nG5u2f&0nIohkZ`|IV5akM4Zl zhT)E(A$YOgv-dyx`{(ox>AsNXeKdnSQj5+#uVeA~7c5zN;YG`qUwp}mOD|iw>hdeD z?7Zsgp4Gj5{R3;(4qkWt(7N>-Hf|c;JhJ76t=mR#tZ$f$CT?kMn|IbHGN+#QvFS5T zKV#;ZA3tl>>^Yw}7M4AGe*1!j*vchQ-dc~BS5zjdlGUlSKdEN&loO^-JMpC2x|2`& z|9g6I^553Sw$AEF{{0h|mhYVQ?7G;WzI)xq=6ieJ{L1Zpcg?-|N6C90J3M;wn+IRJ z`Or)M?yO~xmhZXg!OzBKKlXRG);+zWFZGSOUu7P+Zpo&{|KZ1ro*Mhifghgu-;cbq z?$SpNy!&6af3I-G9Yd4$?!Lb7#`jl$_}26Ne{xAzq~_32S#NK9^*Rq~hLx+WkoL&>det_xsO(^GD~r|K$CD zJM{A0EnTlJ{%+Ox4`0>(;(xlo{?O@J@5h(sF8#s2DLwn2e&pSUPyN`l4_&eI_9wnu zeea&f?t0A3jNe>(?bi<_zCHcT$_M}WrVXD+FI(IBpXz#^X`emt=#E8)Zz$XJqsWt) zm+ts@>fqa--~QmHQyzJ=?A{|!|9Rtq$KLpl&&Rekz3)|jad-K@oq9*|C*Q2P?sK!- z*Tw(cP~WYQuHK)$d+GJpukIPDeYw7W`^DbsU;X0tvY}7k8#(EjcjNghpRGRn?L!ar zuXytt{?8wK>fhXS^Wz`9TKCH8rL%uH`5$ij-WU3p9r)+Yp06+en@b2N>x7fN14R)Gagxc_XMOMUSKs)< z)C(8BvS!1pkH7!^+fRM*yr;f#!oe>-(EY|&zW@Ete(A-#pZ(U$ZI}J()k}W4=9@3B zx$?=sc%|%-g%`DaeaR2cs(N|ZNfm$n>kCU-x^Ijw`p<87zk2zrYj(f=#q|xNPYs^` zg@=0n+lhsNCwINHVMfbO*Ist}*2D`X7gT=p@hRrCPn=$Q`BP^<@!ZVHJzxK`s~cyAI8&``VAMdEi@p|Kaps^}hAxuUxmK;!EqyeP!ieUf7cS z@7veJh9_O=mF6#e`u3U|AN%Ro&U*0EZ6`gN_zz!v>CdX3I{5lG-adTOsjvR1^1w^q z`=fJzdf=DuJ@m@j^@Sgv@|`J91=pPZ_^*Gm^??mrFZjmPpIsfldE<4}AN|*}%LckC zBk7Os>i^ThudROXdmmljv-rD1Q?~uIV%OilRP}>Zh3LiKdZ=Vx&*^La@*k&k?_Ykw z;L;y$UBBSM>t6iY;j6!YXrS`dbKW`o<<^y7d-A^L?)v7BKlk0QU-0HfkJQ)xYR{fO z`PLKvwf;*Ft^A9xJUqR$W&aajD*M5A&b;!+tDatS=wowk9C+xl3wxe5C$0VDZD(!x zc`$RW*h;_*07Q^JDM?w0@b3IRC=&G)sXi}A`AdM^s$boIz*HE3$V+f zO@F3018$HUM3tVm$=D}L++S4P%yS(Z`R5)8$=I6c(T|n9m{UxzKf=AjyMX_4b$A!q zd^5I=ePHxAWCwZZLx1O0&y~ofzvH@re?z#KjqsDDXBBDJgCgspWc=^P65a_;kC-^F z=#OUW@8Y_&ZA|JT<9zC%hMNgfOg*Y{jK9lqi!T@P)g9@%^yFjdt{`NXl*i&XkpEo! zUoLUj;~g80#@f=w#bKz>vn$6aJ-&=NJf$+kKhOK3*G#%)q*-HAoJZ|9Qb$p_##?LY z`CVMbyAN*Z8JY&((wQB)TEP7weq_9vw4eUXfzuOtHYbz;OmBY9wfsItkCRG0J>$51 zJ)F?bA1X&-=U84`64pV|Dqa*NUp{f$LsBO4{TNT`ZM&@?y&lEc0(~PBIQiS@Jg>#J z*YWXxyVZVwn@K(vQKQYaetODAa{h + + + MimeKit + + + + + A MIME part with a Content-Type of application/pgp-encrypted. + + + An application/pgp-encrypted part will typically be the first child of + a part and contains only a Version + header. + + + + + Initializes a new instance of the + class based on the . + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new MIME part with a Content-Type of application/pgp-encrypted + and content matching "Version: 1\n". + + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + A MIME part with a Content-Type of application/pgp-signature. + + + An application/pgp-signature part contains detatched pgp signature data + and is typically contained within a part. + To verify the signature, use the + method on the parent multipart/signed part. + + + + + Initializes a new instance of the + class based on the . + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the + class with a Content-Type of application/pgp-signature. + + + Creates a new MIME part with a Content-Type of application/pgp-signature + and the as its content. + + The content stream. + + is null. + + + does not support reading. + -or- + does not support seeking. + + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + An S/MIME part with a Content-Type of application/pkcs7-mime. + + + An application/pkcs7-mime is an S/MIME part and may contain encrypted, + signed or compressed data (or any combination of the above). + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new MIME part with a Content-Type of application/pkcs7-mime + and the as its content. + Unless you are writing your own pkcs7 implementation, you'll probably + want to use the , + , and/or + method to create new instances + of this class. + + The S/MIME type. + The content stream. + + is null. + + + is not a valid value. + + + does not support reading. + -or- + does not support seeking. + + + + + Gets the value of the "smime-type" parameter. + + + Gets the value of the "smime-type" parameter. + + The value of the "smime-type" parameter. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Decompresses the content. + + + Decompresses the content using the specified . + + The decompressed . + The S/MIME context to use for decompressing. + + is null. + + + The "smime-type" parameter on the Content-Type header is not "compressed-data". + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Decompresses the content. + + + Decompresses the content using the default . + + The decompressed . + + The "smime-type" parameter on the Content-Type header is not "compressed-data". + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Decrypts the content. + + + Decrypts the content using the specified . + + The decrypted . + The S/MIME context to use for decrypting. + + is null. + + + The "smime-type" parameter on the Content-Type header is not "enveloped-data". + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Decrypts the content. + + + Decrypts the content using the default . + + The decrypted . + + The "smime-type" parameter on the Content-Type header is not "certs-only". + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Imports the certificates contained in the content. + + + Imports the certificates contained in the content. + + The S/MIME context to import certificates into. + + is null. + + + The "smime-type" parameter on the Content-Type header is not "certs-only". + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Verifies the signed-data and returns the unencapsulated . + + + Verifies the signed-data and returns the unencapsulated . + + The list of digital signatures. + The S/MIME context to use for verifying the signature. + The unencapsulated entity. + + is null. + + + The "smime-type" parameter on the Content-Type header is not "signed-data". + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Verifies the signed-data and returns the unencapsulated . + + + Verifies the signed-data and returns the unencapsulated . + + The list of digital signatures. + The unencapsulated entity. + + The "smime-type" parameter on the Content-Type header is not "signed-data". + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Compresses the specified entity. + + + Compresses the specified entity using the specified . + Most mail clients, even among those that support S/MIME, + do not support compression. + + The compressed entity. + The S/MIME context to use for compressing. + The entity. + + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Compresses the specified entity. + + + Compresses the specified entity using the default . + Most mail clients, even among those that support S/MIME, + do not support compression. + + The compressed entity. + The entity. + + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Encrypts the specified entity. + + + Encrypts the entity to the specified recipients using the supplied . + + The encrypted entity. + The S/MIME context to use for encrypting. + The recipients. + The entity. + + is null. + -or- + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Encrypts the specified entity. + + + Encrypts the entity to the specified recipients using the default . + + The encrypted entity. + The recipients. + The entity. + + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Encrypts the specified entity. + + + Encrypts the entity to the specified recipients using the supplied . + + The encrypted entity. + The S/MIME context to use for encrypting. + The recipients. + The entity. + + is null. + -or- + is null. + -or- + is null. + + + Valid certificates could not be found for one or more of the . + + + A certificate could not be found for one or more of the . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Encrypts the specified entity. + + + Encrypts the entity to the specified recipients using the default . + + The encrypted entity. + The recipients. + The entity. + + is null. + -or- + is null. + + + Valid certificates could not be found for one or more of the . + + + A certificate could not be found for one or more of the . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs the specified entity. + + + Signs the entity using the supplied signer and . + For better interoperability with other mail clients, you should use + + instead as the multipart/signed format is supported among a much larger + subset of mail client software. + + The signed entity. + The S/MIME context to use for signing. + The signer. + The entity. + + is null. + -or- + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs the specified entity. + + + Signs the entity using the supplied signer. + For better interoperability with other mail clients, you should use + + instead as the multipart/signed format is supported among a much larger + subset of mail client software. + + The signed entity. + The signer. + The entity. + + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs the specified entity. + + + Signs the entity using the supplied signer, digest algorithm and . + For better interoperability with other mail clients, you should use + + instead as the multipart/signed format is supported among a much larger + subset of mail client software. + + The signed entity. + The S/MIME context to use for signing. + The signer. + The digest algorithm to use for signing. + The entity. + + is null. + -or- + is null. + -or- + is null. + + + A signing certificate could not be found for . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs the specified entity. + + + Signs the entity using the supplied signer and digest algorithm. + For better interoperability with other mail clients, you should use + + instead as the multipart/signed format is supported among a much larger + subset of mail client software. + + The signed entity. + The signer. + The digest algorithm to use for signing. + The entity. + + is null. + -or- + is null. + + + A signing certificate could not be found for . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs and encrypts the specified entity. + + + Cryptographically signs entity using the supplied signer and then + encrypts the result to the specified recipients. + + The signed and encrypted entity. + The S/MIME context to use for signing and encrypting. + The signer. + The recipients. + The entity. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs and encrypts the specified entity. + + + Cryptographically signs entity using the supplied signer and then + encrypts the result to the specified recipients. + + The signed and encrypted entity. + The signer. + The recipients. + The entity. + + is null. + -or- + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs and encrypts the specified entity. + + + Cryptographically signs entity using the supplied signer and then + encrypts the result to the specified recipients. + + The signed and encrypted entity. + The S/MIME context to use for signing and encrypting. + The signer. + The digest algorithm to use for signing. + The recipients. + The entity. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + A signing certificate could not be found for . + -or- + A certificate could not be found for one or more of the . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs and encrypts the specified entity. + + + Cryptographically signs entity using the supplied signer and then + encrypts the result to the specified recipients. + + The signed and encrypted entity. + The signer. + The digest algorithm to use for signing. + The recipients. + The entity. + + is null. + -or- + is null. + -or- + is null. + + + A signing certificate could not be found for . + -or- + A certificate could not be found for one or more of the . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + An S/MIME part with a Content-Type of application/pkcs7-signature. + + + An application/pkcs7-signature part contains detatched pkcs7 signature data + and is typically contained within a part. + To verify the signature, use the + method on the parent multipart/signed part. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the + class with a Content-Type of application/pkcs7-signature. + + + Creates a new MIME part with a Content-Type of application/pkcs7-signature + and the as its content. + + The content stream. + + is null. + + + does not support reading. + -or- + does not support seeking. + + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + An exception that is thrown when a certificate could not be found for a specified mailbox. + + + An exception that is thrown when a certificate could not be found for a specified mailbox. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The serialization info. + The stream context. + + + + Initializes a new instance of the class. + + + Creates a new . + + The mailbox that could not be resolved to a valid certificate. + A message explaining the error. + + + + When overridden in a derived class, sets the + with information about the exception. + + + Sets the + with information about the exception. + + The serialization info. + The streaming context. + + is null. + + + + + Gets the mailbox address that could not be resolved to a certificate. + + + Gets the mailbox address that could not be resolved to a certificate. + + The mailbox address. + + + + An S/MIME recipient. + + + If the X.509 certificates are known for each of the recipients, you + may wish to use a as opposed to having + the do its own certificate + lookups for each . + + + + + Initializes a new instance of the class. + + + The initial value of the property will be set to + the Triple-DES encryption algorithm, which should be safe to assume for all modern + S/MIME v3.x client implementations. + + The recipient's certificate. + The recipient identifier type. + + is null. + + + + + Initializes a new instance of the class. + + + The initial value of the property will be set to + the Triple-DES encryption algorithm, which should be safe to assume for all modern + S/MIME v3.x client implementations. + The will be initialized to + . + + The recipient's certificate. + + is null. + + + + + Initializes a new instance of the class. + + + The initial value of the property will be set to + the Triple-DES encryption algorithm, which should be safe to assume for all modern + S/MIME v3.x client implementations. + + The recipient's certificate. + The recipient identifier type. + + is null. + + + + + Initializes a new instance of the class. + + + The initial value of the property will be set to + the Triple-DES encryption algorithm, which should be safe to assume for all modern + S/MIME v3.x client implementations. + The will be initialized to + . + + The recipient's certificate. + + is null. + + + + + Gets the recipient's certificate. + + + The certificate is used for the purpose of encrypting data. + + The certificate. + + + + Gets the recipient identifier type. + + + Specifies how the certificate should be looked up on the recipient's end. + + The recipient identifier type. + + + + Gets or sets the known S/MIME encryption capabilities of the + recipient's mail client, in their preferred order. + + + Provides the with an array of + encryption algorithms that are known to be supported by the + recpipient's client software and should be in the recipient's + order of preference. + + The encryption algorithms. + + + + A collection of objects. + + + If the X.509 certificates are known for each of the recipients, you + may wish to use a as opposed to + using the methods that take a list of + objects. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the number of recipients in the collection. + + + Indicates the number of recipients in the collection. + + The number of recipients in the collection. + + + + Gets a value indicating whether this instance is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Adds the specified recipient. + + + Adds the specified recipient. + + The recipient. + + is null. + + + + + Clears the recipient collection. + + + Removes all of the recipients from the collection. + + + + + Checks if the collection contains the specified recipient. + + + Determines whether or not the collection contains the specified recipient. + + true if the specified recipient exists; + otherwise false. + The recipient. + + is null. + + + + + Copies all of the recipients in the to the specified array. + + + Copies all of the recipients within the into the array, + starting at the specified array index. + + The array. + The array index. + + is null. + + + is out of range. + + + + + Removes the specified recipient. + + + Removes the specified recipient. + + true if the recipient was removed; otherwise false. + The recipient. + + is null. + + + + + Gets an enumerator for the collection of recipients. + + + Gets an enumerator for the collection of recipients. + + The enumerator. + + + + Gets an enumerator for the collection of recipients. + + + Gets an enumerator for the collection of recipients. + + The enumerator. + + + + An S/MIME signer. + + + If the X.509 certificate is known for the signer, you may wish to use a + as opposed to having the + do its own certificate lookup for the signer's . + + + + + Initializes a new instance of the class. + + + The initial value of the will be set to + and both the + and properties + will be initialized to empty tables. + + + + + Initializes a new instance of the class. + + + The initial value of the will be set to + and both the + and properties + will be initialized to empty tables. + + The chain of certificates starting with the signer's certificate back to the root. + The signer's private key. + + is null. + -or- + is null. + + + did not contain any certificates. + -or- + The certificate cannot be used for signing. + -or- + is not a private key. + + + + + Initializes a new instance of the class. + + + The initial value of the will + be set to and both the + and properties will be + initialized to empty tables. + + The signer's certificate. + The signer's private key. + + is null. + -or- + is null. + + + cannot be used for signing. + -or- + is not a private key. + + + + + Initializes a new instance of the class. + + + The initial value of the will + be set to and both the + and properties will be + initialized to empty tables. + + The signer's certificate. + + is null. + + + cannot be used for signing. + + + + + Gets the signer's certificate. + + + The signer's certificate that contains a public key that can be used for + verifying the digital signature. + + The signer's certificate. + + + + Gets the certificate chain. + + + Gets the certificate chain. + + The certificate chain. + + + + Gets or sets the digest algorithm. + + + Specifies which digest algorithm to use to generate the + cryptographic hash of the content being signed. + + The digest algorithm. + + + + Gets the private key. + + + The private key used for signing. + + The private key. + + + + Gets or sets the signed attributes. + + + A table of attributes that should be included in the signature. + + The signed attributes. + + + + Gets or sets the unsigned attributes. + + + A table of attributes that should not be signed in the signature, + but still included in transport. + + The unsigned attributes. + + + + An abstract cryptography context. + + + Generally speaking, applications should not use a + directly, but rather via higher level APIs such as , + and . + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the signature protocol. + + + The signature protocol is used by + in order to determine what the protocol parameter of the Content-Type + header should be. + + The signature protocol. + + + + Gets the encryption protocol. + + + The encryption protocol is used by + in order to determine what the protocol parameter of the Content-Type + header should be. + + The encryption protocol. + + + + Gets the key exchange protocol. + + + The key exchange protocol is really only used for PGP. + + The key exchange protocol. + + + + Checks whether or not the specified protocol is supported by the . + + + Used in order to make sure that the protocol parameter value specified in either a multipart/signed + or multipart/encrypted part is supported by the supplied cryptography context. + + true if the protocol is supported; otherwise false + The protocol. + + is null. + + + + + Gets the string name of the digest algorithm for use with the micalg parameter of a multipart/signed part. + + + Maps the to the appropriate string identifier + as used by the micalg parameter value of a multipart/signed Content-Type + header. + + The micalg value. + The digest algorithm. + + is out of range. + + + + + Gets the digest algorithm from the micalg parameter value in a multipart/signed part. + + + Maps the micalg parameter value string back to the appropriate . + + The digest algorithm. + The micalg parameter value. + + is null. + + + + + Cryptographically signs the content. + + + Cryptographically signs the content using the specified signer and digest algorithm. + + A new instance + containing the detached signature data. + The signer. + The digest algorithm to use for signing. + The content. + + is null. + -or- + is null. + + + is out of range. + + + The specified is not supported by this context. + + + A signing certificate could not be found for . + + + + + Verifies the specified content using the detached signatureData. + + + Verifies the specified content using the detached signatureData. + + A list of digital signatures. + The content. + The signature data. + + is null. + -or- + is null. + + + + + Encrypts the specified content for the specified recipients. + + + Encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The recipients. + The content. + + is null. + -or- + is null. + + + A certificate could not be found for one or more of the . + + + + + Decrypts the specified encryptedData. + + + Decrypts the specified encryptedData. + + The decrypted . + The encrypted data. + + is null. + + + + + Imports the public certificates or keys from the specified stream. + + + Imports the public certificates or keys from the specified stream. + + The raw certificate or key data. + + is null. + + + Importing keys is not supported by this cryptography context. + + + + + Exports the keys for the specified mailboxes. + + + Exports the keys for the specified mailboxes. + + A new instance containing the exported keys. + The mailboxes. + + is null. + + + was empty. + + + Exporting keys is not supported by this cryptography context. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + Releases all resources used by the object. + + Call when you are finished using the . The + method leaves the in an unusable state. After + calling , you must release all references to the so + the garbage collector can reclaim the memory that the was occupying. + + + + Creates a new for the specified protocol. + + + Creates a new for the specified protocol. + The default types can over overridden by calling + the method with the preferred type. + + The for the protocol. + The protocol. + + is null. + + + There are no supported s that support + the specified . + + + + + Registers a default or . + + + Registers the specified type as the default or + . + + A custom subclass of or + . + + is null. + + + is not a subclass of + or . + -or- + does not have a parameterless constructor. + + + + + Useful extensions for working with System.Data types. + + + + + Creates a with the specified name and value and then adds it to the command's parameters. + + The database command. + The parameter name. + The parameter value. + + + + A default implementation that uses + an SQLite database as a certificate and private key store. + + + The default S/MIME context is designed to be usable on any platform + where there exists a .NET runtime by storing certificates, CRLs, and + (encrypted) private keys in a SQLite database. + + + + + The default database path for certificates, private keys and CRLs. + + + On Microsoft Windows-based systems, this path will be something like C:\Users\UserName\AppData\Roaming\mimekit\smime.db. + On Unix systems such as Linux and Mac OS X, this path will be ~/.mimekit/smime.db. + + + + + Initializes a new instance of the class. + + + Allows the program to specify its own location for the SQLite database. If the file does not exist, + it will be created and the necessary tables and indexes will be constructed. + Requires linking with Mono.Data.Sqlite. + + The path to the SQLite database. + The password used for encrypting and decrypting the private keys. + + is null. + -or- + is null. + + + The specified file path is empty. + + + Mono.Data.Sqlite is not available. + + + The user does not have access to read the specified file. + + + An error occurred reading the file. + + + + + Initializes a new instance of the class. + + + Allows the program to specify its own password for the default database. + Requires linking with Mono.Data.Sqlite. + + The password used for encrypting and decrypting the private keys. + + Mono.Data.Sqlite is not available. + + + The user does not have access to read the database at the default location. + + + An error occurred reading the database at the default location. + + + + + Initializes a new instance of the class. + + + Not recommended for production use as the password to unlock the private keys is hard-coded. + Requires linking with Mono.Data.Sqlite. + + + Mono.Data.Sqlite is not available. + + + The user does not have access to read the database at the default location. + + + An error occurred reading the database at the default location. + + + + + Initializes a new instance of the class. + + + This constructor is useful for supplying a custom . + + The certificate database. + + is null. + + + + + Gets the X.509 certificate matching the specified selector. + + + Gets the first certificate that matches the specified selector. + + The certificate on success; otherwise null. + The search criteria for the certificate. + + + + Gets the private key for the certificate matching the specified selector. + + + Gets the private key for the first certificate that matches the specified selector. + + The private key on success; otherwise null. + The search criteria for the private key. + + + + Gets the trusted anchors. + + + A trusted anchor is a trusted root-level X.509 certificate, + generally issued by a Certificate Authority (CA). + + The trusted anchors. + + + + Gets the intermediate certificates. + + + An intermediate certificate is any certificate that exists between the root + certificate issued by a Certificate Authority (CA) and the certificate at + the end of the chain. + + The intermediate certificates. + + + + Gets the certificate revocation lists. + + + A Certificate Revocation List (CRL) is a list of certificate serial numbers issued + by a particular Certificate Authority (CA) that have been revoked, either by the CA + itself or by the owner of the revoked certificate. + + The certificate revocation lists. + + + + Gets the for the specified mailbox. + + + Constructs a with the appropriate certificate and + for the specified mailbox. + If the mailbox is a , the + property will be used instead of + the mailbox address for database lookups. + + A . + The mailbox. + + A certificate for the specified could not be found. + + + + + Gets the for the specified mailbox. + + + Constructs a with the appropriate signing certificate + for the specified mailbox. + If the mailbox is a , the + property will be used instead of + the mailbox address for database lookups. + + A . + The mailbox. + The preferred digest algorithm. + + A certificate for the specified could not be found. + + + + + Updates the known S/MIME capabilities of the client used by the recipient that owns the specified certificate. + + + Updates the known S/MIME capabilities of the client used by the recipient that owns the specified certificate. + + The certificate. + The encryption algorithm capabilities of the client (in preferred order). + The timestamp. + + + + Imports a certificate. + + + Imports the specified certificate into the database. + + The certificate. + + is null. + + + + + Imports a certificate revocation list. + + + Imports the specified certificate revocation list. + + The certificate revocation list. + + is null. + + + + + Imports certificates and keys from a pkcs12-encoded stream. + + + Imports all of the certificates and keys from the pkcs12-encoded stream. + + The raw certificate and key data. + The password to unlock the data. + + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Imports a DER-encoded certificate stream. + + + Imports all of the certificates in the DER-encoded stream. + + The raw certificate(s). + true if the certificates are trusted. + + is null. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + A digest algorithm. + + + Digest algorithms are secure hashing algorithms that are used + to generate unique fixed-length signatures for arbitrary data. + The most commonly used digest algorithms are currently MD5 + and SHA-1, however, MD5 was successfully broken in 2008 and should + be avoided. In late 2013, Microsoft announced that they would be + retiring their use of SHA-1 in their products by 2016 with the + assumption that its days as an unbroken digest algorithm were + numbered. It is speculated that the SHA-1 digest algorithm will + be vulnerable to collisions, and thus no longer considered secure, + by 2018. + Microsoft and other vendors plan to move to the SHA-2 suite of + digest algorithms which includes the following 4 variants: SHA-224, + SHA-256, SHA-384, and SHA-512. + + + + + No digest algorithm specified. + + + + + The MD5 digest algorithm. + + + + + The SHA-1 digest algorithm. + + + + + The Ripe-MD/160 digest algorithm. + + + + + The double-SHA digest algorithm. + + + + + The MD2 digest algorithm. + + + + + The TIGER/192 digest algorithm. + + + + + The HAVAL 5-pass 160-bit digest algorithm. + + + + + The SHA-256 digest algorithm. + + + + + The SHA-384 digest algorithm. + + + + + The SHA-512 digest algorithm. + + + + + The SHA-224 digest algorithm. + + + + + The MD4 digest algorithm. + + + + + A collection of digital signatures. + + + When verifying a digitally signed MIME part such as a + or a , you will get back a collection of + digital signatures. Typically, a signed message will only have a single signature + (created by the sender of the message), but it is possible for there to be + multiple signatures. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The signatures. + + + + An exception that is thrown when an error occurrs in . + + + For more information about the error condition, check the property. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The serialization info. + The stream context. + + is null. + + + + + A base implementation for DKIM body filters. + + + A base implementation for DKIM body filters. + + + + + Get or set whether the last filtered character was a newline. + + + Gets or sets whether the last filtered character was a newline. + + + + + Get or set whether the current line is empty. + + + Gets or sets whether the current line is empty. + + + + + Get or set the number of consecutive empty lines encountered. + + + Gets or sets the number of consecutive empty lines encountered. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + A DKIM canonicalization algorithm. + + + Empirical evidence demonstrates that some mail servers and relay systems + modify email in transit, potentially invalidating a signature. There are two + competing perspectives on such modifications. For most signers, mild modification + of email is immaterial to the authentication status of the email. For such signers, + a canonicalization algorithm that survives modest in-transit modification is + preferred. + Other signers demand that any modification of the email, however minor, + result in a signature verification failure. These signers prefer a canonicalization + algorithm that does not tolerate in-transit modification of the signed email. + + + + + The simple canonicalization algorithm tolerates almost no modification + by mail servers while the message is in-transit. + + + + + The relaxed canonicalization algorithm tolerates common modifications + by mail servers while the message is in-transit such as whitespace + replacement and header field line rewrapping. + + + + + A DKIM hash stream. + + + A DKIM hash stream. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The signature algorithm. + The max length of data to hash. + + + + Generate the hash. + + + Generates the hash. + + The hash. + + + + Checks whether or not the stream supports reading. + + + A is not readable. + + true if the stream supports reading; otherwise, false. + + + + Checks whether or not the stream supports writing. + + + A is always writable. + + true if the stream supports writing; otherwise, false. + + + + Checks whether or not the stream supports seeking. + + + A is not seekable. + + true if the stream supports seeking; otherwise, false. + + + + Checks whether or not reading and writing to the stream can timeout. + + + Writing to a cannot timeout. + + true if reading and writing to the stream can timeout; otherwise, false. + + + + Gets the length of the stream, in bytes. + + + The length of a indicates the + number of bytes that have been written to it. + + The length of the stream in bytes. + + The stream has been disposed. + + + + + Gets or sets the current position within the stream. + + + Since it is possible to seek within a , + it is possible that the position will not always be identical to the + length of the stream, but typically it will be. + + The position of the stream. + + An I/O error occurred. + + + The stream does not support seeking. + + + The stream has been disposed. + + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reading from a is not supported. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + The stream has been disposed. + + + The stream does not support reading. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + Increments the property by the number of bytes written. + If the updated position is greater than the current length of the stream, then + the property will be updated to be identical to the + position. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the position within the current stream. + + + Updates the within the stream. + + The new position within the stream. + The offset into the stream relative to the . + The origin to seek from. + + is not a valid . + + + The stream has been disposed. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + Since a does not actually do anything other than + count bytes, this method is a no-op. + + + The stream has been disposed. + + + + + Sets the length of the stream. + + + Sets the to the specified value and updates + to the specified value if (and only if) + the current position is greater than the new length value. + + The desired length of the stream in bytes. + + is out of range. + + + The stream has been disposed. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + A filter for the DKIM relaxed body canonicalization. + + + A filter for the DKIM relaxed body canonicalization. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A DKIM signature algorithm. + + + A DKIM signature algorithm. + + + + + The RSA-SHA1 signature algorithm. + + + + + The RSA-SHA256 signature algorithm. + + + + + A DKIM signature stream. + + + A DKIM signature stream. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The digest signer. + + is null. + + + + + Get the digest signer. + + + Gets the digest signer. + + The signer. + + + + Generate the signature. + + + Generates the signature. + + The signature. + + + + Verify the DKIM signature. + + + Verifies the DKIM signature. + + true if signature is valid; otherwise, false. + The base64 encoded DKIM signature from the b= parameter. + + is null. + + + + + Checks whether or not the stream supports reading. + + + A is not readable. + + true if the stream supports reading; otherwise, false. + + + + Checks whether or not the stream supports writing. + + + A is always writable. + + true if the stream supports writing; otherwise, false. + + + + Checks whether or not the stream supports seeking. + + + A is not seekable. + + true if the stream supports seeking; otherwise, false. + + + + Checks whether or not reading and writing to the stream can timeout. + + + Writing to a cannot timeout. + + true if reading and writing to the stream can timeout; otherwise, false. + + + + Gets the length of the stream, in bytes. + + + The length of a indicates the + number of bytes that have been written to it. + + The length of the stream in bytes. + + The stream has been disposed. + + + + + Gets or sets the current position within the stream. + + + Since it is possible to seek within a , + it is possible that the position will not always be identical to the + length of the stream, but typically it will be. + + The position of the stream. + + An I/O error occurred. + + + The stream does not support seeking. + + + The stream has been disposed. + + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reading from a is not supported. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + The stream has been disposed. + + + The stream does not support reading. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + Increments the property by the number of bytes written. + If the updated position is greater than the current length of the stream, then + the property will be updated to be identical to the + position. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the position within the current stream. + + + Updates the within the stream. + + The new position within the stream. + The offset into the stream relative to the . + The origin to seek from. + + is not a valid . + + + The stream has been disposed. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + Since a does not actually do anything other than + count bytes, this method is a no-op. + + + The stream has been disposed. + + + + + Sets the length of the stream. + + + Sets the to the specified value and updates + to the specified value if (and only if) + the current position is greater than the new length value. + + The desired length of the stream in bytes. + + is out of range. + + + The stream has been disposed. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + A DKIM signer. + + + A DKIM signer. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The signer's private key. + The domain that the signer represents. + The selector subdividing the domain. + + is null. + -or- + is null. + -or- + is null. + + + is not a private key. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The file containing the private key. + The domain that the signer represents. + The selector subdividing the domain. + + is null. + -or- + is null. + -or- + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + The file did not contain a private key. + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to read the specified file. + + + An I/O error occurred. + + + + + Gets the private key. + + + The private key used for signing. + + The private key. + + + + Get the domain that the signer represents. + + + Gets the domain that the signer represents. + + The domain. + + + + Get the selector subdividing the domain. + + + Gets the selector subdividing the domain. + + The selector. + + + + Get or set the agent or user identifier. + + + Gets or sets the agent or user identifier. + + The agent or user identifier. + + + + Get or set the algorithm to use for signing. + + + Gets or sets the algorithm to use for signing. + + The signature algorithm. + + + + Get or set the public key query method. + + + Gets or sets the public key query method. + The value should be a colon-separated list of query methods used to + retrieve the public key (plain-text; OPTIONAL, default is "dns/txt"). Each + query method is of the form "type[/options]", where the syntax and + semantics of the options depend on the type and specified options. + + The public key query method. + + + + A filter for the DKIM simple body canonicalization. + + + A filter for the DKIM simple body canonicalization. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + Encryption algorithms supported by S/MIME and OpenPGP. + + + Represents the available encryption algorithms for use with S/MIME and OpenPGP. + RC-2/40 was required by all S/MIME v2 implementations. However, since the + mid-to-late 1990's, RC-2/40 has been considered to be extremely weak and starting with + S/MIME v3.0 (published in 1999), all S/MIME implementations are required to implement + support for Triple-DES (aka 3DES) and should no longer encrypt using RC-2/40 unless + explicitly requested to do so by the user. + These days, most S/MIME implementations support the AES-128 and AES-256 + algorithms which are the recommended algorithms specified in S/MIME v3.2 and + should be preferred over the use of Triple-DES unless the client capabilities + of one or more of the recipients is unknown (or only supports Triple-DES). + + + + + The AES 128-bit encryption algorithm. + + + + + The AES 192-bit encryption algorithm. + + + + + The AES 256-bit encryption algorithm. + + + + + The Camellia 128-bit encryption algorithm. + + + + + The Camellia 192-bit encryption algorithm. + + + + + The Camellia 256-bit encryption algorithm. + + + + + The Cast-5 128-bit encryption algorithm. + + + + + The DES 56-bit encryption algorithm. + + + This is extremely weak encryption and should not be used + without consent from the user. + + + + + The Triple-DES encryption algorithm. + + + This is the weakest recommended encryption algorithm for use + starting with S/MIME v3 and should only be used as a fallback + if it is unknown what encryption algorithms are supported by + the recipient's mail client. + + + + + The IDEA 128-bit encryption algorithm. + + + + + The blowfish encryption algorithm (OpenPGP only). + + + + + The twofish encryption algorithm (OpenPGP only). + + + + + The RC2 40-bit encryption algorithm (S/MIME only). + + + This is extremely weak encryption and should not be used + without consent from the user. + + + + + The RC2 64-bit encryption algorithm (S/MIME only). + + + This is very weak encryption and should not be used + without consent from the user. + + + + + The RC2 128-bit encryption algorithm (S/MIME only). + + + + + A that uses the GnuPG keyrings. + + + A that uses the GnuPG keyrings. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + An interface for a digital certificate. + + + An interface for a digital certificate. + + + + + Gets the public key algorithm supported by the certificate. + + + Gets the public key algorithm supported by the certificate. + + The public key algorithm. + + + + Gets the date that the certificate was created. + + + Gets the date that the certificate was created. + + The creation date. + + + + Gets the expiration date of the certificate. + + + Gets the expiration date of the certificate. + + The expiration date. + + + + Gets the fingerprint of the certificate. + + + Gets the fingerprint of the certificate. + + The fingerprint. + + + + Gets the email address of the owner of the certificate. + + + Gets the email address of the owner of the certificate. + + The email address. + + + + Gets the name of the owner of the certificate. + + + Gets the name of the owner of the certificate. + + The name of the owner. + + + + An interface for a digital signature. + + + An interface for a digital signature. + + + + + Gets certificate used by the signer. + + + Gets certificate used by the signer. + + The signer's certificate. + + + + Gets the public key algorithm used for the signature. + + + Gets the public key algorithm used for the signature. + + The public key algorithm. + + + + Gets the digest algorithm used for the signature. + + + Gets the digest algorithm used for the signature. + + The digest algorithm. + + + + Gets the creation date of the digital signature. + + + Gets the creation date of the digital signature. + + The creation date. + + + + Verifies the digital signature. + + + Verifies the digital signature. + + true if the signature is valid; otherwise false. + + An error verifying the signature has occurred. + + + + + An interface for a service which locates and retrieves DKIM public keys (probably via DNS). + + + An interface for a service which locates and retrieves DKIM public keys (probably via DNS). + Since MimeKit itself does not implement DNS, it is up to the client to implement public key lookups + via DNS. + + + + + + Locate and retrieves the public key for the given domain and selector. + + + Locates and retrieves the public key for the given domain and selector. + + The public key. + A colon-separated list of query methods used to retrieve the public key. The default is "dns/txt". + The domain. + The selector. + The cancellation token. + + + + An interface for an X.509 Certificate database. + + + An X.509 certificate database is used for storing certificates, metdata related to the certificates + (such as encryption algorithms supported by the associated client), certificate revocation lists (CRLs), + and private keys. + + + + + Find the specified certificate. + + + Searches the database for the specified certificate, returning the matching + record with the desired fields populated. + + The matching record if found; otherwise null. + The certificate. + The desired fields. + + + + Finds the certificates matching the specified selector. + + + Searches the database for certificates matching the selector, returning all + matching certificates. + + The matching certificates. + The match selector or null to return all certificates. + + + + Finds the private keys matching the specified selector. + + + Searches the database for certificate records matching the selector, returning the + private keys for each matching record. + + The matching certificates. + The match selector or null to return all private keys. + + + + Finds the certificate records for the specified mailbox. + + + Searches the database for certificates matching the specified mailbox that are valid + for the date and time specified, returning all matching records populated with the + desired fields. + + The matching certificate records populated with the desired fields. + The mailbox. + The date and time. + true if a private key is required. + The desired fields. + + + + Finds the certificate records matching the specified selector. + + + Searches the database for certificate records matching the selector, returning all + of the matching records populated with the desired fields. + + The matching certificate records populated with the desired fields. + The match selector or null to match all certificates. + true if only trusted certificates should be returned. + The desired fields. + + + + Add the specified certificate record. + + + Adds the specified certificate record to the database. + + The certificate record. + + + + Remove the specified certificate record. + + + Removes the specified certificate record from the database. + + The certificate record. + + + + Update the specified certificate record. + + + Updates the specified fields of the record in the database. + + The certificate record. + The fields to update. + + + + Finds the CRL records for the specified issuer. + + + Searches the database for CRL records matching the specified issuer, returning + all matching records populated with the desired fields. + + The matching CRL records populated with the desired fields. + The issuer. + The desired fields. + + + + Finds the specified certificate revocation list. + + + Searches the database for the specified CRL, returning the matching record with + the desired fields populated. + + The matching record if found; otherwise null. + The certificate revocation list. + The desired fields. + + + + Add the specified CRL record. + + + Adds the specified CRL record to the database. + + The CRL record. + + + + Remove the specified CRL record. + + + Removes the specified CRL record from the database. + + The CRL record. + + + + Update the specified CRL record. + + + Updates the specified fields of the record in the database. + + The CRL record. + + + + Gets a certificate revocation list store. + + + Gets a certificate revocation list store. + + A certificate recovation list store. + + + + A multipart MIME part with a ContentType of multipart/encrypted containing an encrypted MIME part. + + + This mime-type is common when dealing with PGP/MIME but is not used for S/MIME. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The OpenPGP cryptography context to use for signing and encrypting. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + The private key for could not be found. + + + A public key for one or more of the could not be found. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + A default has not been registered. + + + The private key for could not be found. + + + A public key for one or more of the could not be found. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The OpenPGP cryptography context to use for singing and encrypting. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + The is not supported. + -or- + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The OpenPGP cryptography context to use for singing and encrypting. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + A default has not been registered. + -or- + The is not supported. + -or- + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + A default has not been registered. + -or- + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The OpenPGP cryptography context to use for encrypting. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + A public key for one or more of the could not be found. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + + + A default has not been registered. + + + A public key for one or more of the could not be found. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The OpenPGP cryptography context to use for encrypting. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + THe specified encryption algorithm is not supported. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The OpenPGP cryptography context to use for encrypting. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + A default has not been registered. + -or- + The specified encryption algorithm is not supported. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + A default has not been registered. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The OpenPGP cryptography context to use for singing and encrypting. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + The is not supported. + -or- + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The OpenPGP cryptography context to use for signing and encrypting. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + The private key for could not be found. + + + A public key for one or more of the could not be found. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + A default has not been registered. + -or- + The is not supported. + -or- + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + A default has not been registered. + + + The private key for could not be found. + + + A public key for one or more of the could not be found. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The OpenPGP cryptography context to use for singing and encrypting. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + The is not supported. + -or- + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The OpenPGP cryptography context to use for singing and encrypting. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + A default has not been registered. + -or- + The is not supported. + -or- + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by signing and encrypting the specified entity. + + + Signs the entity using the supplied signer and digest algorithm and then encrypts to + the specified recipients, encapsulating the result in a new multipart/encrypted part. + + A new instance containing + the signed and encrypted version of the specified entity. + The signer to use to sign the entity. + The digest algorithm to use for signing. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The was out of range. + + + A default has not been registered. + -or- + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The OpenPGP cryptography context to use for encrypting. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + THe specified encryption algorithm is not supported. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The OpenPGP cryptography context to use for encrypting. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + A public key for one or more of the could not be found. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + A default has not been registered. + -or- + The specified encryption algorithm is not supported. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + + + A default has not been registered. + + + A public key for one or more of the could not be found. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The OpenPGP cryptography context to use for encrypting. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + THe specified encryption algorithm is not supported. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The OpenPGP cryptography context to use for encrypting. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The encryption algorithm. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + A default has not been registered. + -or- + The specified encryption algorithm is not supported. + + + + + Create a multipart/encrypted MIME part by encrypting the specified entity. + + + Encrypts the entity to the specified recipients, encapsulating the result in a + new multipart/encrypted part. + + A new instance containing + the encrypted version of the specified entity. + The recipients for the encrypted entity. + The entity to sign and encrypt. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + + + A default has not been registered. + + + + + Decrypts the part. + + + Decrypts the and extracts any digital signatures in cases + where the content was also signed. + + The decrypted entity. + The OpenPGP cryptography context to use for decrypting. + A list of digital signatures if the data was both signed and encrypted. + + is null. + + + The protocol parameter was not specified. + -or- + The multipart is malformed in some way. + + + The provided does not support the protocol parameter. + + + The private key could not be found to decrypt the encrypted data. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Decrypts the part. + + + Decrypts the part. + + The decrypted entity. + The OpenPGP cryptography context to use for decrypting. + + is null. + + + The protocol parameter was not specified. + -or- + The multipart is malformed in some way. + + + The provided does not support the protocol parameter. + + + The private key could not be found to decrypt the encrypted data. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Decrypts the part. + + + Decrypts the and extracts any digital signatures in cases + where the content was also signed. + + The decrypted entity. + A list of digital signatures if the data was both signed and encrypted. + + The protocol parameter was not specified. + -or- + The multipart is malformed in some way. + + + A suitable for + decrypting could not be found. + + + The private key could not be found to decrypt the encrypted data. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Decrypts the part. + + + Decrypts the part. + + The decrypted entity. + + The protocol parameter was not specified. + -or- + The multipart is malformed in some way. + + + A suitable for + decrypting could not be found. + + + The private key could not be found to decrypt the encrypted data. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + A signed multipart, as used by both S/MIME and PGP/MIME protocols. + + + The first child of a multipart/signed is the content while the second child + is the detached signature data. Any other children are not defined and could + be anything. + + + + + Initializes a new instance of the class. + + This constructor is used by . + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Creates a new . + + + Cryptographically signs the entity using the supplied signer and digest algorithm in + order to generate a detached signature and then adds the entity along with the + detached signature data to a new multipart/signed part. + + A new instance. + The cryptography context to use for signing. + The signer. + The digest algorithm to use for signing. + The entity to sign. + + is null. + -or- + is null. + -or- + is null. + + + The was out of range. + + + The is not supported. + + + A signing certificate could not be found for . + + + The private key could not be found for . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Creates a new . + + + Cryptographically signs the entity using the supplied signer and digest algorithm in + order to generate a detached signature and then adds the entity along with the + detached signature data to a new multipart/signed part. + + A new instance. + The OpenPGP context to use for signing. + The signer. + The digest algorithm to use for signing. + The entity to sign. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + + + The was out of range. + + + The is not supported. + + + An error occurred in the OpenPGP subsystem. + + + + + Creates a new . + + + Cryptographically signs the entity using the supplied signer and digest algorithm in + order to generate a detached signature and then adds the entity along with the + detached signature data to a new multipart/signed part. + + A new instance. + The signer. + The digest algorithm to use for signing. + The entity to sign. + + is null. + -or- + is null. + + + cannot be used for signing. + + + The was out of range. + + + A cryptography context suitable for signing could not be found. + -or- + The is not supported. + + + An error occurred in the OpenPGP subsystem. + + + + + Creates a new . + + + Cryptographically signs the entity using the supplied signer in order + to generate a detached signature and then adds the entity along with + the detached signature data to a new multipart/signed part. + + A new instance. + The S/MIME context to use for signing. + The signer. + The entity to sign. + + is null. + -or- + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Creates a new . + + + Cryptographically signs the entity using the supplied signer in order + to generate a detached signature and then adds the entity along with + the detached signature data to a new multipart/signed part. + + A new instance. + The signer. + The entity to sign. + + is null. + -or- + is null. + + + A cryptography context suitable for signing could not be found. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Prepare the MIME entity for transport using the specified encoding constraints. + + + Prepares the MIME entity for transport using the specified encoding constraints. + + The encoding constraint. + The maximum number of octets allowed per line (not counting the CRLF). Must be between 60 and 998 (inclusive). + + is not between 60 and 998 (inclusive). + -or- + is not a valid value. + + + + + Verifies the multipart/signed part. + + + Verifies the multipart/signed part using the supplied cryptography context. + + A signer info collection. + The cryptography context to use for verifying the signature. + + is null. + + + The multipart is malformed in some way. + + + does not support verifying the signature part. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Verifies the multipart/signed part. + + + Verifies the multipart/signed part using the default cryptography context. + + A signer info collection. + + The protocol parameter was not specified. + -or- + The multipart is malformed in some way. + + + A cryptography context suitable for verifying the signature could not be found. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + An X.509 certificate database built on PostgreSQL. + + + An X.509 certificate database is used for storing certificates, metdata related to the certificates + (such as encryption algorithms supported by the associated client), certificate revocation lists (CRLs), + and private keys. + This particular database uses PostgreSQL to store the data. + + + + + Initializes a new instance of the class. + + + Creates a new and opens a connection to the + PostgreSQL database using the specified connection string. + + The connection string. + The password used for encrypting and decrypting the private keys. + + is null. + -or- + is null. + + + is empty. + + + + + Initializes a new instance of the class. + + + Creates a new using the provided Npgsql database connection. + + The Npgsql connection. + The password used for encrypting and decrypting the private keys. + + is null. + -or- + is null. + + + + + Gets the command to create the certificates table. + + + Constructs the command to create a certificates table suitable for storing + objects. + + The . + The . + + + + Gets the command to create the CRLs table. + + + Constructs the command to create a CRLs table suitable for storing + objects. + + The . + The . + + + + An abstract OpenPGP cryptography context which can be used for PGP/MIME. + + + Generally speaking, applications should not use a + directly, but rather via higher level APIs such as + and . + + + + + Initializes a new instance of the class. + + + Subclasses choosing to use this constructor MUST set the , + , , and the + properties themselves. + + + + + Initializes a new instance of the class. + + + Creates a new using the specified public and private keyring paths. + + The public keyring file path. + The secret keyring file path. + + is null. + -or- + is null. + + + An error occurred while reading one of the keyring files. + + + An error occurred while parsing one of the keyring files. + + + + + Gets or sets the default encryption algorithm. + + + Gets or sets the default encryption algorithm. + + The encryption algorithm. + + The specified encryption algorithm is not supported. + + + + + Gets the public keyring path. + + + Gets the public keyring path. + + The public key ring path. + + + + Gets the secret keyring path. + + + Gets the secret keyring path. + + The secret key ring path. + + + + Gets the public keyring bundle. + + + Gets the public keyring bundle. + + The public keyring bundle. + + + + Gets the secret keyring bundle. + + + Gets the secret keyring bundle. + + The secret keyring bundle. + + + + Gets the signature protocol. + + + The signature protocol is used by + in order to determine what the protocol parameter of the Content-Type + header should be. + + The signature protocol. + + + + Gets the encryption protocol. + + + The encryption protocol is used by + in order to determine what the protocol parameter of the Content-Type + header should be. + + The encryption protocol. + + + + Gets the key exchange protocol. + + + Gets the key exchange protocol. + + The key exchange protocol. + + + + Checks whether or not the specified protocol is supported. + + + Used in order to make sure that the protocol parameter value specified in either a multipart/signed + or multipart/encrypted part is supported by the supplied cryptography context. + + true if the protocol is supported; otherwise false + The protocol. + + is null. + + + + + Gets the string name of the digest algorithm for use with the micalg parameter of a multipart/signed part. + + + Maps the to the appropriate string identifier + as used by the micalg parameter value of a multipart/signed Content-Type + header. For example: + + AlgorithmName + pgp-md5 + pgp-sha1 + pgp-ripemd160 + pgp-md2 + pgp-tiger192 + pgp-haval-5-160 + pgp-sha256 + pgp-sha384 + pgp-sha512 + pgp-sha224 + + + The micalg value. + The digest algorithm. + + is out of range. + + + + + Gets the digest algorithm from the micalg parameter value in a multipart/signed part. + + + Maps the micalg parameter value string back to the appropriate . + + The digest algorithm. + The micalg parameter value. + + is null. + + + + + Gets the public key associated with the mailbox address. + + + Gets the public key associated with the mailbox address. + + The encryption key. + The mailbox. + + is null. + + + The public key for the specified could not be found. + + + + + Gets the public keys for the specified mailbox addresses. + + + Gets the public keys for the specified mailbox addresses. + + The encryption keys. + The mailboxes. + + is null. + + + A public key for one or more of the could not be found. + + + + + Gets the signing key associated with the mailbox address. + + + Gets the signing key associated with the mailbox address. + + The signing key. + The mailbox. + + is null. + + + A private key for the specified could not be found. + + + + + Gets the password for key. + + + Gets the password for key. + + The password for key. + The key. + + The user chose to cancel the password request. + + + + + Gets the private key from the specified secret key. + + + Gets the private key from the specified secret key. + + The private key. + The secret key. + + is null. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Gets the private key. + + + Gets the private key. + + The private key. + The key identifier. + + The specified secret key could not be found. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Gets the equivalent for the + specified . + + + Maps a to the equivalent . + + The hash algorithm. + The digest algorithm. + + is out of range. + + + is not a supported digest algorithm. + + + + + Cryptographically signs the content. + + + Cryptographically signs the content using the specified signer and digest algorithm. + + A new instance + containing the detached signature data. + The signer. + The digest algorithm to use for signing. + The content. + + is null. + -or- + is null. + + + is out of range. + + + The specified is not supported by this context. + + + A signing key could not be found for . + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Cryptographically signs the content. + + + Cryptographically signs the content using the specified signer and digest algorithm. + + A new instance + containing the detached signature data. + The signer. + The digest algorithm to use for signing. + The content. + + is null. + -or- + is null. + + + cannot be used for signing. + + + The was out of range. + + + The is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Gets the equivalent for the specified + . + + + Gets the equivalent for the specified + . + + The digest algorithm. + The hash algorithm. + + is out of range. + + + does not have an equivalent value. + + + + + Gets the equivalent for the specified + . + + + Gets the equivalent for the specified + . + + The public-key algorithm. + The public-key algorithm. + + is out of range. + + + does not have an equivalent value. + + + + + Verifies the specified content using the detached signatureData. + + + Verifies the specified content using the detached signatureData. + + A list of digital signatures. + The content. + The signature data. + + is null. + -or- + is null. + + + + + Encrypts the specified content for the specified recipients. + + + Encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The recipients. + The content. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + A public key could not be found for one or more of the . + + + + + Encrypts the specified content for the specified recipients. + + + Encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The encryption algorithm. + The recipients. + The content. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + A public key could not be found for one or more of the . + + + The specified encryption algorithm is not supported. + + + + + Encrypts the specified content for the specified recipients. + + + Encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The encryption algorithm. + The recipients. + The content. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The specified encryption algorithm is not supported. + + + + + Encrypts the specified content for the specified recipients. + + + Encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The recipients. + The content. + + is null. + -or- + is null. + + + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + + + Cryptographically signs and encrypts the specified content for the specified recipients. + + + Cryptographically signs and encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The signer. + The digest algorithm to use for signing. + The recipients. + The content. + + is null. + -or- + is null. + -or- + is null. + + + is out of range. + + + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The specified is not supported by this context. + + + The private key could not be found for . + + + A public key could not be found for one or more of the . + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Cryptographically signs and encrypts the specified content for the specified recipients. + + + Cryptographically signs and encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The signer. + The digest algorithm to use for signing. + The encryption algorithm. + The recipients. + The content. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The specified encryption algorithm is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Cryptographically signs and encrypts the specified content for the specified recipients. + + + Cryptographically signs and encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The signer. + The digest algorithm to use for signing. + The encryption algorithm. + The recipients. + The content. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The specified encryption algorithm is not supported. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Cryptographically signs and encrypts the specified content for the specified recipients. + + + Cryptographically signs and encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The signer. + The digest algorithm to use for signing. + The recipients. + The content. + + is null. + -or- + is null. + -or- + is null. + + + cannot be used for signing. + -or- + One or more of the recipient keys cannot be used for encrypting. + -or- + No recipients were specified. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + + + Decrypts the specified encryptedData and extracts the digital signers if the content was also signed. + + + Decrypts the specified encryptedData and extracts the digital signers if the content was also signed. + + The decrypted stream. + The encrypted data. + A list of digital signatures if the data was both signed and encrypted. + + is null. + + + The private key could not be found to decrypt the stream. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + An OpenPGP error occurred. + + + + + Decrypts the specified encryptedData. + + + Decrypts the specified encryptedData. + + The decrypted stream. + The encrypted data. + + is null. + + + The private key could not be found to decrypt the stream. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + An OpenPGP error occurred. + + + + + Decrypts the specified encryptedData and extracts the digital signers if the content was also signed. + + + Decrypts the specified encryptedData and extracts the digital signers if the content was also signed. + + The decrypted . + The encrypted data. + A list of digital signatures if the data was both signed and encrypted. + + is null. + + + The private key could not be found to decrypt the stream. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + An OpenPGP error occurred. + + + + + Decrypts the specified encryptedData. + + + Decrypts the specified encryptedData. + + The decrypted . + The encrypted data. + + is null. + + + The private key could not be found to decrypt the stream. + + + The user chose to cancel the password prompt. + + + 3 bad attempts were made to unlock the secret key. + + + An OpenPGP error occurred. + + + + + Saves the public key-ring bundle. + + + Atomically saves the public key-ring bundle to the path specified by . + Called by if any public keys were successfully imported. + + + An error occured while saving the public key-ring bundle. + + + + + Saves the secret key-ring bundle. + + + Atomically saves the secret key-ring bundle to the path specified by . + Called by if any secret keys were successfully imported. + + + An error occured while saving the secret key-ring bundle. + + + + + Imports a public pgp keyring. + + + Imports a public pgp keyring. + + The pgp keyring. + + is null. + + + + + Imports a public pgp keyring bundle. + + + Imports a public pgp keyring bundle. + + The pgp keyring bundle. + + is null. + + + + + Imports public pgp keys from the specified stream. + + + Imports public pgp keys from the specified stream. + + The raw key data. + + is null. + + + An error occurred while parsing the raw key-ring data + -or- + An error occured while saving the public key-ring bundle. + + + + + Imports a secret pgp keyring. + + + Imports a secret pgp keyring. + + The pgp keyring. + + is null. + + + + + Imports a secret pgp keyring bundle. + + + Imports a secret pgp keyring bundle. + + The pgp keyring bundle. + + is null. + + + + + Imports secret pgp keys from the specified stream. + + + Imports secret pgp keys from the specified stream. + The stream should consist of an armored secret keyring bundle + containing 1 or more secret keyrings. + + The raw key data. + + is null. + + + An error occurred while parsing the raw key-ring data + -or- + An error occured while saving the public key-ring bundle. + + + + + Exports the public keys for the specified mailboxes. + + + Exports the public keys for the specified mailboxes. + + A new instance containing the exported public keys. + The mailboxes. + + is null. + + + was empty. + + + + + Exports the specified public keys. + + + Exports the specified public keys. + + A new instance containing the exported public keys. + The keys. + + is null. + + + + + Exports the specified public keys. + + + Exports the specified public keys. + + A new instance containing the exported public keys. + The keys. + + is null. + + + + + An OpenPGP digital certificate. + + + An OpenPGP digital certificate. + + + + + Gets the public key. + + + Gets the public key. + + The public key. + + + + Gets the public key algorithm supported by the certificate. + + + Gets the public key algorithm supported by the certificate. + + The public key algorithm. + + + + Gets the date that the certificate was created. + + + Gets the date that the certificate was created. + + The creation date. + + + + Gets the expiration date of the certificate. + + + Gets the expiration date of the certificate. + + The expiration date. + + + + Gets the fingerprint of the certificate. + + + Gets the fingerprint of the certificate. + + The fingerprint. + + + + Gets the email address of the owner of the certificate. + + + Gets the email address of the owner of the certificate. + + The email address. + + + + Gets the name of the owner of the certificate. + + + Gets the name of the owner of the certificate. + + The name of the owner. + + + + An OpenPGP digital signature. + + + An OpenPGP digital signature. + + + + + Gets certificate used by the signer. + + + Gets certificate used by the signer. + + The signer's certificate. + + + + Gets the public key algorithm used for the signature. + + + Gets the public key algorithm used for the signature. + + The public key algorithm. + + + + Gets the digest algorithm used for the signature. + + + Gets the digest algorithm used for the signature. + + The digest algorithm. + + + + Gets the creation date of the digital signature. + + + Gets the creation date of the digital signature. + + The creation date. + + + + Verifies the digital signature. + + + Verifies the digital signature. + + true if the signature is valid; otherwise false. + + An error verifying the signature has occurred. + + + + + An exception that is thrown when a private key could not be found for a specified mailbox or key id. + + + An exception that is thrown when a private key could not be found for a specified mailbox or key id. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The serialization info. + The stream context. + + + + Initializes a new instance of the class. + + + Creates a new . + + The mailbox that could not be resolved to a valid private key. + A message explaining the error. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The key id that could not be resolved to a valid certificate. + A message explaining the error. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The key id that could not be resolved to a valid certificate. + A message explaining the error. + + is null. + + + + + When overridden in a derived class, sets the + with information about the exception. + + + Sets the + with information about the exception. + + The serialization info. + The streaming context. + + is null. + + + + + Gets the key id that could not be found. + + + Gets the key id that could not be found. + + The key id. + + + + An enumeration of public key algorithms. + + + An enumeration of public key algorithms. + + + + + No public key algorithm specified. + + + + + The RSA algorithm. + + + + + The RSA encryption-only algorithm. + + + + + The RSA sign-only algorithm. + + + + + The El-Gamal encryption-only algorithm. + + + + + The DSA algorithm. + + + + + The elliptic curve algorithm. + + + + + The elliptic curve DSA algorithm. + + + + + The El-Gamal algorithm. + + + + + The Diffie-Hellman algorithm. + + + + + An exception that is thrown when a public key could not be found for a specified mailbox. + + + An exception that is thrown when a public key could not be found for a specified mailbox. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The serialization info. + The stream context. + + + + Initializes a new instance of the class. + + + Creates a new . + + The mailbox that could not be resolved to a valid private key. + A message explaining the error. + + + + When overridden in a derived class, sets the + with information about the exception. + + + Sets the + with information about the exception. + + The serialization info. + The streaming context. + + is null. + + + + + Gets the key id that could not be found. + + + Gets the key id that could not be found. + + The key id. + + + + A secure mailbox address which includes a fingerprint for a certificate. + + + When signing or encrypting a message, it is necessary to look up the + X.509 certificate in order to do the actual sign or encrypt operation. One + way of accomplishing this is to use the email address of sender or recipient + as a unique identifier. However, a better approach is to use the fingerprint + (or 'thumbprint' in Microsoft parlance) of the user's certificate. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified fingerprint. + + The character encoding to be used for encoding the name. + The name of the mailbox. + The route of the mailbox. + The address of the mailbox. + The fingerprint of the certificate belonging to the owner of the mailbox. + + is null. + -or- + is null. + -or- + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified fingerprint. + + The name of the mailbox. + The route of the mailbox. + The address of the mailbox. + The fingerprint of the certificate belonging to the owner of the mailbox. + + is null. + -or- + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified fingerprint. + + The character encoding to be used for encoding the name. + The name of the mailbox. + The address of the mailbox. + The fingerprint of the certificate belonging to the owner of the mailbox. + + is null. + -or- + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified fingerprint. + + The name of the mailbox. + The address of the mailbox. + The fingerprint of the certificate belonging to the owner of the mailbox. + + is null. + -or- + is null. + + + + + Gets the fingerprint of the certificate and/or key to use for signing or encrypting. + + + + + A fingerprint is a SHA-1 hash of the raw certificate data and is often used + as a unique identifier for a particular certificate in a certificate store. + + The fingerprint of the certificate. + + + + A Secure MIME (S/MIME) cryptography context. + + + Generally speaking, applications should not use a + directly, but rather via higher level APIs such as + and . + + + + + Initializes a new instance of the class. + + + Enables the following encryption algorithms by default: + + + + + + + + + + + + + + + + Gets the signature protocol. + + + The signature protocol is used by + in order to determine what the protocol parameter of the Content-Type + header should be. + + The signature protocol. + + + + Gets the encryption protocol. + + + The encryption protocol is used by + in order to determine what the protocol parameter of the Content-Type + header should be. + + The encryption protocol. + + + + Gets the key exchange protocol. + + + Gets the key exchange protocol. + + The key exchange protocol. + + + + Checks whether or not the specified protocol is supported by the . + + + Used in order to make sure that the protocol parameter value specified in either a multipart/signed + or multipart/encrypted part is supported by the supplied cryptography context. + + true if the protocol is supported; otherwise false + The protocol. + + is null. + + + + + Gets the string name of the digest algorithm for use with the micalg parameter of a multipart/signed part. + + + Maps the to the appropriate string identifier + as used by the micalg parameter value of a multipart/signed Content-Type + header. For example: + + AlgorithmName + md5 + sha-1 + sha-224 + sha-256 + sha-384 + sha-512 + + + The micalg value. + The digest algorithm. + + is out of range. + + + + + Gets the digest algorithm from the micalg parameter value in a multipart/signed part. + + + Maps the micalg parameter value string back to the appropriate . + + The digest algorithm. + The micalg parameter value. + + is null. + + + + + Gets the preferred rank order for the encryption algorithms; from the strongest to the weakest. + + + Gets the preferred rank order for the encryption algorithms; from the strongest to the weakest. + + The preferred encryption algorithm ranking. + + + + Gets the enabled encryption algorithms in ranked order. + + + Gets the enabled encryption algorithms in ranked order. + + The enabled encryption algorithms. + + + + Enables the encryption algorithm. + + + Enables the encryption algorithm. + + The encryption algorithm. + + + + Disables the encryption algorithm. + + + Disables the encryption algorithm. + + The encryption algorithm. + + + + Checks whether the specified encryption algorithm is enabled. + + + Determines whether the specified encryption algorithm is enabled. + + true if the specified encryption algorithm is enabled; otherwise, false. + Algorithm. + + + + Gets the X.509 certificate matching the specified selector. + + + Gets the first certificate that matches the specified selector. + + The certificate on success; otherwise null. + The search criteria for the certificate. + + + + Gets the private key for the certificate matching the specified selector. + + + Gets the private key for the first certificate that matches the specified selector. + + The private key on success; otherwise null. + The search criteria for the private key. + + + + Gets the trusted anchors. + + + A trusted anchor is a trusted root-level X.509 certificate, + generally issued by a certificate authority (CA). + + The trusted anchors. + + + + Gets the intermediate certificates. + + + An intermediate certificate is any certificate that exists between the root + certificate issued by a Certificate Authority (CA) and the certificate at + the end of the chain. + + The intermediate certificates. + + + + Gets the certificate revocation lists. + + + A Certificate Revocation List (CRL) is a list of certificate serial numbers issued + by a particular Certificate Authority (CA) that have been revoked, either by the CA + itself or by the owner of the revoked certificate. + + The certificate revocation lists. + + + + Gets the for the specified mailbox. + + + Constructs a with the appropriate certificate and + for the specified mailbox. + If the mailbox is a , the + property will be used instead of + the mailbox address. + + A . + The mailbox. + + A certificate for the specified could not be found. + + + + + Gets a collection of CmsRecipients for the specified mailboxes. + + + Gets a collection of CmsRecipients for the specified mailboxes. + + A . + The mailboxes. + + is null. + + + A certificate for one or more of the specified could not be found. + + + + + Gets the for the specified mailbox. + + + Constructs a with the appropriate signing certificate + for the specified mailbox. + If the mailbox is a , the + property will be used instead of + the mailbox address for database lookups. + + A . + The mailbox. + The preferred digest algorithm. + + A certificate for the specified could not be found. + + + + + Updates the known S/MIME capabilities of the client used by the recipient that owns the specified certificate. + + + Updates the known S/MIME capabilities of the client used by the recipient that owns the specified certificate. + + The certificate. + The encryption algorithm capabilities of the client (in preferred order). + The timestamp. + + + + Gets the OID for the digest algorithm. + + + Gets the OID for the digest algorithm. + + The digest oid. + The digest algorithm. + + is out of range. + + + The specified is not supported by this context. + + + + + Compresses the specified stream. + + + Compresses the specified stream. + + A new instance + containing the compressed content. + The stream to compress. + + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Decompress the specified stream. + + + Decompress the specified stream. + + The decompressed mime part. + The stream to decompress. + + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs and encapsulates the content using the specified signer. + + + Cryptographically signs and encapsulates the content using the specified signer. + + A new instance + containing the detached signature data. + The signer. + The content. + + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs and encapsulates the content using the specified signer and digest algorithm. + + + Cryptographically signs and encapsulates the content using the specified signer and digest algorithm. + + A new instance + containing the detached signature data. + The signer. + The digest algorithm to use for signing. + The content. + + is null. + -or- + is null. + + + is out of range. + + + The specified is not supported by this context. + + + A signing certificate could not be found for . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs the content using the specified signer. + + + Cryptographically signs the content using the specified signer. + + A new instance + containing the detached signature data. + The signer. + The content. + + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Cryptographically signs the content using the specified signer and digest algorithm. + + + Cryptographically signs the content using the specified signer and digest algorithm. + + A new instance + containing the detached signature data. + The signer. + The digest algorithm to use for signing. + The content. + + is null. + -or- + is null. + + + is out of range. + + + The specified is not supported by this context. + + + A signing certificate could not be found for . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Attempts to map a + to a . + + + Attempts to map a + to a . + + true if the algorithm identifier was successfully mapped; false otherwise. + The algorithm identifier. + The encryption algorithm. + + is null. + + + + + Verifies the specified content using the detached signatureData. + + + Verifies the specified content using the detached signatureData. + + A list of the digital signatures. + The content. + The detached signature data. + + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Verifies the digital signatures of the specified signedData and extract the original content. + + + Verifies the digital signatures of the specified signedData and extract the original content. + + The list of digital signatures. + The signed data. + The unencapsulated entity. + + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Gets the preferred encryption algorithm to use for encrypting to the specified recipients. + + + Gets the preferred encryption algorithm to use for encrypting to the specified recipients + based on the encryption algorithms supported by each of the recipients, the + , and the . + If the supported encryption algorithms are unknown for any recipient, it is assumed that + the recipient supports at least the Triple-DES encryption algorithm. + + The preferred encryption algorithm. + The recipients. + + + + Encrypts the specified content for the specified recipients. + + + Encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted content. + The recipients. + The content. + + is null. + -or- + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Encrypts the specified content for the specified recipients. + + + Encrypts the specified content for the specified recipients. + + A new instance + containing the encrypted data. + The recipients. + The content. + + is null. + -or- + is null. + + + A certificate for one or more of the could not be found. + + + A certificate could not be found for one or more of the . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Decrypts the specified encryptedData. + + + Decrypts the specified encryptedData. + + The decrypted . + The encrypted data. + + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Imports certificates and keys from a pkcs12-encoded stream. + + + Imports certificates and keys from a pkcs12-encoded stream. + + The raw certificate and key data. + The password to unlock the stream. + + is null. + -or- + is null. + + + Importing keys is not supported by this cryptography context. + + + + + Exports the certificates for the specified mailboxes. + + + Exports the certificates for the specified mailboxes. + + A new instance containing + the exported keys. + The mailboxes. + + is null. + + + No mailboxes were specified. + + + A certificate for one or more of the could not be found. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Imports the specified certificate. + + + Imports the specified certificate. + + The certificate. + + is null. + + + + + Imports the specified certificate revocation list. + + + Imports the specified certificate revocation list. + + The certificate revocation list. + + is null. + + + + + Imports certificates (as from a certs-only application/pkcs-mime part) + from the specified stream. + + + Imports certificates (as from a certs-only application/pkcs-mime part) + from the specified stream. + + The raw key data. + + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + An S/MIME digital certificate. + + + An S/MIME digital certificate. + + + + + Gets the . + + + Gets the . + + The certificate. + + + + Gets the public key algorithm supported by the certificate. + + + Gets the public key algorithm supported by the certificate. + + The public key algorithm. + + + + Gets the date that the certificate was created. + + + Gets the date that the certificate was created. + + The creation date. + + + + Gets the expiration date of the certificate. + + + Gets the expiration date of the certificate. + + The expiration date. + + + + Gets the fingerprint of the certificate. + + + Gets the fingerprint of the certificate. + + The fingerprint. + + + + Gets the email address of the owner of the certificate. + + + Gets the email address of the owner of the certificate. + + The email address. + + + + Gets the name of the owner of the certificate. + + + Gets the name of the owner of the certificate. + + The name of the owner. + + + + An S/MIME digital signature. + + + An S/MIME digital signature. + + + + + Gets the signer info. + + + Gets the signer info. + + The signer info. + + + + Gets the list of encryption algorithms, in preferential order, + that the signer's client supports. + + + Gets the list of encryption algorithms, in preferential order, + that the signer's client supports. + + The S/MIME encryption algorithms. + + + + Gets the certificate chain. + + + If building the certificate chain failed, this value will be null and + will be set. + + The certificate chain. + + + + The exception that occurred, if any, while building the certificate chain. + + + This will only be set if building the certificate chain failed. + + The exception. + + + + Gets certificate used by the signer. + + + Gets certificate used by the signer. + + The signer's certificate. + + + + Gets the public key algorithm used for the signature. + + + Gets the public key algorithm used for the signature. + + The public key algorithm. + + + + Gets the digest algorithm used for the signature. + + + Gets the digest algorithm used for the signature. + + The digest algorithm. + + + + Gets the creation date of the digital signature. + + + Gets the creation date of the digital signature. + + The creation date. + + + + Verifies the digital signature. + + + Verifies the digital signature. + + true if the signature is valid; otherwise false. + + An error verifying the signature has occurred. + + + + + The type of S/MIME data that an application/pkcs7-mime part contains. + + + The type of S/MIME data that an application/pkcs7-mime part contains. + + + + + S/MIME compressed data. + + + + + S/MIME enveloped data. + + + + + S/MIME signed data. + + + + + S/MIME certificate data. + + + + + The S/MIME data type is unknown. + + + + + An abstract X.509 certificate database built on generic SQL storage. + + + An X.509 certificate database is used for storing certificates, metdata related to the certificates + (such as encryption algorithms supported by the associated client), certificate revocation lists (CRLs), + and private keys. + This particular database uses SQLite to store the data. + + + + + Initializes a new instance of the class. + + + Creates a new using the provided database connection. + + The database . + The password used for encrypting and decrypting the private keys. + + is null. + -or- + is null. + + + + + Gets the command to create the certificates table. + + + Constructs the command to create a certificates table suitable for storing + objects. + + The . + The . + + + + Gets the command to create the CRLs table. + + + Constructs the command to create a CRLs table suitable for storing + objects. + + The . + The . + + + + Gets the database command to select the record matching the specified certificate. + + + Gets the database command to select the record matching the specified certificate. + + The database command. + The certificate. + The fields to return. + + + + Gets the database command to select the certificate records for the specified mailbox. + + + Gets the database command to select the certificate records for the specified mailbox. + + The database command. + The mailbox. + The date and time for which the certificate should be valid. + true + The fields to return. + + + + Gets the database command to select the certificate records for the specified mailbox. + + + Gets the database command to select the certificate records for the specified mailbox. + + The database command. + Selector. + If set to true trusted only. + true + The fields to return. + + + + Gets the database command to select the CRL records matching the specified issuer. + + + Gets the database command to select the CRL records matching the specified issuer. + + The database command. + The issuer. + The fields to return. + + + + Gets the database command to select the record for the specified CRL. + + + Gets the database command to select the record for the specified CRL. + + The database command. + The X.509 CRL. + The fields to return. + + + + Gets the database command to select all CRLs in the table. + + + Gets the database command to select all CRLs in the table. + + The database command. + + + + Gets the database command to delete the specified certificate record. + + + Gets the database command to delete the specified certificate record. + + The database command. + The certificate record. + + + + Gets the database command to delete the specified CRL record. + + + Gets the database command to delete the specified CRL record. + + The database command. + The record. + + + + Gets the database command to insert the specified certificate record. + + + Gets the database command to insert the specified certificate record. + + The database command. + The certificate record. + + + + Gets the database command to insert the specified CRL record. + + + Gets the database command to insert the specified CRL record. + + The database command. + The CRL record. + + + + Gets the database command to update the specified record. + + + Gets the database command to update the specified record. + + The database command. + The certificate record. + The fields to update. + + + + Gets the database command to update the specified CRL record. + + + Gets the database command to update the specified CRL record. + + The database command. + The CRL record. + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + An X.509 certificate database built on SQLite. + + + An X.509 certificate database is used for storing certificates, metdata related to the certificates + (such as encryption algorithms supported by the associated client), certificate revocation lists (CRLs), + and private keys. + This particular database uses SQLite to store the data. + + + + + Initializes a new instance of the class. + + + Creates a new and opens a connection to the + SQLite database at the specified path using the Mono.Data.Sqlite binding to the native + SQLite library. + If Mono.Data.Sqlite is not available or if an alternative binding to the native + SQLite library is preferred, then consider using + instead. + + The file name. + The password used for encrypting and decrypting the private keys. + + is null. + -or- + is null. + + + The specified file path is empty. + + + The user does not have access to read the specified file. + + + An error occurred reading the file. + + + + + Initializes a new instance of the class. + + + Creates a new using the provided SQLite database connection. + + The SQLite connection. + The password used for encrypting and decrypting the private keys. + + is null. + -or- + is null. + + + + + Gets the command to create the certificates table. + + + Constructs the command to create a certificates table suitable for storing + objects. + + The . + The . + + + + Gets the command to create the CRLs table. + + + Constructs the command to create a CRLs table suitable for storing + objects. + + The . + The . + + + + The method to use for identifying a certificate. + + + The method to use for identifying a certificate. + + + + + The identifier type is unknown. + + + + + Identify the certificate by its Issuer and Serial Number properties. + + + + + Identify the certificate by the sha1 hash of its public key. + + + + + An S/MIME context that does not persist certificates, private keys or CRLs. + + + A is a special S/MIME context that + does not use a persistent store for certificates, private keys, or CRLs. + Instead, certificates, private keys, and CRLs are maintained in memory only. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the X.509 certificate matching the specified selector. + + + Gets the first certificate that matches the specified selector. + + The certificate on success; otherwise null. + The search criteria for the certificate. + + + + Gets the private key for the certificate matching the specified selector. + + + Gets the private key for the first certificate that matches the specified selector. + + The private key on success; otherwise null. + The search criteria for the private key. + + + + Gets the trusted anchors. + + + A trusted anchor is a trusted root-level X.509 certificate, + generally issued by a certificate authority (CA). + + The trusted anchors. + + + + Gets the intermediate certificates. + + + An intermediate certificate is any certificate that exists between the root + certificate issued by a Certificate Authority (CA) and the certificate at + the end of the chain. + + The intermediate certificates. + + + + Gets the certificate revocation lists. + + + A Certificate Revocation List (CRL) is a list of certificate serial numbers issued + by a particular Certificate Authority (CA) that have been revoked, either by the CA + itself or by the owner of the revoked certificate. + + The certificate revocation lists. + + + + Gets the for the specified mailbox. + + + Constructs a with the appropriate certificate and + for the specified mailbox. + If the mailbox is a , the + property will be used instead of + the mailbox address. + + A . + The mailbox. + + A certificate for the specified could not be found. + + + + + Gets the for the specified mailbox. + + + Constructs a with the appropriate signing certificate + for the specified mailbox. + If the mailbox is a , the + property will be used instead of + the mailbox address for database lookups. + + A . + The mailbox. + The preferred digest algorithm. + + A certificate for the specified could not be found. + + + + + Updates the known S/MIME capabilities of the client used by the recipient that owns the specified certificate. + + + Updates the known S/MIME capabilities of the client used by the recipient that owns the specified certificate. + + The certificate. + The encryption algorithm capabilities of the client (in preferred order). + The timestamp. + + + + Imports certificates and keys from a pkcs12-encoded stream. + + + Imports certificates and keys from a pkcs12-encoded stream. + + The raw certificate and key data. + The password to unlock the stream. + + is null. + -or- + is null. + + + + + Imports the specified certificate. + + + Imports the specified certificate. + + The certificate. + + is null. + + + + + Imports the specified certificate revocation list. + + + Imports the specified certificate revocation list. + + The certificate revocation list. + + is null. + + + + + An S/MIME cryptography context that uses Windows' . + + + An S/MIME cryptography context that uses Windows' . + + + + + Initializes a new instance of the class. + + + Creates a new . + + The X.509 store location. + + + + Initializes a new instance of the class. + + + Constructs an S/MIME context using the current user's X.509 store location. + + + + + Gets the X.509 store location. + + + Gets the X.509 store location. + + The store location. + + + + Gets the X.509 certificate based on the selector. + + + Gets the X.509 certificate based on the selector. + + The certificate on success; otherwise null. + The search criteria for the certificate. + + + + Gets the private key based on the provided selector. + + + Gets the private key based on the provided selector. + + The private key on success; otherwise null. + The search criteria for the private key. + + + + Gets the trusted anchors. + + + Gets the trusted anchors. + + The trusted anchors. + + + + Gets the intermediate certificates. + + + Gets the intermediate certificates. + + The intermediate certificates. + + + + Gets the certificate revocation lists. + + + Gets the certificate revocation lists. + + The certificate revocation lists. + + + + Gets the X.509 certificate associated with the . + + + Gets the X.509 certificate associated with the . + + The certificate. + The mailbox. + + A certificate for the specified could not be found. + + + + + Gets the cms signer for the specified . + + + Gets the cms signer for the specified . + + The cms signer. + The mailbox. + The preferred digest algorithm. + + A certificate for the specified could not be found. + + + + + Updates the known S/MIME capabilities of the client used by the recipient that owns the specified certificate. + + + Updates the known S/MIME capabilities of the client used by the recipient that owns the specified certificate. + + The certificate. + The encryption algorithm capabilities of the client (in preferred order). + The timestamp. + + + + Sign and encapsulate the content using the specified signer. + + + Sign and encapsulate the content using the specified signer. + + A new instance + containing the detached signature data. + The signer. + The digest algorithm to use for signing. + The content. + + is null. + -or- + is null. + + + is out of range. + + + The specified is not supported by this context. + + + A signing certificate could not be found for . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Sign the content using the specified signer. + + + Sign the content using the specified signer. + + A new instance + containing the detached signature data. + The signer. + The digest algorithm to use for signing. + The content. + + is null. + -or- + is null. + + + is out of range. + + + The specified is not supported by this context. + + + A signing certificate could not be found for . + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Decrypt the encrypted data. + + + Decrypt the encrypted data. + + The decrypted . + The encrypted data. + + is null. + + + An error occurred in the cryptographic message syntax subsystem. + + + + + Import the specified certificate. + + + Import the specified certificate. + + The certificate. + + is null. + + + + + Import the specified certificate revocation list. + + + Import the specified certificate revocation list. + + The certificate revocation list. + + is null. + + + + + Imports certificates and keys from a pkcs12-encoded stream. + + + Imports certificates and keys from a pkcs12-encoded stream. + + The raw certificate and key data. + The password to unlock the stream. + + is null. + -or- + is null. + + + Importing keys is not supported by this cryptography context. + + + + + An X.509 certificate chain. + + + An X.509 certificate chain. + + + + + Initializes a new instance of the class. + + + Creates a new X.509 certificate chain. + + + + + Initializes a new instance of the class. + + + Creates a new X.509 certificate chain based on the specified collection of certificates. + + A collection of certificates. + + + + Gets the index of the specified certificate within the chain. + + + Finds the index of the specified certificate, if it exists. + + The index of the specified certificate if found; otherwise -1. + The certificate to get the index of. + + is null. + + + + + Inserts the certificate at the specified index. + + + Inserts the certificate at the specified index in the certificates. + + The index to insert the certificate. + The certificate. + + is null. + + + is out of range. + + + + + Removes the certificate at the specified index. + + + Removes the certificate at the specified index. + + The index of the certificate to remove. + + is out of range. + + + + + Gets or sets the certificate at the specified index. + + + Gets or sets the certificate at the specified index. + + The internet certificate at the specified index. + The index of the certificate to get or set. + + is null. + + + is out of range. + + + + + Gets the number of certificates in the chain. + + + Indicates the number of certificates in the chain. + + The number of certificates. + + + + Gets a value indicating whether this instance is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Adds the specified certificate to the chain. + + + Adds the specified certificate to the chain. + + The certificate. + + is null. + + + + + Adds the specified range of certificates to the chain. + + + Adds the specified range of certificates to the chain. + + The certificates. + + is null. + + + + + Clears the certificate chain. + + + Removes all of the certificates from the chain. + + + + + Checks if the chain contains the specified certificate. + + + Determines whether or not the certificate chain contains the specified certificate. + + true if the specified certificate exists; + otherwise false. + The certificate. + + is null. + + + + + Copies all of the certificates in the chain to the specified array. + + + Copies all of the certificates within the chain into the array, + starting at the specified array index. + + The array to copy the certificates to. + The index into the array. + + is null. + + + is out of range. + + + + + Removes the specified certificate from the chain. + + + Removes the specified certificate from the chain. + + true if the certificate was removed; otherwise false. + The certificate. + + is null. + + + + + Removes the specified range of certificates from the chain. + + + Removes the specified range of certificates from the chain. + + The certificates. + + is null. + + + + + Gets an enumerator for the list of certificates. + + + Gets an enumerator for the list of certificates. + + The enumerator. + + + + Gets an enumerator for the list of certificates. + + + Gets an enumerator for the list of certificates. + + The enumerator. + + + + Gets an enumerator of matching X.509 certificates based on the specified selector. + + + Gets an enumerator of matching X.509 certificates based on the specified selector. + + The matching certificates. + The match criteria. + + + + Gets a collection of matching X.509 certificates based on the specified selector. + + + Gets a collection of matching X.509 certificates based on the specified selector. + + The matching certificates. + The match criteria. + + + + An X.509 certificate database. + + + An X.509 certificate database is used for storing certificates, metadata related to the certificates + (such as encryption algorithms supported by the associated client), certificate revocation lists (CRLs), + and private keys. + + + + + Initializes a new instance of the class. + + + The password is used to encrypt and decrypt private keys in the database and cannot be null. + + The password used for encrypting and decrypting the private keys. + + is null. + + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Gets or sets the algorithm used for encrypting the private keys. + + + The encryption algorithm should be one of the PBE (password-based encryption) algorithms + supported by Bouncy Castle. + The default algorithm is SHA-256 + AES256. + + The encryption algorithm. + + + + Gets or sets the minimum iterations. + + + The default minimum number of iterations is 1024. + + The minimum iterations. + + + + Gets or sets the size of the salt. + + + The default salt size is 20. + + The size of the salt. + + + + Gets the column names for the specified fields. + + + Gets the column names for the specified fields. + + The column names. + The fields. + + + + Gets the database command to select the record matching the specified certificate. + + + Gets the database command to select the record matching the specified certificate. + + The database command. + The certificate. + The fields to return. + + + + Gets the database command to select the certificate records for the specified mailbox. + + + Gets the database command to select the certificate records for the specified mailbox. + + The database command. + The mailbox. + The date and time for which the certificate should be valid. + true if the certificate must have a private key. + The fields to return. + + + + Gets the database command to select certificate records matching the specified selector. + + + Gets the database command to select certificate records matching the specified selector. + + The database command. + Selector. + true if only trusted certificates should be matched. + true if the certificate must have a private key. + The fields to return. + + + + Gets the column names for the specified fields. + + + Gets the column names for the specified fields. + + The column names. + The fields. + + + + Gets the database command to select the CRL records matching the specified issuer. + + + Gets the database command to select the CRL records matching the specified issuer. + + The database command. + The issuer. + The fields to return. + + + + Gets the database command to select the record for the specified CRL. + + + Gets the database command to select the record for the specified CRL. + + The database command. + The X.509 CRL. + The fields to return. + + + + Gets the database command to select all CRLs in the table. + + + Gets the database command to select all CRLs in the table. + + The database command. + + + + Gets the database command to delete the specified certificate record. + + + Gets the database command to delete the specified certificate record. + + The database command. + The certificate record. + + + + Gets the database command to delete the specified CRL record. + + + Gets the database command to delete the specified CRL record. + + The database command. + The record. + + + + Gets the value for the specified column. + + + Gets the value for the specified column. + + The value. + The certificate record. + The column name. + + is not a known column name. + + + + + Gets the value for the specified column. + + + Gets the value for the specified column. + + The value. + The CRL record. + The column name. + + is not a known column name. + + + + + Gets the database command to insert the specified certificate record. + + + Gets the database command to insert the specified certificate record. + + The database command. + The certificate record. + + + + Gets the database command to insert the specified CRL record. + + + Gets the database command to insert the specified CRL record. + + The database command. + The CRL record. + + + + Gets the database command to update the specified record. + + + Gets the database command to update the specified record. + + The database command. + The certificate record. + The fields to update. + + + + Gets the database command to update the specified CRL record. + + + Gets the database command to update the specified CRL record. + + The database command. + The CRL record. + + + + Find the specified certificate. + + + Searches the database for the specified certificate, returning the matching + record with the desired fields populated. + + The matching record if found; otherwise null. + The certificate. + The desired fields. + + is null. + + + + + Finds the certificates matching the specified selector. + + + Searches the database for certificates matching the selector, returning all + matching certificates. + + The matching certificates. + The match selector or null to return all certificates. + + + + Finds the private keys matching the specified selector. + + + Searches the database for certificate records matching the selector, returning the + private keys for each matching record. + + The matching certificates. + The match selector or null to return all private keys. + + + + Finds the certificate records for the specified mailbox. + + + Searches the database for certificates matching the specified mailbox that are valid + for the date and time specified, returning all matching records populated with the + desired fields. + + The matching certificate records populated with the desired fields. + The mailbox. + The date and time. + true if a private key is required. + The desired fields. + + is null. + + + + + Finds the certificate records matching the specified selector. + + + Searches the database for certificate records matching the selector, returning all + of the matching records populated with the desired fields. + + The matching certificate records populated with the desired fields. + The match selector or null to match all certificates. + true if only trusted certificates should be returned. + The desired fields. + + + + Add the specified certificate record. + + + Adds the specified certificate record to the database. + + The certificate record. + + is null. + + + + + Remove the specified certificate record. + + + Removes the specified certificate record from the database. + + The certificate record. + + is null. + + + + + Update the specified certificate record. + + + Updates the specified fields of the record in the database. + + The certificate record. + The fields to update. + + is null. + + + + + Finds the CRL records for the specified issuer. + + + Searches the database for CRL records matching the specified issuer, returning + all matching records populated with the desired fields. + + The matching CRL records populated with the desired fields. + The issuer. + The desired fields. + + is null. + + + + + Finds the specified certificate revocation list. + + + Searches the database for the specified CRL, returning the matching record with + the desired fields populated. + + The matching record if found; otherwise null. + The certificate revocation list. + The desired fields. + + is null. + + + + + Add the specified CRL record. + + + Adds the specified CRL record to the database. + + The CRL record. + + is null. + + + + + Remove the specified CRL record. + + + Removes the specified CRL record from the database. + + The CRL record. + + is null. + + + + + Update the specified CRL record. + + + Updates the specified fields of the record in the database. + + The CRL record. + + is null. + + + + + Gets a certificate revocation list store. + + + Gets a certificate revocation list store. + + A certificate recovation list store. + + + + Gets a collection of matching certificates matching the specified selector. + + + Gets a collection of matching certificates matching the specified selector. + + The matching certificates. + The match criteria. + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + Releases all resource used by the object. + + Call when you are finished using the + . The method leaves the + in an unusable state. After calling + , you must release all references to the + so the garbage collector can reclaim the memory that + the was occupying. + + + + X509Certificate extension methods. + + + A collection of useful extension methods for an . + + + + + Gets the issuer name info. + + + For a list of available identifiers, see . + + The issuer name info. + The certificate. + The name identifier. + + is null. + + + + + Gets the issuer name info. + + + For a list of available identifiers, see . + + The issuer name info. + The certificate. + The name identifier. + + is null. + + + + + Gets the common name of the certificate. + + + Gets the common name of the certificate. + + The common name. + The certificate. + + is null. + + + + + Gets the subject name of the certificate. + + + Gets the subject name of the certificate. + + The subject name. + The certificate. + + is null. + + + + + Gets the subject email address of the certificate. + + + The email address component of the certificate's Subject identifier is + sometimes used as a way of looking up certificates for a particular + user if a fingerprint is not available. + + The subject email address. + The certificate. + + is null. + + + + + Gets the fingerprint of the certificate. + + + A fingerprint is a SHA-1 hash of the raw certificate data and is often used + as a unique identifier for a particular certificate in a certificate store. + + The fingerprint. + The certificate. + + is null. + + + + + Gets the key usage flags. + + + The X.509 Key Usage Flags are used to determine which operations a certificate + may be used for. + + The key usage flags. + The certificate. + + is null. + + + + + X.509 certificate record fields. + + + The record fields are used when querying the + for certificates. + + + + + The "id" field is typically just the ROWID in the database. + + + + + The "trusted" field is a boolean value indicating whether the certificate + is trusted. + + + + + The "algorithms" field is used for storing the last known list of + values that are supported by the + client associated with the certificate. + + + + + The "algorithms updated" field is used to store the timestamp of the + most recent update to the Algorithms field. + + + + + The "certificate" field is sued for storing the binary data of the actual + certificate. + + + + + The "private key" field is used to store the encrypted binary data of the + private key associated with the certificate, if available. + + + + + An X.509 certificate record. + + + Represents an X.509 certificate record loaded from a database. + + + + + Gets the identifier. + + + The id is typically the ROWID of the certificate in the database and is not + generally useful outside of the internals of the database implementation. + + The identifier. + + + + Gets the basic constraints of the certificate. + + + Gets the basic constraints of the certificate. + + The basic constraints of the certificate. + + + + Gets or sets a value indicating whether the certificate is trusted. + + + Indiciates whether or not the certificate is trusted. + + true if the certificate is trusted; otherwise, false. + + + + Gets the key usage flags for the certificate. + + + Gets the key usage flags for the certificate. + + The X.509 key usage. + + + + Gets the starting date and time where the certificate is valid. + + + Gets the starting date and time where the certificate is valid. + + The date and time. + + + + Gets the end date and time where the certificate is valid. + + + Gets the end date and time where the certificate is valid. + + The date and time. + + + + Gets the certificate issuer's name. + + + Gets the certificate issuer's name. + + The issuer's name. + + + + Gets the serial number of the certificate. + + + Gets the serial number of the certificate. + + The serial number. + + + + Gets the subject email address. + + + Gets the subject email address. + + The subject email address. + + + + Gets the fingerprint of the certificate. + + + Gets the fingerprint of the certificate. + + The fingerprint. + + + + Gets or sets the encryption algorithm capabilities. + + + Gets or sets the encryption algorithm capabilities. + + The encryption algorithms. + + + + Gets or sets the date when the algorithms were last updated. + + + Gets or sets the date when the algorithms were last updated. + + The date the algorithms were updated. + + + + Gets the certificate. + + + Gets the certificate. + + The certificate. + + + + Gets the private key. + + + Gets the private key. + + The private key. + + + + Initializes a new instance of the class. + + + Creates a new certificate record with a private key for storing in a + . + + The certificate. + The private key. + + is null. + -or- + is null. + + + is not a private key. + + + + + Initializes a new instance of the class. + + + Creates a new certificate record for storing in a . + + The certificate. + + is null. + + + + + Initializes a new instance of the class. + + + This constructor is only meant to be used by implementors of + when loading records from the database. + + + + + A store for X.509 certificates and keys. + + + A store for X.509 certificates and keys. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Enumerates the certificates currently in the store. + + + Enumerates the certificates currently in the store. + + The certificates. + + + + Gets the private key for the specified certificate. + + + Gets the private key for the specified certificate, if it exists. + + The private key on success; otherwise null. + The certificate. + + + + Adds the specified certificate to the store. + + + Adds the specified certificate to the store. + + The certificate. + + is null. + + + + + Adds the specified range of certificates to the store. + + + Adds the specified range of certificates to the store. + + The certificates. + + is null. + + + + + Removes the specified certificate from the store. + + + Removes the specified certificate from the store. + + The certificate. + + is null. + + + + + Removes the specified range of certificates from the store. + + + Removes the specified range of certificates from the store. + + The certificates. + + is null. + + + + + Imports the certificate(s) from the specified stream. + + + Imports the certificate(s) from the specified stream. + + The stream to import. + + is null. + + + An error occurred reading the stream. + + + + + Imports the certificate(s) from the specified file. + + + Imports the certificate(s) from the specified file. + + The name of the file to import. + + is null. + + + The specified file could not be found. + + + An error occurred reading the file. + + + + + Imports the certificate(s) from the specified byte array. + + + Imports the certificate(s) from the specified byte array. + + The raw certificate data. + + is null. + + + + + Imports certificates and private keys from the specified stream. + + + Imports certificates and private keys from the specified pkcs12 stream. + + The stream to import. + The password to unlock the stream. + + is null. + -or- + is null. + + + An error occurred reading the stream. + + + + + Imports certificates and private keys from the specified file. + + + Imports certificates and private keys from the specified pkcs12 stream. + + The name of the file to import. + The password to unlock the file. + + is null. + -or- + is null. + + + The specified file path is empty. + + + The specified file could not be found. + + + The user does not have access to read the specified file. + + + An error occurred reading the file. + + + + + Imports certificates and private keys from the specified byte array. + + + Imports certificates and private keys from the specified pkcs12 stream. + + The raw certificate data. + The password to unlock the raw data. + + is null. + -or- + is null. + + + + + Exports the certificates to an unencrypted stream. + + + Exports the certificates to an unencrypted stream. + + The output stream. + + is null. + + + An error occurred while writing to the stream. + + + + + Exports the certificates to an unencrypted file. + + + Exports the certificates to an unencrypted file. + + The file path to write to. + + is null. + + + The specified file path is empty. + + + The specified path exceeds the maximum allowed path length of the system. + + + A directory in the specified path does not exist. + + + The user does not have access to create the specified file. + + + An error occurred while writing to the stream. + + + + + Exports the specified stream and password to a pkcs12 encrypted file. + + + Exports the specified stream and password to a pkcs12 encrypted file. + + The output stream. + The password to use to lock the private keys. + + is null. + -or- + is null. + + + An error occurred while writing to the stream. + + + + + Exports the specified stream and password to a pkcs12 encrypted file. + + + Exports the specified stream and password to a pkcs12 encrypted file. + + The file path to write to. + The password to use to lock the private keys. + + is null. + -or- + is null. + + + The specified file path is empty. + + + The specified path exceeds the maximum allowed path length of the system. + + + A directory in the specified path does not exist. + + + The user does not have access to create the specified file. + + + An error occurred while writing to the stream. + + + + + Gets an enumerator of matching X.509 certificates based on the specified selector. + + + Gets an enumerator of matching X.509 certificates based on the specified selector. + + The matching certificates. + The match criteria. + + + + Gets a collection of matching X.509 certificates based on the specified selector. + + + Gets a collection of matching X.509 certificates based on the specified selector. + + The matching certificates. + The match criteria. + + + + X.509 certificate revocation list record fields. + + + The record fields are used when querying the + for certificate revocation lists. + + + + + The "id" field is typically just the ROWID in the database. + + + + + The "delta" field is a boolean value indicating whether the certificate + revocation list is a delta. + + + + + The "issuer name" field stores the issuer name of the certificate revocation list. + + + + + The "this update" field stores the date and time of the most recent update. + + + + + The "next update" field stores the date and time of the next scheduled update. + + + + + The "crl" field stores the raw binary data of the certificate revocation list. + + + + + An X.509 certificate revocation list (CRL) record. + + + Represents an X.509 certificate revocation list record loaded from a database. + + + + + Gets the identifier. + + + The id is typically the ROWID of the certificate revocation list in the + database and is not generally useful outside of the internals of the + database implementation. + + The identifier. + + + + Gets whether or not this certificate revocation list is a delta. + + + Indicates whether or not this certificate revocation list is a delta. + + true if th crl is delta; otherwise, false. + + + + Gets the issuer name of the certificate revocation list. + + + Gets the issuer name of the certificate revocation list. + + The issuer's name. + + + + Gets the date and time of the most recent update. + + + Gets the date and time of the most recent update. + + The date and time. + + + + Gets the end date and time where the certificate is valid. + + + Gets the end date and time where the certificate is valid. + + The date and time. + + + + Gets the certificate revocation list. + + + Gets the certificate revocation list. + + The certificate revocation list. + + + + Initializes a new instance of the class. + + + Creates a new CRL record for storing in a . + + The certificate revocation list. + + is null. + + + + + Initializes a new instance of the class. + + + This constructor is only meant to be used by implementors of + when loading records from the database. + + + + + X.509 key usage flags. + + + The X.509 Key Usage Flags can be used to determine what operations + a certificate can be used for. + A value of indicates that + there are no restrictions on the use of the + . + + + + + No limitations for the key usage are set. + + + The key may be used for anything. + + + + + The key may only be used for enciphering data during key agreement. + + + When both the bit and the + bit are both set, the key + may be used only for enciphering data while + performing key agreement. + + + + + The key may be used for verifying signatures on + certificate revocation lists (CRLs). + + + + + The key may be used for verifying signatures on certificates. + + + + + The key is meant to be used for key agreement. + + + + + The key may be used for data encipherment. + + + + + The key is meant to be used for key encipherment. + + + + + The key may be used to verify digital signatures used to + provide a non-repudiation service. + + + + + The key may be used for digitally signing data. + + + + + The key may only be used for deciphering data during key agreement. + + + When both the bit and the + bit are both set, the key + may be used only for deciphering data while + performing key agreement. + + + + + Incrementally decodes content encoded with the base64 encoding. + + + Base64 is an encoding often used in MIME to encode binary content such + as images and other types of multi-media to ensure that the data remains + intact when sent via 7bit transports such as SMTP. + + + + + Initializes a new instance of the class. + + + Creates a new base64 decoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current decoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the decoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to decode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + A pointer to the beginning of the input buffer. + The length of the input buffer. + A pointer to the beginning of the output buffer. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the decoder. + + + Resets the state of the decoder. + + + + + Incrementally encodes content using the base64 encoding. + + + Base64 is an encoding often used in MIME to encode binary content such + as images and other types of multi-media to ensure that the data remains + intact when sent via 7bit transports such as SMTP. + + + + + Initializes a new instance of the class. + + + Creates a new base64 encoder. + + true if this encoder will be used to encode rfc2047 encoded-word payloads; false otherwise. + The maximum number of octets allowed per line (not counting the CRLF). Must be between 60 and 998 (inclusive). + + is not between 60 and 998 (inclusive). + + + + + Initializes a new instance of the class. + + + Creates a new base64 encoder. + + The maximum number of octets allowed per line (not counting the CRLF). Must be between 60 and 998 (inclusive). + + is not between 60 and 998 (inclusive). + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current encoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to encode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Encodes the specified input into the output buffer. + + + Encodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Encodes the specified input into the output buffer, flushing any internal buffer state as well. + + + Encodes the specified input into the output buffer, flusing any internal state as well. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the encoder. + + + Resets the state of the encoder. + + + + + Incrementally decodes content encoded with a Uri hex encoding. + + + This is mostly meant for decoding parameter values encoded using + the rules specified by rfc2184 and rfc2231. + + + + + Initializes a new instance of the class. + + + Creates a new hex decoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current decoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the decoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to decode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + A pointer to the beginning of the input buffer. + The length of the input buffer. + A pointer to the beginning of the output buffer. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the decoder. + + + Resets the state of the decoder. + + + + + Incrementally encodes content using a Uri hex encoding. + + + This is mostly meant for decoding parameter values encoded using + the rules specified by rfc2184 and rfc2231. + + + + + Initializes a new instance of the class. + + + Creates a new hex encoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current encoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to encode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Encodes the specified input into the output buffer. + + + Encodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Encodes the specified input into the output buffer, flushing any internal buffer state as well. + + + Encodes the specified input into the output buffer, flusing any internal state as well. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the encoder. + + + Resets the state of the encoder. + + + + + An interface for incrementally decoding content. + + + An interface for incrementally decoding content. + + + + + Gets the encoding. + + + Gets the encoding that the decoder supports. + + The encoding. + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current decoder. + + A new with identical state. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to decode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + A pointer to the beginning of the input buffer. + The length of the input buffer. + A pointer to the beginning of the output buffer. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the decoder. + + + Resets the state of the decoder. + + + + + An interface for incrementally encoding content. + + + An interface for incrementally encoding content. + + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current encoder. + + A new with identical state. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to encode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Encodes the specified input into the output buffer. + + + Encodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Encodes the specified input into the output buffer, flushing any internal buffer state as well. + + + Encodes the specified input into the output buffer, flusing any internal state as well. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the encoder. + + + Resets the state of the encoder. + + + + + A pass-through decoder implementing the interface. + + + Simply copies data as-is from the input buffer into the output buffer. + + + + + Initializes a new instance of the class. + + The encoding to return in the property. + + Creates a new pass-through decoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current decoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the decoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to decode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Decodes the specified input into the output buffer. + + + Copies the input buffer into the output buffer, verbatim. + + The number of bytes written to the output buffer. + A pointer to the beginning of the input buffer. + The length of the input buffer. + A pointer to the beginning of the output buffer. + + + + Decodes the specified input into the output buffer. + + + Copies the input buffer into the output buffer, verbatim. + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the decoder. + + + Resets the state of the decoder. + + + + + A pass-through encoder implementing the interface. + + + Simply copies data as-is from the input buffer into the output buffer. + + + + + Initializes a new instance of the class. + + The encoding to return in the property. + + Creates a new pass-through encoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current encoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to encode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Encodes the specified input into the output buffer. + + + Copies the input buffer into the output buffer, verbatim. + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Encodes the specified input into the output buffer, flushing any internal buffer state as well. + + + Copies the input buffer into the output buffer, verbatim. + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the encoder. + + + Resets the state of the encoder. + + + + + Q-Encoding mode. + + + The encoding mode for the 'Q' encoding used in rfc2047. + + + + + A mode for encoding phrases, as defined by rfc822. + + + + + A mode for encoding text. + + + + + Incrementally encodes content using a variation of the quoted-printable encoding + that is specifically meant to be used for rfc2047 encoded-word tokens. + + + The Q-Encoding is an encoding often used in MIME to encode textual content outside + of the ASCII range within an rfc2047 encoded-word token in order to ensure that + the text remains intact when sent via 7bit transports such as SMTP. + + + + + Initializes a new instance of the class. + + + Creates a new rfc2047 quoted-printable encoder. + + The rfc2047 encoding mode. + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current encoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to encode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Encodes the specified input into the output buffer. + + + Encodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Encodes the specified input into the output buffer, flushing any internal buffer state as well. + + + Encodes the specified input into the output buffer, flusing any internal state as well. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the encoder. + + + Resets the state of the encoder. + + + + + Incrementally decodes content encoded with the quoted-printable encoding. + + + Quoted-Printable is an encoding often used in MIME to textual content outside + of the ASCII range in order to ensure that the text remains intact when sent + via 7bit transports such as SMTP. + + + + + Initializes a new instance of the class. + + + Creates a new quoted-printable decoder. + + + true if this decoder will be used to decode rfc2047 encoded-word payloads; false otherwise. + + + + + Initializes a new instance of the class. + + + Creates a new quoted-printable decoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current decoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the decoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to decode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + A pointer to the beginning of the input buffer. + The length of the input buffer. + A pointer to the beginning of the output buffer. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the decoder. + + + Resets the state of the decoder. + + + + + Incrementally encodes content using the quoted-printable encoding. + + + Quoted-Printable is an encoding often used in MIME to encode textual content + outside of the ASCII range in order to ensure that the text remains intact + when sent via 7bit transports such as SMTP. + + + + + Initializes a new instance of the class. + + + Creates a new quoted-printable encoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current encoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to encode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Encodes the specified input into the output buffer. + + + Encodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Encodes the specified input into the output buffer, flushing any internal buffer state as well. + + + Encodes the specified input into the output buffer, flusing any internal state as well. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the encoder. + + + Resets the state of the encoder. + + + + + Incrementally decodes content encoded with the Unix-to-Unix encoding. + + + The UUEncoding is an encoding that predates MIME and was used to encode + binary content such as images and other types of multi-media to ensure + that the data remained intact when sent via 7bit transports such as SMTP. + These days, the UUEncoding has largely been deprecated in favour of + the base64 encoding, however, some older mail clients still use it. + + + + + Initializes a new instance of the class. + + + Creates a new Unix-to-Unix decoder. + + + If true, decoding begins immediately rather than after finding a begin-line. + + + + + Initializes a new instance of the class. + + + Creates a new Unix-to-Unix decoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current decoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the decoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to decode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + A pointer to the beginning of the input buffer. + The length of the input buffer. + A pointer to the beginning of the output buffer. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the decoder. + + + Resets the state of the decoder. + + + + + Incrementally encodes content using the Unix-to-Unix encoding. + + + The UUEncoding is an encoding that predates MIME and was used to encode + binary content such as images and other types of multi-media to ensure + that the data remained intact when sent via 7bit transports such as SMTP. + These days, the UUEncoding has largely been deprecated in favour of + the base64 encoding, however, some older mail clients still use it. + + + + + Initializes a new instance of the class. + + + Creates a new Unix-to-Unix encoder. + + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current encoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to encode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Encodes the specified input into the output buffer. + + + Encodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Encodes the specified input into the output buffer, flushing any internal buffer state as well. + + + Encodes the specified input into the output buffer, flusing any internal state as well. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the encoder. + + + Resets the state of the encoder. + + + + + Incrementally decodes content encoded with the yEnc encoding. + + + The yEncoding is an encoding that is most commonly used with Usenet and + is a binary encoding that includes a 32-bit cyclic redundancy check. + For more information, see www.yenc.org. + + + + + Initializes a new instance of the class. + + + Creates a new yEnc decoder. + + + If true, decoding begins immediately rather than after finding an =ybegin line. + + + + + Initializes a new instance of the class. + + + Creates a new yEnc decoder. + + + + + Gets the checksum. + + + Gets the checksum. + + The checksum. + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current decoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the decoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to decode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + A pointer to the beginning of the input buffer. + The length of the input buffer. + A pointer to the beginning of the output buffer. + + + + Decodes the specified input into the output buffer. + + + Decodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + decoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the decoder. + + + Resets the state of the decoder. + + + + + Incrementally encodes content using the yEnc encoding. + + + The yEncoding is an encoding that is most commonly used with Usenet and + is a binary encoding that includes a 32-bit cyclic redundancy check. + For more information, see www.yenc.org. + + + + + Initializes a new instance of the class. + + + Creates a new yEnc encoder. + + The line length to use. + + + + Gets the checksum. + + + Gets the checksum. + + The checksum. + + + + Clone the with its current state. + + + Creates a new with exactly the same state as the current encoder. + + A new with identical state. + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Estimates the length of the output. + + + Estimates the number of bytes needed to encode the specified number of input bytes. + + The estimated output length. + The input length. + + + + Encodes the specified input into the output buffer. + + + Encodes the specified input into the output buffer. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Encodes the specified input into the output buffer, flushing any internal buffer state as well. + + + Encodes the specified input into the output buffer, flusing any internal state as well. + The output buffer should be large enough to hold all of the + encoded input. For estimating the size needed for the output buffer, + see . + + The number of bytes written to the output buffer. + The input buffer. + The starting index of the input buffer. + The length of the input buffer. + The output buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + is not large enough to contain the encoded content. + Use the method to properly determine the + necessary length of the byte array. + + + + + Resets the encoder. + + + Resets the state of the encoder. + + + + + A bounded stream, confined to reading and writing data to a limited subset of the overall source stream. + + + Wraps an arbitrary stream, limiting I/O operations to a subset of the source stream. + If the is -1, then the end of the stream is unbound. + When a is set to parse a persistent stream, it will construct + s using bounded streams instead of loading the content into memory. + + + + + Initializes a new instance of the class. + + + If the is less than 0, then the end of the stream + is unbounded. + + The underlying stream. + The offset in the base stream that will mark the start of this substream. + The offset in the base stream that will mark the end of this substream. + true to leave the baseStream open after the + is disposed; otherwise, false. + + is null. + + + is less than zero. + -or- + is greater than or equal to zero + -and- is less than . + + + + + Gets the underlying stream. + + + All I/O is performed on the base stream. + + The underlying stream. + + + + Gets the start boundary offset of the underlying stream. + + + The start boundary is the byte offset into the + that marks the beginning of the substream. + + The start boundary offset of the underlying stream. + + + + Gets the end boundary offset of the underlying stream. + + + The end boundary is the byte offset into the + that marks the end of the substream. If the value is less than 0, + then the end of the stream is treated as unbound. + + The end boundary offset of the underlying stream. + + + + Checks whether or not the underlying stream will remain open after + the is disposed. + + + Checks whether or not the underlying stream will remain open after + the is disposed. + + true if the underlying stream should remain open after the + is disposed; otherwise, false. + + + + Checks whether or not the stream supports reading. + + + The will only support reading if the + supports it. + + true if the stream supports reading; otherwise, false. + + + + Checks whether or not the stream supports writing. + + + The will only support writing if the + supports it. + + true if the stream supports writing; otherwise, false. + + + + Checks whether or not the stream supports seeking. + + + The will only support seeking if the + supports it. + + true if the stream supports seeking; otherwise, false. + + + + Checks whether or not I/O operations can timeout. + + + The will only support timing out if the + supports it. + + true if I/O operations can timeout; otherwise, false. + + + + Gets the length of the stream, in bytes. + + + If the property is greater than or equal to 0, + then the length will be calculated by subtracting the + from the . If the end of the stream is unbound, then the + will be subtracted from the length of the + . + + The length of the stream in bytes. + + The stream does not support seeking. + + + The stream has been disposed. + + + + + Gets or sets the current position within the stream. + + + The is relative to the . + + The position of the stream. + + An I/O error occurred. + + + The stream does not support seeking. + + + The stream has been disposed. + + + + + Gets or sets a value, in miliseconds, that determines how long the stream will attempt to read before timing out. + + + Gets or sets the 's read timeout. + + A value, in miliseconds, that determines how long the stream will attempt to read before timing out. + + + + Gets or sets a value, in miliseconds, that determines how long the stream will attempt to write before timing out. + + + Gets or sets the 's write timeout. + + A value, in miliseconds, that determines how long the stream will attempt to write before timing out. + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reads data from the , not allowing it to + read beyond the . + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support reading. + + + An I/O error occurred. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + Writes data to the , not allowing it to + write beyond the . + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the position within the current stream. + + + Seeks within the confines of the and the . + + The new position within the stream. + The offset into the stream relative to the . + The origin to seek from. + + is not a valid . + + + The stream has been disposed. + + + The stream does not support seeking. + + + An I/O error occurred. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + Flushes the . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the length of the stream. + + + Updates the to be plus + the specified new length. If the needs to be grown + to allow this, then the length of the will also be + updated. + + The desired length of the stream in bytes. + + The stream has been disposed. + + + The stream does not support setting the length. + + + An I/O error occurred. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + If the property is false, then + the is also disposed. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + A chained stream. + + + Chains multiple streams together such that reading or writing beyond the end + of one stream spills over into the next stream in the chain. The idea is to + make it appear is if the chain of streams is all one continuous stream. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Add the specified stream to the chained stream. + + + Adds the stream to the end of the chain. + + The stream. + true if the + should remain open after the is disposed; + otherwise, false. + + is null. + + + + + Checks whether or not the stream supports reading. + + + The only supports reading if all of its + streams support it. + + true if the stream supports reading; otherwise, false. + + + + Checks whether or not the stream supports writing. + + + The only supports writing if all of its + streams support it. + + true if the stream supports writing; otherwise, false. + + + + Checks whether or not the stream supports seeking. + + + The only supports seeking if all of its + streams support it. + + true if the stream supports seeking; otherwise, false. + + + + Checks whether or not I/O operations can timeout. + + + The only supports timeouts if all of its + streams support them. + + true if I/O operations can timeout; otherwise, false. + + + + Gets the length of the stream, in bytes. + + + The length of a is the combined lenths of all + of its chained streams. + + The length of the stream in bytes. + + The stream does not support seeking. + + + The stream has been disposed. + + + + + Gets or sets the current position within the stream. + + + It is always possible to get the position of a , + but setting the position is only possible if all of its streams are seekable. + + The position of the stream. + + An I/O error occurred. + + + The stream does not support seeking. + + + The stream has been disposed. + + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reads up to the requested number of bytes if reading is supported. If the + current child stream does not have enough remaining data to complete the + read, the read will progress into the next stream in the chain in order + to complete the read. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support reading. + + + An I/O error occurred. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + Writes the requested number of bytes if writing is supported. If the + current child stream does not have enough remaining space to fit the + complete buffer, the data will spill over into the next stream in the + chain in order to complete the write. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the position within the current stream. + + + Seeks to the specified position within the stream if all child streams + support seeking. + + The new position within the stream. + The offset into the stream relative to the . + The origin to seek from. + + is not a valid . + + + The stream has been disposed. + + + The stream does not support seeking. + + + An I/O error occurred. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + If all of the child streams support writing, then the current child stream + will be flushed. + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the length of the stream. + + + Setting the length of a is not supported. + + The desired length of the stream in bytes. + + The stream has been disposed. + + + The stream does not support setting the length. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + A stream which filters data as it is read or written. + + + Passes data through each as the data is read or written. + + + + + Initializes a new instance of the class. + + + Creates a filtered stream using the specified source stream. + + The underlying stream to filter. + + is null. + + + + + Gets the underlying source stream. + + + In general, it is not a good idea to manipulate the underlying + source stream because most s store + important state about previous bytes read from or written to + the source stream. + + The underlying source stream. + + + + Adds the specified filter. + + + Adds the to the end of the list of filters + that data will pass through as data is read from or written to the + underlying source stream. + + The filter. + + is null. + + + + + Checks if the filtered stream contains the specified filter. + + + Determines whether or not the filtered stream contains the specified filter. + + true if the specified filter exists; + otherwise false. + The filter. + + is null. + + + + + Remove the specified filter. + + + Removes the specified filter from the list if it exists. + + true if the filter was removed; otherwise false. + The filter. + + is null. + + + + + Checks whether or not the stream supports reading. + + + The will only support reading if the + supports it. + + true if the stream supports reading; otherwise, false. + + + + Checks whether or not the stream supports writing. + + + The will only support writing if the + supports it. + + true if the stream supports writing; otherwise, false. + + + + Checks whether or not the stream supports seeking. + + + Seeking is not supported by the . + + true if the stream supports seeking; otherwise, false. + + + + Checks whether or not I/O operations can timeout. + + + The will only support timing out if the + supports it. + + true if I/O operations can timeout; otherwise, false. + + + + Gets the length of the stream, in bytes. + + + Getting the length of a is not supported. + + The length of the stream in bytes. + + The stream does not support seeking. + + + + + Gets or sets the current position within the stream. + + + Getting and setting the position of a is not supported. + + The position of the stream. + + The stream does not support seeking. + + + + + Gets or sets a value, in miliseconds, that determines how long the stream will attempt to read before timing out. + + + Gets or sets the read timeout on the stream. + + A value, in miliseconds, that determines how long the stream will attempt to read before timing out. + + + + Gets or sets a value, in miliseconds, that determines how long the stream will attempt to write before timing out. + + + Gets or sets the write timeout on the stream. + + A value, in miliseconds, that determines how long the stream will attempt to write before timing out. + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reads up to the requested number of bytes, passing the data read from the stream + through each of the filters before finally copying the result into the provided buffer. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + The cancellation token. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support reading. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reads up to the requested number of bytes, passing the data read from the stream + through each of the filters before finally copying the result into the provided buffer. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support reading. + + + An I/O error occurred. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + Filters the provided buffer through each of the filters before finally writing + the result to the underlying stream. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + The cancellation token. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support writing. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + Filters the provided buffer through each of the filters before finally writing + the result to the underlying stream. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the position within the current stream. + + + Seeking is not supported by the . + + The new position within the stream. + The offset into the stream relative to the . + The origin to seek from. + + The stream does not support seeking. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + Flushes the state of all filters, writing any output to the underlying + stream and then calling on the . + + The cancellation token. + + The stream has been disposed. + + + The stream does not support writing. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + Flushes the state of all filters, writing any output to the underlying + stream and then calling on the . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the length of the stream. + + + Setting the length of a is not supported. + + The desired length of the stream in bytes. + + The stream has been disposed. + + + The stream does not support setting the length. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + An interface allowing for a cancellable stream reading operation. + + + This interface is meant to extend the functionality of a , + allowing the to have much finer-grained canellability. + When a custom stream implementation also implements this interface, + the will opt to use this interface + instead of the normal + API to read data from the stream. + This is really useful when parsing a message or other MIME entity + directly from a network-based stream. + + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + When a custom stream implementation also implements this interface, + the will opt to use this interface + instead of the normal + API to read data from the stream. + This is really useful when parsing a message or other MIME entity + directly from a network-based stream. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + The cancellation token. + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + When a custom stream implementation also implements this interface, + writing a or + to the custom stream will opt to use this interface + instead of the normal + API to write data to the stream. + This is really useful when writing a message or other MIME entity + directly to a network-based stream. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + The cancellation token + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + The cancellation token. + + + + A stream useful for measuring the amount of data written. + + + A keeps track of the number of bytes + that have been written to it. This is useful, for example, when you + need to know how large a is without + actually writing it to disk or into a memory buffer. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Checks whether or not the stream supports reading. + + + A is not readable. + + true if the stream supports reading; otherwise, false. + + + + Checks whether or not the stream supports writing. + + + A is always writable. + + true if the stream supports writing; otherwise, false. + + + + Checks whether or not the stream supports seeking. + + + A is always seekable. + + true if the stream supports seeking; otherwise, false. + + + + Checks whether or not reading and writing to the stream can timeout. + + + Writing to a cannot timeout. + + true if reading and writing to the stream can timeout; otherwise, false. + + + + Gets the length of the stream, in bytes. + + + The length of a indicates the + number of bytes that have been written to it. + + The length of the stream in bytes. + + The stream has been disposed. + + + + + Gets or sets the current position within the stream. + + + Since it is possible to seek within a , + it is possible that the position will not always be identical to the + length of the stream, but typically it will be. + + The position of the stream. + + An I/O error occurred. + + + The stream does not support seeking. + + + The stream has been disposed. + + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reading from a is not supported. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + The stream has been disposed. + + + The stream does not support reading. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + Increments the property by the number of bytes written. + If the updated position is greater than the current length of the stream, then + the property will be updated to be identical to the + position. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the position within the current stream. + + + Updates the within the stream. + + The new position within the stream. + The offset into the stream relative to the . + The origin to seek from. + + is not a valid . + + + The stream has been disposed. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + Since a does not actually do anything other than + count bytes, this method is a no-op. + + + The stream has been disposed. + + + + + Sets the length of the stream. + + + Sets the to the specified value and updates + to the specified value if (and only if) + the current position is greater than the new length value. + + The desired length of the stream in bytes. + + is out of range. + + + The stream has been disposed. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + An efficient memory stream implementation that sacrifices the ability to + get access to the internal byte buffer in order to drastically improve + performance. + + + Instead of resizing an internal byte array, the + chains blocks of non-contiguous memory. This helps improve performance by avoiding + unneeded copying of data from the old array to the newly allocated array as well + as the zeroing of the newly allocated array. + + + + + Initializes a new instance of the class. + + + Creates a new with an initial memory block + of 2048 bytes. + + + + + Copies the memory stream into a byte array. + + + Copies all of the stream data into a newly allocated byte array. + + The array. + + + + Checks whether or not the stream supports reading. + + + The is always readable. + + true if the stream supports reading; otherwise, false. + + + + Checks whether or not the stream supports writing. + + + The is always writable. + + true if the stream supports writing; otherwise, false. + + + + Checks whether or not the stream supports seeking. + + + The is always seekable. + + true if the stream supports seeking; otherwise, false. + + + + Checks whether or not reading and writing to the stream can timeout. + + + The does not support timing out. + + true if reading and writing to the stream can timeout; otherwise, false. + + + + Gets the length of the stream, in bytes. + + + Gets the length of the stream, in bytes. + + The length of the stream, in bytes. + + The stream has been disposed. + + + + + Gets or sets the current position within the stream. + + + Gets or sets the current position within the stream. + + The position of the stream. + + An I/O error occurred. + + + The stream does not support seeking. + + + The stream has been disposed. + + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + An I/O error occurred. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + Writes the entire buffer to the stream and advances the current position + within the stream by the number of bytes written, adding memory blocks as + needed in order to contain the newly written bytes. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + The stream does not support writing. + + + An I/O error occurred. + + + + + Sets the position within the current stream. + + + Sets the position within the current stream. + + The new position within the stream. + The offset into the stream relative to the . + The origin to seek from. + + is not a valid . + + + The stream has been disposed. + + + An I/O error occurred. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + This method does not do anything. + + + The stream has been disposed. + + + + + Sets the length of the stream. + + + Sets the length of the stream. + + The desired length of the stream in bytes. + + is out of range. + + + The stream has been disposed. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + A filter that armors lines beginning with "From " by encoding the 'F' with the + Quoted-Printable encoding. + + + From-armoring is a workaround to prevent receiving clients (or servers) + that uses the mbox file format for local storage from munging the line + by prepending a ">", as is typical with the mbox format. + This armoring technique ensures that the receiving client will still + be able to verify S/MIME signatures. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A filter that can be used to determine the most efficient Content-Transfer-Encoding. + + + Keeps track of the content that gets passed through the filter in order to + determine the most efficient to use. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the best encoding given the specified constraints. + + + Gets the best encoding given the specified constraints. + + The best encoding. + The encoding constraint. + The maximum allowable line length (not counting the CRLF). Must be between 60 and 998 (inclusive). + + is not between 60 and 998 (inclusive). + -or- + is not a valid value. + + + + + Filters the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The number of bytes of the input to filter. + The starting index of the output in the returned buffer. + The length of the output buffer. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Filters the specified input, flushing all internally buffered data to the output. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The number of bytes of the input to filter. + The starting index of the output in the returned buffer. + The length of the output buffer. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Resets the filter. + + + Resets the filter. + + + + + A charset filter for incrementally converting text streams from + one charset encoding to another. + + + Incrementally converts text from one charset encoding to another. + + + + + Initializes a new instance of the class. + + + Creates a new to convert text from the specified + source encoding into the target charset encoding. + + Source encoding name. + Target encoding name. + + is null. + -or- + is null. + + + The is not supported by the system. + -or- + The is not supported by the system. + + + + + Initializes a new instance of the class. + + + Creates a new to convert text from the specified + source encoding into the target charset encoding. + + Source code page. + Target code page. + + is less than zero or greater than 65535. + -or- + is less than zero or greater than 65535. + + + The is not supported by the system. + -or- + The is not supported by the system. + + + + + Initializes a new instance of the class. + + + Creates a new to convert text from the specified + source encoding into the target charset encoding. + + Source encoding. + Target encoding. + + is null. + -or- + is null. + + + + + Gets the source encoding. + + + Gets the source encoding. + + The source encoding. + + + + Gets the target encoding. + + + Gets the target encoding. + + The target encoding. + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A filter for decoding MIME content. + + + Uses a to incrementally decode data. + + + + + Gets the decoder used by this filter. + + + Gets the decoder used by this filter. + + The decoder. + + + + Gets the encoding. + + + Gets the encoding that the decoder supports. + + The encoding. + + + + Initializes a new instance of the class. + + + Creates a new using the specified decoder. + + A specific decoder for the filter to use. + + is null. + + + + + Create a filter that will decode the specified encoding. + + + Creates a new for the specified encoding. + + A new decoder filter. + The encoding to create a filter for. + + + + Create a filter that will decode the specified encoding. + + + Creates a new for the specified encoding. + + A new decoder filter. + The name of the encoding to create a filter for. + + is null. + + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A filter that will convert from Windows/DOS line endings to Unix line endings. + + + Converts from Windows/DOS line endings to Unix line endings. + + + + + Initializes a new instance of the class. + + + Creates a new . + + Ensure that the stream ends with a new line. + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A filter for encoding MIME content. + + + Uses a to incrementally encode data. + + + + + Gets the encoder used by this filter. + + + Gets the encoder used by this filter. + + The encoder. + + + + Gets the encoding. + + + Gets the encoding that the encoder supports. + + The encoding. + + + + Initializes a new instance of the class. + + + Creates a new using the specified encoder. + + A specific encoder for the filter to use. + + + + Create a filter that will encode using specified encoding. + + + Creates a new for the specified encoding. + + A new encoder filter. + The encoding to create a filter for. + + + + Create a filter that will encode using specified encoding. + + + Creates a new for the specified encoding. + + A new encoder filter. + The name of the encoding to create a filter for. + + is null. + + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + An interface for incrementally filtering data. + + + An interface for incrementally filtering data. + + + + + Filters the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The number of bytes of the input to filter. + The starting index of the output in the returned buffer. + The length of the output buffer. + + + + Filters the specified input, flushing all internally buffered data to the output. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The number of bytes of the input to filter. + The starting index of the output in the returned buffer. + The length of the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A base implementation for MIME filters. + + + A base implementation for MIME filters. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the output buffer. + + + Gets the output buffer. + + The output buffer. + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Filters the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The number of bytes of the input to filter. + The starting index of the output in the returned buffer. + The length of the output buffer. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Filters the specified input, flushing all internally buffered data to the output. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The number of bytes of the input to filter. + The starting index of the output in the returned buffer. + The length of the output buffer. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Resets the filter. + + + Resets the filter. + + + + + Saves the remaining input for the next round of processing. + + + Saves the remaining input for the next round of processing. + + The input buffer. + The starting index of the buffer to save. + The length of the buffer to save, starting at . + + + + Ensures that the output buffer is greater than or equal to the specified size. + + + Ensures that the output buffer is greater than or equal to the specified size. + + The minimum size needed. + If set to true, the current output should be preserved. + + + + A filter that simply passes data through without any processing. + + + Passes data through without any processing. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Filters the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The number of bytes of the input to filter. + The starting index of the output in the returned buffer. + The length of the output buffer. + + + + Filters the specified input, flushing all internally buffered data to the output. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The number of bytes of the input to filter. + The starting index of the output in the returned buffer. + The length of the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A filter for stripping trailing whitespace from lines in a textual stream. + + + Strips trailing whitespace from lines in a textual stream. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A filter that will convert from Unix line endings to Windows/DOS line endings. + + + Converts from Unix line endings to Windows/DOS line endings. + + + + + Initializes a new instance of the class. + + + Creates a new . + + Ensure that the stream ends with a new line. + + + + Filter the specified input. + + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + + The filtered output. + The input buffer. + The starting index of the input buffer. + The length of the input buffer, starting at . + The output index. + The output length. + If set to true, all internally buffered data should be flushed to the output buffer. + + + + Resets the filter. + + + Resets the filter. + + + + + A flowed text to HTML converter. + + + Used to convert flowed text (as described in rfc3676) into HTML. + + + + + + + + Initializes a new instance of the class. + + + Creates a new flowed text to HTML converter. + + + + + Get the input format. + + + Gets the input format. + + The input format. + + + + Get the output format. + + + Gets the output format. + + The output format. + + + + Get or set whether the trailing space on a wrapped line should be deleted. + + + Gets or sets whether the trailing space on a wrapped line should be deleted. + The flowed text format defines a Content-Type parameter called "delsp" which can + have a value of "yes" or "no". If the parameter exists and the value is "yes", then + should be set to true, otherwise + should be set to false. + + + + + true if the trailing space on a wrapped line should be deleted; otherwise, false. + + + + Get or set the text that will be appended to the end of the output. + + + Gets or sets the text that will be appended to the end of the output. + The footer must be set before conversion begins. + + The footer. + + + + Get or set the footer format. + + + Gets or sets the footer format. + + The footer format. + + + + Get or set text that will be prepended to the beginning of the output. + + + Gets or sets the text that will be prepended to the beginning of the output. + The header must be set before conversion begins. + + The header. + + + + Get or set the header format. + + + Gets or sets the header format. + + The header format. + + + + Get or set the method to use for custom + filtering of HTML tags and content. + + + Get or set the method to use for custom + filtering of HTML tags and content. + + The html tag callback. + + + + Get or set whether or not the converter should only output an HTML fragment. + + + Gets or sets whether or not the converter should only output an HTML fragment. + + true if the converter should only output an HTML fragment; otherwise, false. + + + + Convert the contents of from the to the + and uses the to write the resulting text. + + + Converts the contents of from the to the + and uses the to write the resulting text. + + The text reader. + The text writer. + + is null. + -or- + is null. + + + + + A flowed text to text converter. + + + Unwraps the flowed text format described in rfc3676. + + + + + Initializes a new instance of the class. + + + Creates a new flowed text to text converter. + + + + + Get the input format. + + + Gets the input format. + + The input format. + + + + Get the output format. + + + Gets the output format. + + The output format. + + + + Get or set whether the trailing space on a wrapped line should be deleted. + + + Gets or sets whether the trailing space on a wrapped line should be deleted. + The flowed text format defines a Content-Type parameter called "delsp" which can + have a value of "yes" or "no". If the parameter exists and the value is "yes", then + should be set to true, otherwise + should be set to false. + + true if the trailing space on a wrapped line should be deleted; otherwise, false. + + + + Get or set the text that will be appended to the end of the output. + + + Gets or sets the text that will be appended to the end of the output. + The footer must be set before conversion begins. + + The footer. + + + + Get or set text that will be prepended to the beginning of the output. + + + Gets or sets the text that will be prepended to the beginning of the output. + The header must be set before conversion begins. + + The header. + + + + Convert the contents of from the to the + and uses the to write the resulting text. + + + Converts the contents of from the to the + and uses the to write the resulting text. + + The text reader. + The text writer. + + is null. + -or- + is null. + + + + + An enumeration of possible header and footer formats. + + + An enumeration of possible header and footer formats. + + + + + The header or footer contains plain text. + + + + + The header or footer contains properly formatted HTML. + + + + + An HTML attribute. + + + An HTML attribute. + + + + + + + + Initializes a new instance of the class. + + + Creates a new HTML attribute with the given id and value. + + The attribute identifier. + The attribute value. + + is not a valid value. + + + + + Initializes a new instance of the class. + + + Creates a new HTML attribute with the given name and value. + + The attribute name. + The attribute value. + + is null. + + + + + Get the HTML attribute identifier. + + + Gets the HTML attribute identifier. + + + + + The attribute identifier. + + + + Get the name of the attribute. + + + Gets the name of the attribute. + + + + + The name of the attribute. + + + + Get the value of the attribute. + + + Gets the value of the attribute. + + + + + The value of the attribute. + + + + A readonly collection of HTML attributes. + + + A readonly collection of HTML attributes. + + + + + An empty attribute collection. + + + An empty attribute collection. + + + + + Initializes a new instance of the class. + + + Creates a new . + + A collection of attributes. + + + + Get the number of attributes in the collection. + + + Gets the number of attributes in the collection. + + The number of attributes in the collection. + + + + Get the at the specified index. + + + Gets the at the specified index. + + The HTML attribute at the specified index. + The index. + + is out of range. + + + + + Gets an enumerator for the attribute collection. + + + Gets an enumerator for the attribute collection. + + The enumerator. + + + + Gets an enumerator for the attribute collection. + + + Gets an enumerator for the attribute collection. + + The enumerator. + + + + HTML attribute identifiers. + + + HTML attribute identifiers. + + + + + An unknown HTML attribute identifier. + + + + + The "abbr" attribute. + + + + + The "accept" attribute. + + + + + The "accept-charset" attribute. + + + + + The "accesskey" attribute. + + + + + The "action" attribute. + + + + + The "align" attribute. + + + + + The "alink" attribute. + + + + + The "alt" attribute. + + + + + The "archive" attribute. + + + + + The "axis" attribute. + + + + + The "background" attribute. + + + + + The "bgcolor" attribute. + + + + + The "border" attribute. + + + + + The "cellpadding" attribute. + + + + + The "cellspacing" attribute. + + + + + The "char" attribute. + + + + + The "charoff" attribute. + + + + + The "charset" attribute. + + + + + The "checked" attribute. + + + + + The "cite" attribute. + + + + + The "class" attribute. + + + + + The "classid" attribute. + + + + + The "clear" attribute. + + + + + The "code" attribute. + + + + + The "codebase" attribute. + + + + + The "codetype" attribute. + + + + + The "color" attribute. + + + + + The "cols" attribute. + + + + + The "colspan" attribute. + + + + + The "compact" attribute. + + + + + The "content" attribute. + + + + + The "coords" attribute. + + + + + The "data" attribute. + + + + + The "datetime" attribute. + + + + + The "declare" attribute. + + + + + The "defer" attribute. + + + + + The "dir" attribute. + + + + + The "disabled" attribute. + + + + + The "dynsrc" attribute. + + + + + The "enctype" attribute. + + + + + The "face" attribute. + + + + + The "for" attribute. + + + + + The "frame" attribute. + + + + + The "frameborder" attribute. + + + + + The "headers" attribute. + + + + + The "height" attribute. + + + + + The "href" attribute. + + + + + The "hreflang" attribute. + + + + + The "hspace" attribute. + + + + + The "http-equiv" attribute. + + + + + The "id" attribute. + + + + + The "ismap" attribute. + + + + + The "label" attribute. + + + + + The "lang" attribute. + + + + + The "language" attribute. + + + + + The "leftmargin" attribute. + + + + + The "link" attribute. + + + + + The "longdesc" attribute. + + + + + The "lowsrc" attribute. + + + + + The "marginheight" attribute. + + + + + The "marginwidth" attribute. + + + + + The "maxlength" attribute. + + + + + The "media" attribute. + + + + + The "method" attribute. + + + + + The "multiple" attribute. + + + + + The "name" attribute. + + + + + The "nohref" attribute. + + + + + The "noresize" attribute. + + + + + The "noshade" attribute. + + + + + The "nowrap" attribute. + + + + + The "object" attribute. + + + + + The "profile" attribute. + + + + + The "prompt" attribute. + + + + + The "readonly" attribute. + + + + + The "rel" attribute. + + + + + The "rev" attribute. + + + + + The "rows" attribute. + + + + + The "rowspan" attribute. + + + + + The "rules" attribute. + + + + + The "scheme" attribute. + + + + + The "scope" attribute. + + + + + The "scrolling" attribute. + + + + + The "selected" attribute. + + + + + The "shape" attribute. + + + + + The "size" attribute. + + + + + The "span" attribute. + + + + + The "src" attribute. + + + + + The "standby" attribute. + + + + + The "start" attribute. + + + + + The "style" attribute. + + + + + The "summary" attribute. + + + + + The "tabindex" attribute. + + + + + The "target" attribute. + + + + + The "text" attribute. + + + + + The "title" attribute. + + + + + The "topmargin" attribute. + + + + + The "type" attribute. + + + + + The "usemap" attribute. + + + + + The "valign" attribute. + + + + + The "value" attribute. + + + + + The "valuetype" attribute. + + + + + The "version" attribute. + + + + + The "vlink" attribute. + + + + + The "vspace" attribute. + + + + + The "width" attribute. + + + + + The "xmlns" attribute. + + + + + extension methods. + + + extension methods. + + + + + Converts the enum value into the equivalent attribute name. + + + Converts the enum value into the equivalent attribute name. + + The attribute name. + The enum value. + + + + Converts the attribute name into the equivalent attribute id. + + + Converts the attribute name into the equivalent attribute id. + + The attribute id. + The attribute name. + + + + An HTML entity decoder. + + + An HTML entity decoder. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Push the specified character into the HTML entity decoder. + + + Pushes the specified character into the HTML entity decoder. + The first character pushed MUST be the '&' character. + + true if the character was accepted; otherwise, false. + The character. + + is the first character being pushed and was not the '&' character. + + + + + Get the decoded entity value. + + + Gets the decoded entity value. + + The value. + + + + Reset the entity decoder. + + + Resets the entity decoder. + + + + + An HTML namespace. + + + An HTML namespace. + + + + + The namespace is "http://www.w3.org/1999/xhtml". + + + + + The namespace is "http://www.w3.org/1998/Math/MathML". + + + + + The namespace is "http://www.w3.org/2000/svg". + + + + + The namespace is "http://www.w3.org/1999/xlink". + + + + + The namespace is "http://www.w3.org/XML/1998/namespace". + + + + + The namespace is "http://www.w3.org/2000/xmlns/". + + + + + extension methods. + + + extension methods. + + + + + Converts the enum value into the equivalent namespace url. + + + Converts the enum value into the equivalent namespace url. + + The tag name. + The enum value. + + + + Converts the tag name into the equivalent tag id. + + + Converts the tag name into the equivalent tag id. + + The tag id. + The namespace. + + + + An HTML tag callback delegate. + + + The delegate is called when a converter + is ready to write a new HTML tag, allowing developers to customize + whether the tag gets written at all, which attributes get written, etc. + + + + + The HTML tag context. + The HTML writer. + + + + An HTML tag context. + + + An HTML tag context used with the delegate. + + + + + + + + Initializes a new instance of the class. + + + Creates a new . + + The HTML tag identifier. + + is invalid. + + + + + Get the HTML tag attributes. + + + Gets the HTML tag attributes. + + + + + The attributes. + + + + Get or set whether or not the end tag should be deleted. + + + Gets or sets whether or not the end tag should be deleted. + + true if the end tag should be deleted; otherwise, false. + + + + Get or set whether or not the tag should be deleted. + + + Gets or sets whether or not the tag should be deleted. + + true if the tag should be deleted; otherwise, false. + + + + Get or set whether or not the should be invoked for the end tag. + + + Gets or sets whether or not the should be invoked for the end tag. + + true if the callback should be invoked for end tag; otherwise, false. + + + + Get whether or not the tag is an empty element. + + + Gets whether or not the tag is an empty element. + + true if the tag is an empty element; otherwise, false. + + + + Get whether or not the tag is an end tag. + + + Gets whether or not the tag is an end tag. + + + + + true if the tag is an end tag; otherwise, false. + + + + Get or set whether or not the inner content of the tag should be suppressed. + + + Gets or sets whether or not the inner content of the tag should be suppressed. + + true if the inner content should be suppressed; otherwise, false. + + + + Get the HTML tag identifier. + + + Gets the HTML tag identifier. + + + + + The HTML tag identifier. + + + + Get the HTML tag name. + + + Gets the HTML tag name. + + + + + The HTML tag name. + + + + Write the HTML tag. + + + Writes the HTML tag to the given . + + The HTML writer. + + is null. + + + + + Write the HTML tag. + + + Writes the HTML tag to the given . + + + + + The HTML writer. + true if the should also be written; otherwise, false. + + is null. + + + + + HTML tag identifiers. + + + HTML tag identifiers. + + + + + An unknown HTML tag identifier. + + + + + The HTML <a> tag. + + + + + The HTML <abbr> tag. + + + + + The HTML <acronym> tag. + + + + + The HTML <address> tag. + + + + + The HTML <applet> tag. + + + + + The HTML <area> tag. + + + + + The HTML <article> tag. + + + + + The HTML <aside> tag. + + + + + The HTML <audio> tag. + + + + + The HTML <b> tag. + + + + + The HTML <base> tag. + + + + + The HTML <basefont> tag. + + + + + The HTML <bdi> tag. + + + + + The HTML <bdo> tag. + + + + + The HTML <bgsound> tag. + + + + + The HTML <big> tag. + + + + + The HTML <blink> tag. + + + + + The HTML <blockquote> tag. + + + + + The HTML <body> tag. + + + + + The HTML <br> tag. + + + + + The HTML <button> tag. + + + + + The HTML <canvas> tag. + + + + + The HTML <caption> tag. + + + + + The HTML <center> tag. + + + + + The HTML <cite> tag. + + + + + The HTML <code> tag. + + + + + The HTML <col> tag. + + + + + The HTML <colgroup> tag. + + + + + The HTML <command> tag. + + + + + The HTML comment tag. + + + + + The HTML <datalist> tag. + + + + + The HTML <dd> tag. + + + + + The HTML <del> tag. + + + + + The HTML <details> tag. + + + + + The HTML <dfn> tag. + + + + + The HTML <dialog> tag. + + + + + The HTML <dir> tag. + + + + + The HTML <div> tag. + + + + + The HTML <dl> tag. + + + + + The HTML <dt> tag. + + + + + The HTML <em> tag. + + + + + The HTML <embed> tag. + + + + + The HTML <fieldset> tag. + + + + + The HTML <figcaption> tag. + + + + + The HTML <figure> tag. + + + + + The HTML <font> tag. + + + + + The HTML <footer> tag. + + + + + The HTML <form> tag. + + + + + The HTML <frame> tag. + + + + + The HTML <frameset> tag. + + + + + The HTML <h1> tag. + + + + + The HTML <h2> tag. + + + + + The HTML <h3> tag. + + + + + The HTML <h4> tag. + + + + + The HTML <h5> tag. + + + + + The HTML <h6> tag. + + + + + The HTML <head> tag. + + + + + The HTML <header> tag. + + + + + The HTML <hr> tag. + + + + + The HTML <html> tag. + + + + + The HTML <i> tag. + + + + + The HTML <iframe> tag. + + + + + The HTML <image> tag. + + + + + The HTML <input> tag. + + + + + The HTML <ins> tag. + + + + + The HTML <isindex> tag. + + + + + The HTML <kbd> tag. + + + + + The HTML <keygen> tag. + + + + + The HTML <label> tag. + + + + + The HTML <legend> tag. + + + + + The HTML <li> tag. + + + + + The HTML <link> tag. + + + + + The HTML <listing> tag. + + + + + The HTML <main> tag. + + + + + The HTML <map> tag. + + + + + The HTML <mark> tag. + + + + + The HTML <marquee> tag. + + + + + The HTML <menu> tag. + + + + + The HTML <menuitem> tag. + + + + + The HTML <meta> tag. + + + + + The HTML <meter> tag. + + + + + The HTML <nav> tag. + + + + + The HTML <nextid> tag. + + + + + The HTML <nobr> tag. + + + + + The HTML <noembed> tag. + + + + + The HTML <noframes> tag. + + + + + The HTML <noscript> tag. + + + + + The HTML <object> tag. + + + + + The HTML <ol> tag. + + + + + The HTML <optgroup> tag. + + + + + The HTML <option> tag. + + + + + The HTML <output> tag. + + + + + The HTML <p> tag. + + + + + The HTML <param> tag. + + + + + The HTML <plaintext> tag. + + + + + The HTML <pre> tag. + + + + + The HTML <progress> tag. + + + + + The HTML <q> tag. + + + + + The HTML <rp> tag. + + + + + The HTML <rt> tag. + + + + + The HTML <ruby> tag. + + + + + The HTML <s> tag. + + + + + The HTML <samp> tag. + + + + + The HTML <script> tag. + + + + + The HTML <section> tag. + + + + + The HTML <select> tag. + + + + + The HTML <small> tag. + + + + + The HTML <source> tag. + + + + + The HTML <span> tag. + + + + + The HTML <strike> tag. + + + + + The HTML <strong> tag. + + + + + The HTML <style> tag. + + + + + The HTML <sub> tag. + + + + + The HTML <summary> tag. + + + + + The HTML <sup> tag. + + + + + The HTML <table> tag. + + + + + The HTML <tbody> tag. + + + + + The HTML <td> tag. + + + + + The HTML <textarea> tag. + + + + + The HTML <tfoot> tag. + + + + + The HTML <th> tag. + + + + + The HTML <thread> tag. + + + + + The HTML <time> tag. + + + + + The HTML <title> tag. + + + + + The HTML <tr> tag. + + + + + The HTML <track> tag. + + + + + The HTML <tt> tag. + + + + + The HTML <u> tag. + + + + + The HTML <ul> tag. + + + + + The HTML <var> tag. + + + + + The HTML <video> tag. + + + + + The HTML <wbr> tag. + + + + + The HTML <xml> tag. + + + + + The HTML <xmp> tag. + + + + + extension methods. + + + extension methods. + + + + + Converts the enum value into the equivalent tag name. + + + Converts the enum value into the equivalent tag name. + + The tag name. + The enum value. + + + + Converts the tag name into the equivalent tag id. + + + Converts the tag name into the equivalent tag id. + + The tag id. + The tag name. + + + + Determines whether or not the HTML tag is an empty element. + + + Determines whether or not the HTML tag is an empty element. + + true if the tag is an empty element; otherwise, false. + Identifier. + + + + Determines whether or not the HTML tag is a formatting element. + + + Determines whether or not the HTML tag is a formatting element. + + true if the HTML tag is a formatting element; otherwise, false. + The HTML tag identifier. + + + + An HTML to HTML converter. + + + Used to convert HTML into HTML. + + + + + + + + Initializes a new instance of the class. + + + Creates a new HTML to HTML converter. + + + + + Get the input format. + + + Gets the input format. + + The input format. + + + + Get the output format. + + + Gets the output format. + + The output format. + + + + Get or set whether or not executable scripts should be stripped from the output. + + + Gets or sets whether or not executable scripts should be stripped from the output. + + true if executable scripts should be filtered; otherwise, false. + + + + Get or set the text that will be appended to the end of the output. + + + Gets or sets the text that will be appended to the end of the output. + The footer must be set before conversion begins. + + The footer. + + + + Get or set the footer format. + + + Gets or sets the footer format. + + The footer format. + + + + Get or set text that will be prepended to the beginning of the output. + + + Gets or sets the text that will be prepended to the beginning of the output. + The header must be set before conversion begins. + + The header. + + + + Get or set the header format. + + + Gets or sets the header format. + + The header format. + + + + Get or set the method to use for custom + filtering of HTML tags and content. + + + Get or set the method to use for custom + filtering of HTML tags and content. + + The html tag callback. + + + + Convert the contents of from the to the + and uses the to write the resulting text. + + + Converts the contents of from the to the + and uses the to write the resulting text. + + The text reader. + The text writer. + + is null. + -or- + is null. + + + + + An abstract HTML token class. + + + An abstract HTML token class. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The kind of token. + + + + Get the kind of HTML token that this object represents. + + + Gets the kind of HTML token that this object represents. + + The kind of token. + + + + Write the HTML token to a . + + + Writes the HTML token to a . + + The output. + + is null. + + + + + Returns a that represents the current . + + + Returns a that represents the current . + + A that represents the current . + + + + An HTML comment token. + + + An HTML comment token. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The comment text. + true if the comment is bogus; otherwise, false. + + is null. + + + + + Get the comment. + + + Gets the comment. + + The comment. + + + + Get whether or not the comment is a bogus comment. + + + Gets whether or not the comment is a bogus comment. + + true if the comment is bogus; otherwise, false. + + + + Write the HTML comment to a . + + + Writes the HTML comment to a . + + The output. + + is null. + + + + + An HTML token constisting of character data. + + + An HTML token consisting of character data. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The kind of character data. + The character data. + + is not a valid . + + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The character data. + + is null. + + + + + Get the character data. + + + Gets the character data. + + The character data. + + + + Write the HTML character data to a . + + + Writes the HTML character data to a , + encoding it if it isn't already encoded. + + The output. + + is null. + + + + + An HTML token constisting of [CDATA[. + + + An HTML token consisting of [CDATA[. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The character data. + + is null. + + + + + Write the HTML character data to a . + + + Writes the HTML character data to a , + encoding it if it isn't already encoded. + + The output. + + is null. + + + + + An HTML token constisting of script data. + + + An HTML token consisting of script data. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The script data. + + is null. + + + + + Write the HTML script data to a . + + + Writes the HTML script data to a , + encoding it if it isn't already encoded. + + The output. + + is null. + + + + + An HTML tag token. + + + An HTML tag token. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The name of the tag. + The attributes. + true if the tag is an empty element; otherwise, false. + + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The name of the tag. + true if the tag is an end tag; otherwise, false. + + is null. + + + + + Get the attributes. + + + Gets the attributes. + + The attributes. + + + + Get the HTML tag identifier. + + + Gets the HTML tag identifier. + + The HTML tag identifier. + + + + Get whether or not the tag is an empty element. + + + Gets whether or not the tag is an empty element. + + true if the tag is an empty element; otherwise, false. + + + + Get whether or not the tag is an end tag. + + + Gets whether or not the tag is an end tag. + + true if the tag is an end tag; otherwise, false. + + + + Get the name of the tag. + + + Gets the name of the tag. + + The name. + + + + Write the HTML tag to a . + + + Writes the HTML tag to a . + + The output. + + is null. + + + + + An HTML DOCTYPE token. + + + An HTML DOCTYPE token. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Get whether or not quirks-mode should be forced. + + + Gets whether or not quirks-mode should be forced. + + true if quirks-mode should be forced; otherwise, false. + + + + Get or set the DOCTYPE name. + + + Gets or sets the DOCTYPE name. + + The name. + + + + Get or set the public identifier. + + + Gets or sets the public identifier. + + The public identifier. + + + + Get the public keyword that was used. + + + Gets the public keyword that was used. + + The public keyword or null if it wasn't used. + + + + Get or set the system identifier. + + + Gets or sets the system identifier. + + The system identifier. + + + + Get the system keyword that was used. + + + Gets the system keyword that was used. + + The system keyword or null if it wasn't used. + + + + Write the DOCTYPE tag to a . + + + Writes the DOCTYPE tag to a . + + The output. + + is null. + + + + + An HTML tokenizer. + + + Tokenizes HTML text, emitting an for each token it encounters. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The . + + + + Get or set whether or not the tokenizer should decode character references. + + + Gets or sets whether or not the tokenizer should decode character references. + Character references in attribute values will still be decoded + even if this value is set to false. + + true if character references should be decoded; otherwise, false. + + + + Get the current HTML namespace detected by the tokenizer. + + + Gets the current HTML namespace detected by the tokenizer. + + The html namespace. + + + + Gets the current line number. + + + This property is most commonly used for error reporting, but can be called + at any time. The starting value for this property is 1. + Combined with , a value of 1,1 indicates + the start of the document. + + The current line number. + + + + Gets the current line position. + + + This property is most commonly used for error reporting, but can be called + at any time. The starting value for this property is 1. + Combined with , a value of 1,1 indicates + the start of the document. + + The current line number. + + + + Get the current state of the tokenizer. + + + Gets the current state of the tokenizer. + + The current state of the tokenizer. + + + + Create a DOCTYPE token. + + + Creates a DOCTYPE token. + + The DOCTYPE token. + + + + Create an HTML comment token. + + + Creates an HTML comment token. + + The HTML comment token. + The comment. + true if the comment is bogus; otherwise, false. + + + + Create an HTML character data token. + + + Creates an HTML character data token. + + The HTML character data token. + The character data. + + + + Create an HTML character data token. + + + Creates an HTML character data token. + + The HTML character data token. + The character data. + + + + Create an HTML script data token. + + + Creates an HTML script data token. + + The HTML script data token. + The script data. + + + + Create an HTML tag token. + + + Creates an HTML tag token. + + The HTML tag token. + The tag name. + true if the tag is an end tag; otherwise, false. + + + + Create an attribute. + + + Creates an attribute. + + The attribute. + THe attribute name. + + + + Reads the next token. + + + Reads the next token. + + true if the next token was read; otherwise, false. + THe token that was read. + + + + The HTML tokenizer state. + + + The HTML tokenizer state. + + + + + The data state as described at + + http://www.w3.org/TR/html5/syntax.html#data-state. + + + + + The character reference in data state as described at + + http://www.w3.org/TR/html5/syntax.html#character-reference-in-data-state. + + + + + The RCDATA state as described at + + http://www.w3.org/TR/html5/syntax.html#rcdata-state. + + + + + The character reference in RCDATA state as described at + + http://www.w3.org/TR/html5/syntax.html#character-reference-in-rcdata-state. + + + + + The RAWTEXT state as described at + + http://www.w3.org/TR/html5/syntax.html#rawtext-state. + + + + + The script data state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-state. + + + + + The PLAINTEXT state as described at + + http://www.w3.org/TR/html5/syntax.html#plaintext-state. + + + + + The tag open state as described at + + http://www.w3.org/TR/html5/syntax.html#tag-open-state. + + + + + The end tag open state as described at + + http://www.w3.org/TR/html5/syntax.html#end-tag-open-state. + + + + + The tag name state as described at + + http://www.w3.org/TR/html5/syntax.html#tag-name-state. + + + + + The RCDATA less-than state as described at + + http://www.w3.org/TR/html5/syntax.html#rcdata-less-than-sign-state. + + + + + The RCDATA end tag open state as described at + + http://www.w3.org/TR/html5/syntax.html#rcdata-end-tag-open-state. + + + + + The RCDATA end tag name state as described at + + http://www.w3.org/TR/html5/syntax.html#rcdata-end-tag-name-state. + + + + + The RAWTEXT less-than state as described at + + http://www.w3.org/TR/html5/syntax.html#rawtext-less-than-sign-state. + + + + + The RAWTEXT end tag open state as described at + + http://www.w3.org/TR/html5/syntax.html#rawtext-end-tag-open-state. + + + + + The RAWTEXT end tag name state as described at + + http://www.w3.org/TR/html5/syntax.html#rawtext-end-tag-name-state. + + + + + The script data less-than state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-less-than-sign-state. + + + + + The script data end tag open state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-end-tag-open-state. + + + + + The script data end tag name state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-end-tag-name-state. + + + + + The script data escape start state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-escape-start-state. + + + + + The script data escape start state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-escape-start-dash-state. + + + + + The script data escaped state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-escaped-state. + + + + + The script data escaped dash state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-escaped-dash-state. + + + + + The script data escaped dash dash state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-escaped-dash-dash-state. + + + + + The script data escaped less-than state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-escaped-less-than-sign-state. + + + + + The script data escaped end tag open state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-escaped-end-tag-open-state. + + + + + The script data escaped end tag name state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-escaped-end-tag-name-state. + + + + + The script data double escape start state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-double-escape-start-state. + + + + + The script data double escaped state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-double-escaped-state. + + + + + The script data double escaped dash state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-double-escaped-dash-state. + + + + + The script data double escaped dash dash state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-double-escaped-dash-dash-state. + + + + + The script data double escaped less-than state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-double-escaped-less-than-sign-state. + + + + + The script data double escape end state as described at + + http://www.w3.org/TR/html5/syntax.html#script-data-double-escape-end-state. + + + + + The before attribute name state as described at + + http://www.w3.org/TR/html5/syntax.html#before-attribute-name-state. + + + + + The attribute name state as described at + + http://www.w3.org/TR/html5/syntax.html#attribute-name-state. + + + + + The after attribute name state as described at + + http://www.w3.org/TR/html5/syntax.html#after-attribute-name-state. + + + + + The beforw attribute value state as described at + + http://www.w3.org/TR/html5/syntax.html#before-attribute-value-state. + + + + + The attribute value quoted state as described at + + http://www.w3.org/TR/html5/syntax.html#attribute-value-(double-quoted)-state. + + + + + The attribute value unquoted state as described at + + http://www.w3.org/TR/html5/syntax.html#attribute-value-(unquoted)-state. + + + + + The character reference in attribute value state as described at + + http://www.w3.org/TR/html5/syntax.html#character-reference-in-attribute-value-state. + + + + + The after attribute value quoted state as described at + + http://www.w3.org/TR/html5/syntax.html#after-attribute-value-(quoted)-state. + + + + + The self-closing start tag state as described at + + http://www.w3.org/TR/html5/syntax.html#self-closing-start-tag-state. + + + + + The bogus comment state as described at + + http://www.w3.org/TR/html5/syntax.html#bogus-comment-state. + + + + + The markup declaration open state as described at + + http://www.w3.org/TR/html5/syntax.html#markup-declaration-open-state. + + + + + The comment start state as described at + + http://www.w3.org/TR/html5/syntax.html#comment-start-state. + + + + + The comment start dash state as described at + + http://www.w3.org/TR/html5/syntax.html#comment-start-dash-state. + + + + + The comment state as described at + + http://www.w3.org/TR/html5/syntax.html#comment-state. + + + + + The comment end dash state as described at + + http://www.w3.org/TR/html5/syntax.html#comment-end-dash-state. + + + + + The comment end state as described at + + http://www.w3.org/TR/html5/syntax.html#comment-end-state. + + + + + The comment end bang state as described at + + http://www.w3.org/TR/html5/syntax.html#comment-end-bang-state. + + + + + The DOCTYPE state as described at + + http://www.w3.org/TR/html5/syntax.html#doctype-state. + + + + + The before DOCTYPE name state as described at + + http://www.w3.org/TR/html5/syntax.html#before-doctype-name-state. + + + + + The DOCTYPE name state as described at + + http://www.w3.org/TR/html5/syntax.html#doctype-name-state. + + + + + The after DOCTYPE name state as described at + + http://www.w3.org/TR/html5/syntax.html#after-doctype-name-state. + + + + + The after DOCTYPE public keyword state as described at + + http://www.w3.org/TR/html5/syntax.html#after-doctype-public-keyword-state. + + + + + The before DOCTYPE public identifier state as described at + + http://www.w3.org/TR/html5/syntax.html#before-doctype-public-identifier-state. + + + + + The DOCTYPE public identifier quoted state as described at + + http://www.w3.org/TR/html5/syntax.html#doctype-public-identifier-(double-quoted)-state. + + + + + The after DOCTYPE public identifier state as described at + + http://www.w3.org/TR/html5/syntax.html#after-doctype-public-identifier-state. + + + + + The between DOCTYPE public and system identifiers state as described at + + http://www.w3.org/TR/html5/syntax.html#between-doctype-public-and-system-identifiers-state. + + + + + The after DOCTYPE system keyword state as described at + + http://www.w3.org/TR/html5/syntax.html#after-doctype-system-keyword-state. + + + + + The before DOCTYPE system identifier state as described at + + http://www.w3.org/TR/html5/syntax.html#before-doctype-system-identifier-state. + + + + + The DOCTYPE system identifier quoted state as described at + + http://www.w3.org/TR/html5/syntax.html#doctype-system-identifier-(double-quoted)-state. + + + + + The after DOCTYPE system identifier state as described at + + http://www.w3.org/TR/html5/syntax.html#after-doctype-system-identifier-state. + + + + + The bogus DOCTYPE state as described at + + http://www.w3.org/TR/html5/syntax.html#bogus-doctype-state. + + + + + The CDATA section state as described at + + http://www.w3.org/TR/html5/syntax.html#cdata-section-state. + + + + + The end of file state. + + + + + The kinds of tokens that the can emit. + + + The kinds of tokens that the can emit. + + + + + A token consisting of [CDATA[. + + + + + An HTML comment token. + + + + + A token consisting of character data. + + + + + An HTML DOCTYPE token. + + + + + A token consisting of script data. + + + + + An HTML tag token. + + + + + A collection of HTML-related utility methods. + + + A collection of HTML-related utility methods. + + + + + Encode an HTML attribute value. + + + Encodes an HTML attribute value. + + The to output the result. + The attribute value to encode. + The starting index of the attribute value. + The number of characters in the attribute value. + The character to use for quoting the attribute value. + + is null. + -or- + is null. + + + and do not specify + a valid range in the value. + + + is not a valid quote character. + + + + + Encode an HTML attribute value. + + + Encodes an HTML attribute value. + + The encoded attribute value. + The attribute value to encode. + The starting index of the attribute value. + The number of characters in the attribute value. + The character to use for quoting the attribute value. + + is null. + + + and do not specify + a valid range in the value. + + + is not a valid quote character. + + + + + Encode an HTML attribute value. + + + Encodes an HTML attribute value. + + The to output the result. + The attribute value to encode. + The starting index of the attribute value. + The number of characters in the attribute value. + The character to use for quoting the attribute value. + + is null. + -or- + is null. + + + and do not specify + a valid range in the value. + + + is not a valid quote character. + + + + + Encode an HTML attribute value. + + + Encodes an HTML attribute value. + + The to output the result. + The attribute value to encode. + The character to use for quoting the attribute value. + + is null. + -or- + is null. + + + is not a valid quote character. + + + + + Encode an HTML attribute value. + + + Encodes an HTML attribute value. + + The encoded attribute value. + The attribute value to encode. + The starting index of the attribute value. + The number of characters in the attribute value. + The character to use for quoting the attribute value. + + is null. + + + and do not specify + a valid range in the value. + + + is not a valid quote character. + + + + + Encode an HTML attribute value. + + + Encodes an HTML attribute value. + + The encoded attribute value. + The attribute value to encode. + The character to use for quoting the attribute value. + + is null. + + + is not a valid quote character. + + + + + Encode HTML character data. + + + Encodes HTML character data. + + The to output the result. + The character data to encode. + The starting index of the character data. + The number of characters in the data. + + is null. + -or- + is null. + + + and do not specify + a valid range in the data. + + + + + Encode HTML character data. + + + Encodes HTML character data. + + THe encoded character data. + The character data to encode. + The starting index of the character data. + The number of characters in the data. + + is null. + + + and do not specify + a valid range in the data. + + + + + Encode HTML character data. + + + Encodes HTML character data. + + The to output the result. + The character data to encode. + The starting index of the character data. + The number of characters in the data. + + is null. + -or- + is null. + + + and do not specify + a valid range in the data. + + + + + Encode HTML character data. + + + Encodes HTML character data. + + The to output the result. + The character data to encode. + + is null. + -or- + is null. + + + + + Encode HTML character data. + + + Encodes HTML character data. + + THe encoded character data. + The character data to encode. + The starting index of the character data. + The number of characters in the data. + + is null. + + + and do not specify + a valid range in the data. + + + + + Encode HTML character data. + + + Encodes HTML character data. + + THe encoded character data. + The character data to encode. + + is null. + + + + + Decode HTML character data. + + + Decodes HTML character data. + + The to output the result. + The character data to decode. + The starting index of the character data. + The number of characters in the data. + + is null. + -or- + is null. + + + and do not specify + a valid range in the data. + + + + + Decode HTML character data. + + + Decodes HTML character data. + + The to output the result. + The character data to decode. + + is null. + -or- + is null. + + + + + Decode HTML character data. + + + Decodes HTML character data. + + The decoded character data. + The character data to decode. + The starting index of the character data. + The number of characters in the data. + + is null. + + + and do not specify + a valid range in the data. + + + + + Decode HTML character data. + + + Decodes HTML character data. + + The decoded character data. + The character data to decode. + + is null. + + + + + An HTML writer. + + + An HTML writer. + + + + + + + + Initializes a new instance of the class. + + + Creates a new . + + The output stream. + The encoding to use for the output. + + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The output text writer. + + is null. + + + + + Releas unmanaged resources and perform other cleanup operations before the + is reclaimed by garbage collection. + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Get the current state of the writer. + + + Gets the current state of the writer. + + The state of the writer. + + + + Write the attribute to the output stream. + + + Writes the attribute to the output stream. + + The attribute identifier. + A buffer containing the attribute value. + The starting index of the attribute value. + The number of characters in the attribute value. + + is not a valid HTML attribute identifier. + + + is null. + + + is less than zero or greater than the length of + . + -or- + and do not specify + a valid range in the . + + + The is not in a state that allows writing attributes. + + + The has been disposed. + + + + + Write the attribute to the output stream. + + + Writes the attribute to the output stream. + + The attribute name. + A buffer containing the attribute value. + The starting index of the attribute value. + The number of characters in the attribute value. + + is null. + -or- + is null. + + + is less than zero or greater than the length of + . + -or- + and do not specify + a valid range in the . + + + is an invalid attribute name. + + + The is not in a state that allows writing attributes. + + + The has been disposed. + + + + + Write the attribute to the output stream. + + + Writes the attribute to the output stream. + + The attribute identifier. + The attribute value. + + is not a valid HTML attribute identifier. + + + is null. + + + The is not in a state that allows writing attributes. + + + The has been disposed. + + + + + Write the attribute to the output stream. + + + Writes the attribute to the output stream. + + + + + The attribute name. + The attribute value. + + is null. + -or- + is null. + + + is an invalid attribute name. + + + The is not in a state that allows writing attributes. + + + The has been disposed. + + + + + Write the attribute to the output stream. + + + Writes the attribute to the output stream. + + + + + The attribute. + + is null. + + + The is not in a state that allows writing attributes. + + + The has been disposed. + + + + + Write the attribute name to the output stream. + + + Writes the attribute name to the output stream. + + The attribute identifier. + + is not a valid HTML attribute identifier. + + + The is not in a state that allows writing attributes. + + + The has been disposed. + + + + + Write the attribute name to the output stream. + + + Writes the attribute name to the output stream. + + + + + The attribute name. + + is null. + + + is an invalid attribute name. + + + The is not in a state that allows writing attributes. + + + The has been disposed. + + + + + Write the attribute value to the output stream. + + + Writes the attribute value to the output stream. + + A buffer containing the attribute value. + The starting index of the attribute value. + The number of characters in the attribute value. + + is null. + + + is less than zero or greater than the length of + . + -or- + and do not specify + a valid range in the . + + + The is not in a state that allows writing attribute values. + + + The has been disposed. + + + + + Write the attribute value to the output stream. + + + Writes the attribute value to the output stream. + + + + + The attribute value. + + is null. + + + The is not in a state that allows writing attribute values. + + + The has been disposed. + + + + + Write an empty element tag. + + + Writes an empty element tag. + + The HTML tag identifier. + + is not a valid HTML tag identifier. + + + The has been disposed. + + + + + Write an empty element tag. + + + Writes an empty element tag. + + The name of the HTML tag. + + is null. + + + is not a valid HTML tag. + + + The has been disposed. + + + + + Write an end tag. + + + Writes an end tag. + + The HTML tag identifier. + + is not a valid HTML tag identifier. + + + The has been disposed. + + + + + Write an end tag. + + + Writes an end tag. + + The name of the HTML tag. + + is null. + + + is not a valid HTML tag. + + + The has been disposed. + + + + + Write a buffer containing HTML markup directly to the output, without escaping special characters. + + + Writes a buffer containing HTML markup directly to the output, without escaping special characters. + + The buffer containing HTML markup. + The index of the first character to write. + The number of characters to write. + + is null. + + + is less than zero or greater than the length of + . + -or- + and do not specify + a valid range in the . + + + The has been disposed. + + + + + Write a string containing HTML markup directly to the output, without escaping special characters. + + + Writes a string containing HTML markup directly to the output, without escaping special characters. + + The string containing HTML markup. + + is null. + + + The has been disposed. + + + + + Write a start tag. + + + Writes a start tag. + + The HTML tag identifier. + + is not a valid HTML tag identifier. + + + The has been disposed. + + + + + Write a start tag. + + + Writes a start tag. + + The name of the HTML tag. + + is null. + + + is not a valid HTML tag. + + + The has been disposed. + + + + + Write text to the output stream, escaping special characters. + + + Writes text to the output stream, escaping special characters. + + The text buffer. + The index of the first character to write. + The number of characters to write. + + is null. + + + is less than zero or greater than the length of + . + -or- + and do not specify + a valid range in the . + + + The has been disposed. + + + + + Write text to the output stream, escaping special characters. + + + Writes text to the output stream, escaping special characters. + + The text. + + is null. + + + The has been disposed. + + + + + Write a token to the output stream. + + + Writes a token that was emitted by the + to the output stream. + + The HTML token. + + is null. + + + The has been disposed. + + + + + Flush any remaining state to the output stream. + + + Flushes any remaining state to the output stream. + + + The has been disposed. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + Releases any unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + Releases all resource used by the object. + + Call when you are finished using the . The + method leaves the in an unusable state. After calling + , you must release all references to the so the garbage + collector can reclaim the memory that the was occupying. + + + + An enumeration of possible states of a . + + + An enumeration of possible states of a . + + + + + The is not within a tag. In this state, the + can only write a tag or text. + + + + + The is inside a tag but has not started to write an attribute. In this + state, the can write an attribute, another tag, or text. + + + + + The is inside an attribute. In this state, the + can append a value to the current attribute, start the next attribute, or write another tag or text. + + + + + An abstract class for converting text from one format to another. + + + An abstract class for converting text from one format to another. + + + + + + + + Initializes a new instance of the class. + + + Initializes a new instance of the class. + + + + + Get or set whether the encoding of the input is detected from the byte order mark or + determined by the property. + + + Gets or sets whether the encoding of the input is detected from the byte order mark or + determined by the property. + + true if detect encoding from byte order mark; otherwise, false. + + + + Get or set the input encoding. + + + Gets or sets the input encoding. + + The input encoding. + + is null. + + + + + Get the input format. + + + Gets the input format. + + The input format. + + + + Get or set the output encoding. + + + Gets or sets the output encoding. + + The output encoding. + + is null. + + + + + Get the output format. + + + Gets the output format. + + The output format. + + + + Get or set the size of the input stream buffer. + + + Gets or sets the size of the input stream buffer. + + The size of the input stream buffer. + + is less than or equal to 0. + + + + + Get or set the size of the output stream buffer. + + + Gets or sets the size of the output stream buffer. + + The size of the output stream buffer. + + is less than or equal to 0. + + + + + Convert the contents of from the to the + and writes the resulting text to . + + + Converts the contents of from the to the + and writes the resulting text to . + + The source stream. + The destination stream. + + is null. + -or- + is null. + + + + + Convert the contents of from the to the + and uses the to write the resulting text. + + + Converts the contents of from the to the + and uses the to write the resulting text. + + The source stream. + The text writer. + + is null. + -or- + is null. + + + + + Convert the contents of from the to the + and writes the resulting text to . + + + Converts the contents of from the to the + and writes the resulting text to . + + The text reader. + The destination stream. + + is null. + -or- + is null. + + + + + Convert the contents of from the to the + and uses the to write the resulting text. + + + Converts the contents of from the to the + and uses the to write the resulting text. + + The text reader. + The text writer. + + is null. + -or- + is null. + + + + + Convert text from the to the . + + + Converts text from the to the . + + + + + The converted text. + The text to convert. + + is null. + + + + + An enumeration of text formats. + + + An enumeration of text formats. + + + + + The plain text format. + + + + + The flowed text format (as described in rfc3676). + + + + + The HTML text format. + + + + + The enriched text format. + + + + + The compressed rich text format. + + + + + The rich text format. + + + + + A text to flowed text converter. + + + Wraps text to conform with the flowed text format described in rfc3676. + The Content-Type header for the wrapped output text should be set to + text/plain; format=flowed; delsp=yes. + + + + + Initializes a new instance of the class. + + + Creates a new text to flowed text converter. + + + + + Get the input format. + + + Gets the input format. + + The input format. + + + + Get the output format. + + + Gets the output format. + + The output format. + + + + Get or set the text that will be appended to the end of the output. + + + Gets or sets the text that will be appended to the end of the output. + The footer must be set before conversion begins. + + The footer. + + + + Get or set text that will be prepended to the beginning of the output. + + + Gets or sets the text that will be prepended to the beginning of the output. + The header must be set before conversion begins. + + The header. + + + + Convert the contents of from the to the + and uses the to write the resulting text. + + + Converts the contents of from the to the + and uses the to write the resulting text. + + The text reader. + The text writer. + + is null. + -or- + is null. + + + + + A text to HTML converter. + + + Used to convert plain text into HTML. + + + + + + + + Initializes a new instance of the class. + + + Creates a new text to HTML converter. + + + + + Get the input format. + + + Gets the input format. + + The input format. + + + + Get the output format. + + + Gets the output format. + + The output format. + + + + Get or set the text that will be appended to the end of the output. + + + Gets or sets the text that will be appended to the end of the output. + The footer must be set before conversion begins. + + The footer. + + + + Get or set the footer format. + + + Gets or sets the footer format. + + The footer format. + + + + Get or set text that will be prepended to the beginning of the output. + + + Gets or sets the text that will be prepended to the beginning of the output. + The header must be set before conversion begins. + + The header. + + + + Get or set the header format. + + + Gets or sets the header format. + + The header format. + + + + Get or set the method to use for custom + filtering of HTML tags and content. + + + Get or set the method to use for custom + filtering of HTML tags and content. + + The html tag callback. + + + + Get or set whether or not the converter should only output an HTML fragment. + + + Gets or sets whether or not the converter should only output an HTML fragment. + + true if the converter should only output an HTML fragment; otherwise, false. + + + + Convert the contents of from the to the + and uses the to write the resulting text. + + + Converts the contents of from the to the + and uses the to write the resulting text. + + The text reader. + The text writer. + + is null. + -or- + is null. + + + + + A text to text converter. + + + A text to text converter. + + + + + Initializes a new instance of the class. + + + Creates a new text to text converter. + + + + + Get the input format. + + + Gets the input format. + + The input format. + + + + Get the output format. + + + Gets the output format. + + The output format. + + + + Get or set the text that will be appended to the end of the output. + + + Gets or sets the text that will be appended to the end of the output. + The footer must be set before conversion begins. + + The footer. + + + + Get or set the footer format. + + + Gets or sets the footer format. + + The footer format. + + + + Get or set text that will be prepended to the beginning of the output. + + + Gets or sets the text that will be prepended to the beginning of the output. + The header must be set before conversion begins. + + The header. + + + + Convert the contents of from the to the + and uses the to write the resulting text. + + + Converts the contents of from the to the + and uses the to write the resulting text. + + The text reader. + The text writer. + + is null. + -or- + is null. + + + + + An Aho-Corasick Trie graph. + + + An Aho-Corasick Trie graph. + + + + + Initializes a new instance of the class. + + + Creates a new . + + true if searching should ignore case; otherwise, false. + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Add the specified search pattern. + + + Adds the specified search pattern. + + The search pattern. + + is null. + + + cannot be an empty string. + + + + + Search the text for any of the patterns added to the trie. + + + Searches the text for any of the patterns added to the trie. + + The first index of a matched pattern if successful; otherwise, -1. + The text to search. + The starting index of the text. + The number of characters to search, starting at . + The pattern that was matched. + + is null. + + + and do not specify + a valid range in the string. + + + + + Search the text for any of the patterns added to the trie. + + + Searches the text for any of the patterns added to the trie. + + The first index of a matched pattern if successful; otherwise, -1. + The text to search. + The starting index of the text. + The pattern that was matched. + + is null. + + + is out of range. + + + + + Search the text for any of the patterns added to the trie. + + + Searches the text for any of the patterns added to the trie. + + The first index of a matched pattern if successful; otherwise, -1. + The text to search. + The pattern that was matched. + + is null. + + + + + A filter to decompress a compressed RTF stream. + + + Used to decompress a compressed RTF stream. + + + + + Initializes a new instance of the class. + + + Creates a new converter filter. + + + + + Gets the compression mode. + + + At least 12 bytes from the stream must be processed before this property value will + be accurate. + + The compression mode. + + + + Gets a value indicating whether the crc32 is valid. + + + Until all data has been processed, this property will always return false. + + true if the crc32 is valid; otherwise, false. + + + + Filter the specified input. + + Filters the specified input buffer starting at the given index, + spanning across the specified number of bytes. + The filtered output. + The input buffer. + The starting index of the input buffer. + Length. + Output index. + Output length. + If set to true flush. + + + + Resets the filter. + + + Resets the filter. + + + + + A RTF compression mode. + + + A RTF compression mode. + + + + + The compression mode is not known. + + + + + The RTF stream is not compressed. + + + + + The RTF stream is compressed. + + + + + The TNEF attach flags. + + + The enum contains a list of possible values for + the property. + + + + + No AttachFlags set. + + + + + The attachment is invisible in HTML bodies. + + + + + The attachment is invisible in RTF bodies. + + + + + The attachment is referenced (and rendered) by the HTML body. + + + + + The TNEF attach method. + + + The enum contains a list of possible values for + the property. + + + + + No AttachMethod specified. + + + + + The attachment is a binary blob and SHOULD appear in the + attribute. + + + + + The attachment is an embedded TNEF message stream and MUST appear + in the property of the + attribute. + + + + + The attachment is an OLE stream and MUST appear + in the property of the + attribute. + + + + + A TNEF attribute level. + + + A TNEF attribute level. + + + + + The attribute is a message-level attribute. + + + + + The attribute is an attachment-level attribute. + + + + + A TNEF attribute tag. + + + A TNEF attribute tag. + + + + + A Null TNEF attribute. + + + + + The Owner TNEF attribute. + + + + + The SentFor TNEF attribute. + + + + + The Delegate TNEF attribute. + + + + + The OriginalMessageClass TNEF attribute. + + + + + The DateStart TNEF attribute. + + + + + The DateEnd TNEF attribute. + + + + + The AidOwner TNEF attribute. + + + + + The RequestResponse TNEF attribute. + + + + + The From TNEF attribute. + + + + + The Subject TNEF attribute. + + + + + The DateSent TNEF attribute. + + + + + The DateReceived TNEF attribute. + + + + + The MessageStatus TNEF attribute. + + + + + The MessageClass TNEF attribute. + + + + + The MessageId TNEF attribute. + + + + + The ParentId TNEF attribute. + + + + + The ConversationId TNEF attribute. + + + + + The Body TNEF attribute. + + + + + The Priority TNEF attribute. + + + + + The AttachData TNEF attribute. + + + + + The AttachTitle TNEF attribute. + + + + + The AttachMetaFile TNEF attribute. + + + + + The AttachCreateDate TNEF attribute. + + + + + The AttachModifyDate TNEF attribute. + + + + + The DateModified TNEF attribute. + + + + + The AttachTransportFilename TNEF attribute. + + + + + The AttachRenderData TNEF attribute. + + + + + The MapiProperties TNEF attribute. + + + + + The RecipientTable TNEF attribute. + + + + + The Attachment TNEF attribute. + + + + + The TnefVersion TNEF attribute. + + + + + The OemCodepage TNEF attribute. + + + + + A TNEF compliance mode. + + + A TNEF compliance mode. + + + + + Use a loose compliance mode, attempting to ignore invalid or corrupt data. + + + + + Use a very strict compliance mode, aborting the parser at the first sign of + invalid or corrupted data. + + + + + A bitfield of potential TNEF compliance issues. + + + A bitfield of potential TNEF compliance issues. + + + + + The TNEF stream has no errors. + + + + + The TNEF stream has too many attributes. + + + + + The TNEF stream has one or more invalid attributes. + + + + + The TNEF stream has one or more attributes with invalid checksums. + + + + + The TNEF stream has one more more attributes with an invalid length. + + + + + The TNEF stream has one or more attributes with an invalid level. + + + + + The TNEF stream has one or more attributes with an invalid value. + + + + + The TNEF stream has one or more attributes with an invalid date value. + + + + + The TNEF stream has one or more invalid MessageClass attributes. + + + + + The TNEF stream has one or more invalid MessageCodepage attributes. + + + + + The TNEF stream has one or more invalid property lengths. + + + + + The TNEF stream has one or more invalid row counts. + + + + + The TNEF stream has an invalid signature value. + + + + + The TNEF stream has an invalid version value. + + + + + The TNEF stream is nested too deeply. + + + + + The TNEF stream is truncated. + + + + + The TNEF stream has one or more unsupported property types. + + + + + A TNEF exception. + + + A occurs when when a TNEF stream is found to be + corrupted and cannot be read any futher. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The serialization info. + The stream context. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The error message. + The inner exception. + + + + Initializes a new instance of the class. + + + Creates a new . + + The error message. + + + + A TNEF name identifier. + + + A TNEF name identifier. + + + + + Gets the property set GUID. + + + Gets the property set GUID. + + The property set GUID. + + + + Gets the kind of TNEF name identifier. + + + Gets the kind of TNEF name identifier. + + The kind of identifier. + + + + Gets the name, if available. + + + If the is , then this property will be available. + + The name. + + + + Gets the identifier, if available. + + + If the is , then this property will be available. + + The identifier. + + + + Initializes a new instance of the struct. + + + Creates a new with the specified integer identifier. + + The property set GUID. + The identifier. + + + + Initializes a new instance of the struct. + + + Creates a new with the specified string identifier. + + The property set GUID. + The name. + + + + Serves as a hash function for a object. + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms + and data structures such as a hash table. + + + + Determines whether the specified is equal to the current . + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + The kind of TNEF name identifier. + + + The kind of TNEF name identifier. + + + + + The property name is an integer. + + + + + The property name is a string. + + + + + A MIME part containing Microsoft TNEF data. + + + Represents an application/ms-tnef or application/vnd.ms-tnef part. + TNEF (Transport Neutral Encapsulation Format) attachments are most often + sent by Microsoft Outlook clients. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with a Content-Type of application/vnd.ms-tnef + and a Content-Disposition value of "attachment" and a filename paremeter with a + value of "winmail.dat". + + + + + Converts the TNEF content into a . + + + TNEF data often contains properties that map to + headers. TNEF data also often contains file attachments which will be + mapped to MIME parts. + + A message representing the TNEF data in MIME format. + + The property is null. + + + + + Extracts the embedded attachments from the TNEF data. + + + Parses the TNEF data and extracts all of the embedded file attachments. + + The attachments. + + The property is null. + + + + + A TNEF property identifier. + + + A TNEF property identifier. + + + + + The MAPI property PR_AB_DEFAULT_DIR. + + + + + The MAPI property PR_AB_DEFAULT_PAB. + + + + + The MAPI property PR_AB_PROVIDER_ID. + + + + + The MAPI property PR_AB_PROVIDERS. + + + + + The MAPI property PR_AB_SEARCH_PATH. + + + + + The MAPI property PR_AB_SEARCH_PATH_UPDATE. + + + + + The MAPI property PR_ACCESS. + + + + + The MAPI property PR_ACCESS_LEVEL. + + + + + The MAPI property PR_ACCOUNT. + + + + + The MAPI property PR_ACKNOWLEDGEMENT_MODE. + + + + + The MAPI property PR_ADDRTYPE. + + + + + The MAPI property PR_ALTERNATE_RECIPIENT. + + + + + The MAPI property PR_ALTERNATE_RECIPIENT_ALLOWED. + + + + + The MAPI property PR_ANR. + + + + + The MAPI property PR_ASSISTANT. + + + + + The MAPI property PR_ASSISTANT_TELEPHONE_NUMBER. + + + + + The MAPI property PR_ASSOC_CONTENT_COUNT. + + + + + The MAPI property PR_ATTACH_ADDITIONAL_INFO. + + + + + The MAPI property PR_ATTACH_CONTENT_BASE. + + + + + The MAPI property PR_ATTACH_CONTENT_ID. + + + + + The MAPI property PR_ATTACH_CONTENT_LOCATION. + + + + + The MAPI property PR_ATTACH_DATA_BIN or PR_ATTACH_DATA_OBJ. + + + + + The MAPI property PR_ATTACH_DISPOSITION. + + + + + The MAPI property PR_ATTACH_ENCODING. + + + + + The MAPI property PR_ATTACH_EXTENSION. + + + + + The MAPI property PR_ATTACH_FILENAME. + + + + + The MAPI property PR_ATTACH_FLAGS. + + + + + The MAPI property PR_ATTACH_LONG_FILENAME. + + + + + The MAPI property PR_ATTACH_LONG_PATHNAME. + + + + + The MAPI property PR_ATTACHMENT_X400_PARAMETERS. + + + + + The MAPI property PR_ATTACH_METHOD. + + + + + The MAPI property PR_ATTACH_MIME_SEQUENCE. + + + + + The MAPI property PR_ATTACH_MIME_TAG. + + + + + The MAPI property PR_ATTACH_NETSCAPE_MAC_INFO. + + + + + The MAPI property PR_ATTACH_NUM. + + + + + The MAPI property PR_ATTACH_PATHNAME. + + + + + The MAPI property PR_ATTACH_RENDERING. + + + + + The MAPI property PR_ATTACH_SIZE. + + + + + The MAPI property PR_ATTACH_TAG. + + + + + The MAPI property PR_ATTACH_TRANSPORT_NAME. + + + + + The MAPI property PR_AUTHORIZING_USERS. + + + + + The MAPI property PR_AUTO_FORWARDED. + + + + + The MAPI property PR_AUTO_FORWARDING_COMMENT. + + + + + The MAPI property PR_AUTO_RESPONSE_SUPPRESS. + + + + + The MAPI property PR_BEEPER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_BIRTHDAY. + + + + + The MAPI property PR_BODY. + + + + + The MAPI property PR_BODY_CONTENT_ID. + + + + + The MAPI property PR_BODY_CONTENT_LOCATION. + + + + + The MAPI property PR_BODY_CRC. + + + + + The MAPI property PR_BODY_HTML. + + + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_BUSINESS_ADDRESS_CITY. + + + + + The MAPI property PR_BUSINESS_ADDRESS_COUNTRY. + + + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_BUSINESS_ADDRESS_POST_OFFICE_BOX. + + + + + The MAPI property PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE. + + + + + The MAPI property PR_BUSINESS_ADDRESS_STREET. + + + + + The MAPI property PR_BUSINESS_FAX_NUMBER. + + + + + The MAPI property PR_BUSINESS_HOME_PAGE. + + + + + The MAPI property PR_CALLBACK_TELEPHONE_NUMBER. + + + + + The MAPI property PR_CAR_TELEPHONE_NUMBER. + + + + + The MAPI property PR_CELLULAR_TELEPHONE_NUMBER. + + + + + The MAPI property PR_CHILDRENS_NAMES. + + + + + The MAPI property PR_CLIENT_SUBMIT_TIME. + + + + + The MAPI property PR_COMMENT. + + + + + The MAPI property PR_COMMON_VIEWS_ENTRYID. + + + + + The MAPI property PR_COMPANY_MAIN_PHONE_NUMBER. + + + + + The MAPI property PR_COMPANY_NAME. + + + + + The MAPI property PR_COMPUTER_NETWORK_NAME. + + + + + The MAPI property PR_CONTACT_ADDRTYPES. + + + + + The MAPI property PR_CONTACT_DEFAULT_ADDRESS_INDEX. + + + + + The MAPI property PR_CONTACT_EMAIL_ADDRESSES. + + + + + The MAPI property PR_CONTACT_ENTRYIDS. + + + + + The MAPI property PR_CONTACT_VERSION. + + + + + The MAPI property PR_CONTAINER_CLASS. + + + + + The MAPI property PR_CONTAINER_CONTENTS. + + + + + The MAPI property PR_CONTAINER_FLAGS. + + + + + The MAPI property PR_CONTAINER_HIERARCHY. + + + + + The MAPI property PR_CONTAINER_MODIFY_VERSION. + + + + + The MAPI property PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID. + + + + + The MAPI property PR_CONTENT_CORRELATOR. + + + + + The MAPI property PR_CONTENT_COUNT. + + + + + The MAPI property PR_CONTENT_IDENTIFIER. + + + + + The MAPI property PR_CONTENT_INTEGRITY_CHECK. + + + + + The MAPI property PR_CONTENT_LENGTH. + + + + + The MAPI property PR_CONTENT_RETURN_REQUESTED. + + + + + The MAPI property PR_CONTENTS_SORT_ORDER. + + + + + The MAPI property PR_CONTENT_UNREAD. + + + + + The MAPI property PR_CONTROL_FLAGS. + + + + + The MAPI property PR_CONTROL_ID. + + + + + The MAPI property PR_CONTROL_STRUCTURE. + + + + + The MAPI property PR_CONTROL_TYPE. + + + + + The MAPI property PR_CONVERSATION_INDEX. + + + + + The MAPI property PR_CONVERSATION_KEY. + + + + + The MAPI property PR_CONVERSATION_TOPIC. + + + + + The MAPI property PR_CONVERSATION_EITS. + + + + + The MAPI property PR_CONVERSION_PROHIBITED. + + + + + The MAPI property PR_CONVERSION_WITH_LOSS_PROHIBITED. + + + + + The MAPI property PR_CONVERTED_EITS. + + + + + The MAPI property PR_CORRELATE. + + + + + The MAPI property PR_CORRELATE_MTSID. + + + + + The MAPI property PR_COUNTRY. + + + + + The MAPI property PR_CREATE_TEMPLATES. + + + + + The MAPI property PR_CREATION_TIME. + + + + + The MAPI property PR_CREATION_VERSION. + + + + + The MAPI property PR_CURRENT_VERSION. + + + + + The MAPI property PR_CUSTOMER_ID. + + + + + The MAPI property PR_DEFAULT_PROFILE. + + + + + The MAPI property PR_DEFAULT_STORE. + + + + + The MAPI property PR_DEFAULT_VIEW_ENTRYID. + + + + + The MAPI property PR_DEF_CREATE_DL. + + + + + The MAPI property PR_DEF_CREATE_MAILUSER. + + + + + The MAPI property PR_DEFERRED_DELIVERY_TIME. + + + + + The MAPI property PR_DELEGATION. + + + + + The MAPI property PR_DELETE_AFTER_SUBMIT. + + + + + The MAPI property PR_DELIVER_TIME. + + + + + The MAPI property PR_DELIVERY_POINT. + + + + + The MAPI property PR_DELTAX. + + + + + The MAPI property PR_DELTAY. + + + + + The MAPI property PR_DEPARTMENT_NAME. + + + + + The MAPI property PR_DEPTH. + + + + + The MAPI property PR_DETAILS_TABLE. + + + + + The MAPI property PR_DISCARD_REASON. + + + + + The MAPI property PR_DISCLOSE_RECIPIENTS. + + + + + The MAPI property PR_DISCLOSURE_OF_RECIPIENTS. + + + + + The MAPI property PR_DISCRETE_VALUES. + + + + + The MAPI property PR_DISC_VAL. + + + + + The MAPI property PR_DISPLAY_BCC. + + + + + The MAPI property PR_DISPLAY_CC. + + + + + The MAPI property PR_DISPLAY_NAME. + + + + + The MAPI property PR_DISPLAY_NAME_PREFIX. + + + + + The MAPI property PR_DISPLAY_TO. + + + + + The MAPI property PR_DISPLAY_TYPE. + + + + + The MAPI property PR_DL_EXPANSION_HISTORY. + + + + + The MAPI property PR_DL_EXPANSION_PROHIBITED. + + + + + The MAPI property PR_EMAIL_ADDRESS. + + + + + The MAPI property PR_END_DATE. + + + + + The MAPI property PR_ENTRYID. + + + + + The MAPI property PR_EXPAND_BEGIN_TIME. + + + + + The MAPI property PR_EXPANDED_BEGIN_TIME. + + + + + The MAPI property PR_EXPANDED_END_TIME. + + + + + The MAPI property PR_EXPAND_END_TIME. + + + + + The MAPI property PR_EXPIRY_TIME. + + + + + The MAPI property PR_EXPLICIT_CONVERSION. + + + + + The MAPI property PR_FILTERING_HOOKS. + + + + + The MAPI property PR_FINDER_ENTRYID. + + + + + The MAPI property PR_FOLDER_ASSOCIATED_CONTENTS. + + + + + The MAPI property PR_FOLDER_TYPE. + + + + + The MAPI property PR_FORM_CATEGORY. + + + + + The MAPI property PR_FORM_CATEGORY_SUB. + + + + + The MAPI property PR_FORM_CLSID. + + + + + The MAPI property PR_FORM_CONTACT_NAME. + + + + + The MAPI property PR_FORM_DESIGNER_GUID. + + + + + The MAPI property PR_FORM_DESIGNER_NAME. + + + + + The MAPI property PR_FORM_HIDDEN. + + + + + The MAPI property PR_FORM_HOST_MAP. + + + + + The MAPI property PR_FORM_MESSAGE_BEHAVIOR. + + + + + The MAPI property PR_FORM_VERSION. + + + + + The MAPI property PR_FTP_SITE. + + + + + The MAPI property PR_GENDER. + + + + + The MAPI property PR_GENERATION. + + + + + The MAPI property PR_GIVEN_NAME. + + + + + The MAPI property PR_GOVERNMENT_ID_NUMBER. + + + + + The MAPI property PR_HASTTACH. + + + + + The MAPI property PR_HEADER_FOLDER_ENTRYID. + + + + + The MAPI property PR_HOBBIES. + + + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_HOME_ADDRESS_CITY. + + + + + The MAPI property PR_HOME_ADDRESS_COUNTRY. + + + + + The MAPI property PR_HOME_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_HOME_ADDRESS_POST_OFFICE_BOX. + + + + + The MAPI property PR_HOME_ADDRESS_STATE_OR_PROVINCE. + + + + + The MAPI property PR_HOME_ADDRESS_STREET. + + + + + The MAPI property PR_HOME_FAX_NUMBER. + + + + + The MAPI property PR_HOME_TELEPHONE_NUMBER. + + + + + The MAPI property PR_ICON. + + + + + The MAPI property PR_IDENTITY_DISPLAY. + + + + + The MAPI property PR_IDENTITY_ENTRYID. + + + + + The MAPI property PR_IDENTITY_SEARCH_KEY. + + + + + The MAPI property PR_IMPLICIT_CONVERSION_PROHIBITED. + + + + + The MAPI property PR_IMPORTANCE. + + + + + The MAPI property PR_INCOMPLETE_COPY. + + + + + The Internet mail override charset. + + + + + The Internet mail override format. + + + + + The MAPI property PR_INITIAL_DETAILS_PANE. + + + + + The MAPI property PR_INITIALS. + + + + + The MAPI property PR_IN_REPLY_TO_ID. + + + + + The MAPI property PR_INSTANCE_KEY. + + + + + The MAPI property PR_INTERNET_APPROVED. + + + + + The MAPI property PR_INTERNET_ARTICLE_NUMBER. + + + + + The MAPI property PR_INTERNET_CONTROL. + + + + + The MAPI property PR_INTERNET_CPID. + + + + + The MAPI property PR_INTERNET_DISTRIBUTION. + + + + + The MAPI property PR_INTERNET_FOLLOWUP_TO. + + + + + The MAPI property PR_INTERNET_LINES. + + + + + The MAPI property PR_INTERNET_MESSAGE_ID. + + + + + The MAPI property PR_INTERNET_NEWSGROUPS. + + + + + The MAPI property PR_INTERNET_NNTP_PATH. + + + + + The MAPI property PR_INTERNET_ORGANIZATION. + + + + + The MAPI property PR_INTERNET_PRECEDENCE. + + + + + The MAPI property PR_INTERNET_REFERENCES. + + + + + The MAPI property PR_IPM_ID. + + + + + The MAPI property PR_IPM_OUTBOX_ENTRYID. + + + + + The MAPI property PR_IPM_OUTBOX_SEARCH_KEY. + + + + + The MAPI property PR_IPM_RETURN_REQUESTED. + + + + + The MAPI property PR_IPM_SENTMAIL_ENTRYID. + + + + + The MAPI property PR_IPM_SENTMAIL_SEARCH_KEY. + + + + + The MAPI property PR_IPM_SUBTREE_ENTRYID. + + + + + The MAPI property PR_IPM_SUBTREE_SEARCH_KEY. + + + + + The MAPI property PR_IPM_WASTEBASKET_ENTRYID. + + + + + The MAPI property PR_IPM_WASTEBASKET_SEARCH_KEY. + + + + + The MAPI property PR_ISDN_NUMBER. + + + + + The MAPI property PR_KEYWORD. + + + + + The MAPI property PR_LANGUAGE. + + + + + The MAPI property PR_LANGUAGES. + + + + + The MAPI property PR_LAST_MODIFICATION_TIME. + + + + + The MAPI property PR_LATEST_DELIVERY_TIME. + + + + + The MAPI property PR_LIST_HELP. + + + + + The MAPI property PR_LIST_SUBSCRIBE. + + + + + The MAPI property PR_LIST_UNSUBSCRIBE. + + + + + The MAPI property PR_LOCALITY. + + + + + The MAPI property PR_LOCALLY_DELIVERED. + + + + + The MAPI property PR_LOCATION. + + + + + The MAPI property PR_LOCK_BRANCH_ID. + + + + + The MAPI property PR_LOCK_DEPTH. + + + + + The MAPI property PR_LOCK_ENLISTMENT_CONTEXT. + + + + + The MAPI property PR_LOCK_EXPIRY_TIME. + + + + + The MAPI property PR_LOCK_PERSISTENT. + + + + + The MAPI property PR_LOCK_RESOURCE_DID. + + + + + The MAPI property PR_LOCK_RESOURCE_FID. + + + + + The MAPI property PR_LOCK_RESOURCE_MID. + + + + + The MAPI property PR_LOCK_SCOPE. + + + + + The MAPI property PR_LOCK_TIMEOUT. + + + + + The MAPI property PR_LOCK_TYPE. + + + + + The MAPI property PR_MAIL_PERMISSION. + + + + + The MAPI property PR_MANAGER_NAME. + + + + + The MAPI property PR_MAPPING_SIGNATURE. + + + + + The MAPI property PR_MDB_PROVIDER. + + + + + The MAPI property PR_MESSAGE_ATTACHMENTS. + + + + + The MAPI property PR_MESSAGE_CC_ME. + + + + + The MAPI property PR_MESSAGE_CLASS. + + + + + The MAPI property PR_MESSAGE_CODEPAGE. + + + + + The MAPI property PR_MESSAGE_DELIVERY_ID. + + + + + The MAPI property PR_MESSAGE_DELIVERY_TIME. + + + + + The MAPI property PR_MESSAGE_DOWNLOAD_TIME. + + + + + The MAPI property PR_MESSAGE_FLAGS. + + + + + The MAPI property PR_MESSAGE_RECIPIENTS. + + + + + The MAPI property PR_MESSAGE_RECIP_ME. + + + + + The MAPI property PR_MESSAGE_SECURITY_LABEL. + + + + + The MAPI property PR_MESSAGE_SIZE. + + + + + The MAPI property PR_MESSAGE_SUBMISSION_ID. + + + + + The MAPI property PR_MESSAGE_TOKEN. + + + + + The MAPI property PR_MESSAGE_TO_ME. + + + + + The MAPI property PR_MHS_COMMON_NAME. + + + + + The MAPI property PR_MIDDLE_NAME. + + + + + The MAPI property PR_MINI_ICON. + + + + + The MAPI property PR_MOBILE_TELEPHONE_NUMBER. + + + + + The MAPI property PR_MODIFY_VERSION. + + + + + The MAPI property PR_MSG_STATUS. + + + + + The MAPI property PR_NDR_DIAG_CODE. + + + + + The MAPI property PR_NDR_REASON_CODE. + + + + + The MAPI property PR_NDR_STATUS_CODE. + + + + + The MAPI property PR_NEWSGROUP_NAME. + + + + + The MAPI property PR_NICKNAME. + + + + + The MAPI property PR_NNTP_XREF. + + + + + The MAPI property PR_NON_RECEIPT_NOTIFICATION_REQUESTED. + + + + + The MAPI property PR_NON_RECEIPT_REASON. + + + + + The MAPI property PR_NORMALIZED_SUBJECT. + + + + + The MAPI property PR_NT_SECURITY_DESCRIPTOR. + + + + + The MAPI property PR_NULL. + + + + + The MAPI property PR_OBJECT_TYPE. + + + + + The MAPI property PR_OBSOLETE_IPMS. + + + + + The MAPI property PR_OFFICE2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OFFICE_LOCATION. + + + + + The MAPI property PR_OFFICE_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OOF_REPLY_TIME. + + + + + The MAPI property PR_ORGANIZATIONAL_ID_NUMBER. + + + + + The MAPI property PR_ORIG_ENTRYID. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_ENTRYID. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_NAME. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_SEARCH_KEY. + + + + + The MAPI property PR_ORIGINAL_DELIVERY_TIME. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_BCC. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_CC. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_NAME. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_TO. + + + + + The MAPI property PR_ORIGINAL_EITS. + + + + + The MAPI property PR_ORIGINAL_ENTRYID. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_ADRTYPE. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_ENTRYID. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIPIENT_NAME. + + + + + The MAPI property PR_ORIGINAL_SEARCH_KEY. + + + + + The MAPI property PR_ORIGINAL_SENDER_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_SENDER_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_SENDER_ENTRYID. + + + + + The MAPI property PR_ORIGINAL_SENDER_NAME. + + + + + The MAPI property PR_ORIGINAL_SENDER_SEARCH_KEY. + + + + + The MAPI property PR_ORIGINAL_SENSITIVITY. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_ENTRYID. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_NAME. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY. + + + + + The MAPI property PR_ORIGINAL_SUBJECT. + + + + + The MAPI property PR_ORIGINAL_SUBMIT_TIME. + + + + + The MAPI property PR_ORIGINATING_MTA_CERTIFICATE. + + + + + The MAPI property PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY. + + + + + The MAPI property PR_ORIGINATOR_CERTIFICATE. + + + + + The MAPI property PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED. + + + + + The MAPI property PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED. + + + + + The MAPI property PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT. + + + + + The MAPI property PR_ORIGINATOR_RETURN_ADDRESS. + + + + + The MAPI property PR_ORIGIN_CHECK. + + + + + The MAPI property PR_ORIG_MESSAGE_CLASS. + + + + + The MAPI property PR_OTHER_ADDRESS_CITY. + + + + + The MAPI property PR_OTHER_ADDRESS_COUNTRY. + + + + + The MAPI property PR_OTHER_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_OTHER_ADDRESS_POST_OFFICE_BOX. + + + + + The MAPI property PR_OTHER_ADDRESS_STATE_OR_PROVINCE. + + + + + The MAPI property PR_OTHER_ADDRESS_STREET. + + + + + The MAPI property PR_OTHER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OWNER_APPT_ID. + + + + + The MAPI property PR_OWN_STORE_ENTRYID. + + + + + The MAPI property PR_PAGER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_PARENT_DISPLAY. + + + + + The MAPI property PR_PARENT_ENTRYID. + + + + + The MAPI property PR_PARENT_KEY. + + + + + The MAPI property PR_PERSONAL_HOME_PAGE. + + + + + The MAPI property PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY. + + + + + The MAPI property PR_PHYSICAL_DELIVERY_MODE. + + + + + The MAPI property PR_PHYSICAL_DELIVERY_REPORT_REQUEST. + + + + + The MAPI property PR_PHYSICAL_FORWARDING_ADDRESS. + + + + + The MAPI property PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED. + + + + + The MAPI property PR_PHYSICAL_FORWARDING_PROHIBITED. + + + + + The MAPI property PR_PHYSICAL_RENDITION_ATTRIBUTES. + + + + + The MAPI property PR_POSTAL_ADDRESS. + + + + + The MAPI property PR_POSTAL_CODE. + + + + + The MAPI property PR_POST_FOLDER_ENTRIES. + + + + + The MAPI property PR_POST_FOLDER_NAMES. + + + + + The MAPI property PR_POST_OFFICE_BOX. + + + + + The MAPI property PR_POST_REPLY_DENIED. + + + + + The MAPI property PR_POST_REPLY_FOLDER_ENTRIES. + + + + + The MAPI property PR_POST_REPLY_FOLDER_NAMES. + + + + + The MAPI property PR_PREFERRED_BY_NAME. + + + + + The MAPI property PR_PREPROCESS. + + + + + The MAPI property PR_PRIMARY_CAPABILITY. + + + + + The MAPI property PR_PRIMARY_FAX_NUMBER. + + + + + The MAPI property PR_PRIMARY_TELEPHONE_NUMBER. + + + + + The MAPI property PR_PRIORITY. + + + + + The MAPI property PR_PROFESSION. + + + + + The MAPI property PR_PROFILE_NAME. + + + + + The MAPI property PR_PROOF_OF_DELIVERY. + + + + + The MAPI property PR_PROOF_OF_DELIVERY_REQUESTED. + + + + + The MAPI property PR_PROOF_OF_SUBMISSION. + + + + + The MAPI property PR_PROOF_OF_SUBMISSION_REQUESTED. + + + + + The MAPI property PR_PROP_ID_SECURE_MAX. + + + + + The MAPI property PR_PROP_ID_SECURE_MIN. + + + + + The MAPI property PR_PROVIDER_DISPLAY. + + + + + The MAPI property PR_PROVIDER_DLL_NAME. + + + + + The MAPI property PR_PROVIDER_ORDINAL. + + + + + The MAPI property PR_PROVIDER_SUBMIT_TIME. + + + + + The MAPI property PR_PROVIDER_UID. + + + + + The MAPI property PR_PUID. + + + + + The MAPI property PR_RADIO_TELEPHONE_NUMBER. + + + + + The MAPI property PR_RCVD_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_RCVD_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_RCVD_REPRESENTING_ENTRYID. + + + + + The MAPI property PR_RCVD_REPRESENTING_NAME. + + + + + The MAPI property PR_RCVD_REPRESENTING_SEARCH_KEY. + + + + + The MAPI property PR_READ_RECEIPT_ENTRYID. + + + + + The MAPI property PR_READ_RECEIPT_REQUESTED. + + + + + The MAPI property PR_READ_RECEIPT_SEARCH_KEY. + + + + + The MAPI property PR_RECEIPT_TIME. + + + + + The MAPI property PR_RECEIVED_BY_ADDRTYPE. + + + + + The MAPI property PR_RECEIVED_BY_EMAIL_ADDRESS. + + + + + The MAPI property PR_RECEIVED_BY_ENTRYID. + + + + + The MAPI property PR_RECEIVED_BY_NAME. + + + + + The MAPI property PR_RECEIVED_BY_SEARCH_KEY. + + + + + The MAPI property PR_RECEIVE_FOLDER_SETTINGS. + + + + + The MAPI property PR_RECIPIENT_CERTIFICATE. + + + + + The MAPI property PR_RECIPIENT_NUMBER_FOR_ADVICE. + + + + + The MAPI property PR_RECIPIENT_REASSIGNMENT_PROHIBITED. + + + + + The MAPI property PR_RECIPIENT_STATUS. + + + + + The MAPI property PR_RECIPIENT_TYPE. + + + + + The MAPI property PR_RECORD_KEY. + + + + + The MAPI property PR_REDIRECTION_HISTORY. + + + + + The MAPI property PR_REFERRED_BY_NAME. + + + + + The MAPI property PR_REGISTERED_MAIL_TYPE. + + + + + The MAPI property PR_RELATED_IPMS. + + + + + The MAPI property PR_REMOTE_PROGRESS. + + + + + The MAPI property PR_REMOTE_PROGRESS_TEXT. + + + + + The MAPI property PR_REMOTE_VALIDATE_OK. + + + + + The MAPI property PR_RENDERING_POSITION. + + + + + The MAPI property PR_REPLY_RECIPIENT_ENTRIES. + + + + + The MAPI property PR_REPLY_RECIPIENT_NAMES. + + + + + The MAPI property PR_REPLY_REQUESTED. + + + + + The MAPI property PR_REPLY_TIME. + + + + + The MAPI property PR_REPORT_ENTRYID. + + + + + The MAPI property PR_REPORTING_DLL_NAME. + + + + + The MAPI property PR_REPORTING_MTA_CERTIFICATE. + + + + + The MAPI property PR_REPORT_NAME. + + + + + The MAPI property PR_REPORT_SEARCH_KEY. + + + + + The MAPI property PR_REPORT_TAG. + + + + + The MAPI property PR_REPORT_TEXT. + + + + + The MAPI property PR_REPORT_TIME. + + + + + The MAPI property PR_REQUESTED_DELIVERY_METHOD. + + + + + The MAPI property PR_RESOURCE_FLAGS. + + + + + The MAPI property PR_RESOURCE_METHODS. + + + + + The MAPI property PR_RESOURCE_PATH. + + + + + The MAPI property PR_RESOURCE_TYPE. + + + + + The MAPI property PR_RESPONSE_REQUESTED. + + + + + The MAPI property PR_RESPONSIBILITY. + + + + + The MAPI property PR_RETURNED_IPM. + + + + + The MAPI property PR_ROWID. + + + + + The MAPI property PR_ROW_TYPE. + + + + + The MAPI property PR_RTF_COMPRESSED. + + + + + The MAPI property PR_RTF_IN_SYNC. + + + + + The MAPI property PR_SYNC_BODY_COUNT. + + + + + The MAPI property PR_RTF_SYNC_BODY_CRC. + + + + + The MAPI property PR_RTF_SYNC_BODY_TAG. + + + + + The MAPI property PR_RTF_SYNC_PREFIX_COUNT. + + + + + The MAPI property PR_RTF_SYNC_TRAILING_COUNT. + + + + + The MAPI property PR_SEARCH. + + + + + The MAPI property PR_SEARCH_KEY. + + + + + The MAPI property PR_SECURITY. + + + + + The MAPI property PR_SELECTABLE. + + + + + The MAPI property PR_SENDER_ADDRTYPE. + + + + + The MAPI property PR_SENDER_EMAIL_ADDRESS. + + + + + The MAPI property PR_SENDER_ENTRYID. + + + + + The MAPI property PR_SENDER_NAME. + + + + + The MAPI property PR_SENDER_SEARCH_KEY. + + + + + The MAPI property PR_SEND_INTERNET_ENCODING. + + + + + The MAPI property PR_SEND_RECALL_REPORT. + + + + + The MAPI property PR_SEND_RICH_INFO. + + + + + The MAPI property PR_SENSITIVITY. + + + + + The MAPI property PR_SENTMAIL_ENTRYID. + + + + + The MAPI property PR_SENT_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_SENT_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_SENT_REPRESENTING_ENTRYID. + + + + + The MAPI property PR_SENT_REPRESENTING_NAME. + + + + + The MAPI property PR_SENT_REPRESENTING_SEARCH_KEY. + + + + + The MAPI property PR_SERVICE_DELETE_FILES. + + + + + The MAPI property PR_SERVICE_DLL_NAME. + + + + + The MAPI property PR_SERVICE_ENTRY_NAME. + + + + + The MAPI property PR_SERVICE_EXTRA_UIDS. + + + + + The MAPI property PR_SERVICE_NAME. + + + + + The MAPI property PR_SERVICES. + + + + + The MAPI property PR_SERVICE_SUPPORT_FILES. + + + + + The MAPI property PR_SERVICE_UID. + + + + + The MAPI property PR_SEVEN_BIT_DISPLAY_NAME. + + + + + The MAPI property PR_SMTP_ADDRESS. + + + + + The MAPI property PR_SPOOLER_STATUS. + + + + + The MAPI property PR_SPOUSE_NAME. + + + + + The MAPI property PR_START_DATE. + + + + + The MAPI property PR_STATE_OR_PROVINCE. + + + + + The MAPI property PR_STATUS. + + + + + The MAPI property PR_STATUS_CODE. + + + + + The MAPI property PR_STATUS_STRING. + + + + + The MAPI property PR_STORE_ENTRYID. + + + + + The MAPI property PR_STORE_PROVIDERS. + + + + + The MAPI property PR_STORE_RECORD_KEY. + + + + + The MAPI property PR_STORE_STATE. + + + + + The MAPI property PR_STORE_SUPPORT_MASK. + + + + + The MAPI property PR_STREET_ADDRESS. + + + + + The MAPI property PR_SUBFOLDERS. + + + + + The MAPI property PR_SUBJECT. + + + + + The MAPI property PR_SUBJECT_IPM. + + + + + The MAPI property PR_SUBJECT_PREFIX. + + + + + The MAPI property PR_SUBMIT_FLAGS. + + + + + The MAPI property PR_SUPERSEDES. + + + + + The MAPI property PR_SUPPLEMENTARY_INFO. + + + + + The MAPI property PR_SURNAME. + + + + + The MAPI property PR_TELEX_NUMBER. + + + + + The MAPI property PR_TEMPLATEID. + + + + + The MAPI property PR_TITLE. + + + + + The MAPI property PR_TNEF_CORRELATION_KEY. + + + + + The MAPI property PR_TRANSMITABLE_DISPLAY_NAME. + + + + + The MAPI property PR_TRANSPORT_KEY. + + + + + The MAPI property PR_TRANSPORT_MESSAGE_HEADERS. + + + + + The MAPI property PR_TRANSPORT_PROVIDERS. + + + + + The MAPI property PR_TRANSPORT_STATUS. + + + + + The MAPI property PR_TTYTDD_PHONE_NUMBER. + + + + + The MAPI property PR_TYPE_OF_MTS_USER. + + + + + The MAPI property PR_USER_CERTIFICATE. + + + + + The MAPI property PR_USER_X509_CERTIFICATE. + + + + + The MAPI property PR_VALID_FOLDER_MASK. + + + + + The MAPI property PR_VIEWS_ENTRYID. + + + + + The MAPI property PR_WEDDING_ANNIVERSARY. + + + + + The MAPI property PR_X400_CONTENT_TYPE. + + + + + The MAPI property PR_X400_DEFERRED_DELIVERY_CANCEL. + + + + + The MAPI property PR_XPOS. + + + + + The MAPI property PR_YPOS. + + + + + A TNEF property reader. + + + A TNEF property reader. + + + + + Gets a value indicating whether the current property is an embedded TNEF message. + + + Gets a value indicating whether the current property is an embedded TNEF message. + + true if the current property is an embedded TNEF message; otherwise, false. + + + + Gets a value indicating whether or not the current property has multiple values. + + + Gets a value indicating whether or not the current property has multiple values. + + true if the current property has multiple values; otherwise, false. + + + + Gets a value indicating whether or not the current property is a named property. + + + Gets a value indicating whether or not the current property is a named property. + + true if the current property is a named property; otherwise, false. + + + + Gets a value indicating whether the current property contains object values. + + + Gets a value indicating whether the current property contains object values. + + true if the current property contains object values; otherwise, false. + + + + Gets the number of properties available. + + + Gets the number of properties available. + + The property count. + + + + Gets the property name identifier. + + + Gets the property name identifier. + + The property name identifier. + + + + Gets the property tag. + + + Gets the property tag. + + The property tag. + + + + Gets the length of the raw value. + + + Gets the length of the raw value. + + The length of the raw value. + + + + Gets the raw value stream offset. + + + Gets the raw value stream offset. + + The raw value stream offset. + + + + Gets the number of table rows available. + + + Gets the number of table rows available. + + The row count. + + + + Gets the number of values available. + + + Gets the number of values available. + + The value count. + + + + Gets the type of the value. + + + Gets the type of the value. + + The type of the value. + + + + Gets the embedded TNEF message reader. + + + Gets the embedded TNEF message reader. + + The embedded TNEF message reader. + + The property does not contain any more values. + -or- + The property value is not an embedded message. + + + + + Gets the raw value of the attribute or property as a stream. + + + Gets the raw value of the attribute or property as a stream. + + The raw value stream. + + The property does not contain any more values. + + + + + Advances to the next MAPI property. + + + Advances to the next MAPI property. + + true if there is another property available to be read; otherwise false. + + The TNEF data is corrupt or invalid. + + + + + Advances to the next table row of properties. + + + Advances to the next table row of properties. + + true if there is another row available to be read; otherwise false. + + The TNEF data is corrupt or invalid. + + + + + Advances to the next value in the TNEF stream. + + + Advances to the next value in the TNEF stream. + + true if there is another value available to be read; otherwise false. + + The TNEF data is corrupt or invalid. + + + + + Reads the raw attribute or property value as a sequence of bytes. + + + Reads the raw attribute or property value as a sequence of bytes. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + An I/O error occurred. + + + + + Reads the raw attribute or property value as a sequence of unicode characters. + + + Reads the raw attribute or property value as a sequence of unicode characters. + + The total number of characters read into the buffer. This can be less than the number of characters + requested if that many bytes are not currently available, or zero (0) if the end of the stream has been + reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of characters to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain characters starting + at the specified . + + + An I/O error occurred. + + + + + Reads the value. + + + Reads an attribute or property value as its native type. + + The value. + + There are no more values to read or the value could not be read. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a boolean. + + + Reads any integer-based attribute or property value as a boolean. + + The value as a boolean. + + There are no more values to read or the value could not be read as a boolean. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a byte array. + + + Reads any string, binary blob, Class ID, or Object attribute or property value as a byte array. + + The value as a byte array. + + There are no more values to read or the value could not be read as a byte array. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a date and time. + + + Reads any date and time attribute or property value as a . + + The value as a date and time. + + There are no more values to read or the value could not be read as a date and time. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a double. + + + Reads any numeric attribute or property value as a double. + + The value as a double. + + There are no more values to read or the value could not be read as a double. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a float. + + + Reads any numeric attribute or property value as a float. + + The value as a float. + + There are no more values to read or the value could not be read as a float. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a GUID. + + + Reads any Class ID value as a GUID. + + The value as a GUID. + + There are no more values to read or the value could not be read as a GUID. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a 16-bit integer. + + + Reads any integer-based attribute or property value as a 16-bit integer. + + The value as a 16-bit integer. + + There are no more values to read or the value could not be read as a 16-bit integer. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a 32-bit integer. + + + Reads any integer-based attribute or property value as a 32-bit integer. + + The value as a 32-bit integer. + + There are no more values to read or the value could not be read as a 32-bit integer. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a 64-bit integer. + + + Reads any integer-based attribute or property value as a 64-bit integer. + + The value as a 64-bit integer. + + There are no more values to read or the value could not be read as a 64-bit integer. + + + The TNEF stream is truncated and the value could not be read. + + + + + Reads the value as a string. + + + Reads any string or binary blob values as a string. + + The value as a string. + + There are no more values to read or the value could not be read as a string. + + + The TNEF stream is truncated and the value could not be read. + + + + + Serves as a hash function for a object. + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms + and data structures such as a hash table. + + + + Determines whether the specified is equal to the current . + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + A TNEF property tag. + + + A TNEF property tag. + + + + + The MAPI property PR_AB_DEFAULT_DIR. + + + The MAPI property PR_AB_DEFAULT_DIR. + + + + + The MAPI property PR_AB_DEFAULT_PAB. + + + The MAPI property PR_AB_DEFAULT_PAD. + + + + + The MAPI property PR_AB_PROVIDER_ID. + + + The MAPI property PR_AB_PROVIDER_ID. + + + + + The MAPI property PR_AB_PROVIDERS. + + + The MAPI property PR_AB_PROVIDERS. + + + + + The MAPI property PR_AB_SEARCH_PATH. + + + The MAPI property PR_AB_SEARCH_PATH. + + + + + The MAPI property PR_AB_SEARCH_PATH_UPDATE. + + + The MAPI property PR_AB_SEARCH_PATH_UPDATE. + + + + + The MAPI property PR_ACCESS. + + + The MAPI property PR_ACCESS. + + + + + The MAPI property PR_ACCESS_LEVEL. + + + The MAPI property PR_ACCESS_LEVEL. + + + + + The MAPI property PR_ACCOUNT. + + + The MAPI property PR_ACCOUNT. + + + + + The MAPI property PR_ACCOUNT. + + + The MAPI property PR_ACCOUNT. + + + + + The MAPI property PR_ACKNOWLEDGEMENT_MODE. + + + The MAPI property PR_ACKNOWLEDGEMENT_MODE. + + + + + The MAPI property PR_ADDRTYPE. + + + The MAPI property PR_ADDRTYPE. + + + + + The MAPI property PR_ADDRTYPE. + + + The MAPI property PR_ADDRTYPE. + + + + + The MAPI property PR_ALTERNATE_RECIPIENT. + + + The MAPI property PR_ALTERNATE_RECIPIENT. + + + + + The MAPI property PR_ALTERNATE_RECIPIENT_ALLOWED. + + + The MAPI property PR_ALTERNATE_RECIPIENT_ALLOWED. + + + + + The MAPI property PR_ANR. + + + The MAPI property PR_ANR. + + + + + The MAPI property PR_ANR. + + + The MAPI property PR_ANR. + + + + + The MAPI property PR_ASSISTANT. + + + The MAPI property PR_ASSISTANT. + + + + + The MAPI property PR_ASSISTANT. + + + The MAPI property PR_ASSISTANT. + + + + + The MAPI property PR_ASSISTANT_TELEPHONE_NUMBER. + + + The MAPI property PR_ASSISTANT_TELEPHONE_NUMBER. + + + + + The MAPI property PR_ASSISTANT_TELEPHONE_NUMBER. + + + The MAPI property PR_ASSISTANT_TELEPHONE_NUMBER. + + + + + The MAPI property PR_ASSOC_CONTENT_COUNT. + + + The MAPI property PR_ASSOC_CONTENT_COUNT. + + + + + The MAPI property PR_ATTACH_ADDITIONAL_INFO. + + + The MAPI property PR_ATTACH_ADDITIONAL_INFO. + + + + + The MAPI property PR_ATTACH_CONTENT_BASE. + + + The MAPI property PR_ATTACH_CONTENT_BASE. + + + + + The MAPI property PR_ATTACH_CONTENT_BASE. + + + The MAPI property PR_ATTACH_CONTENT_BASE. + + + + + The MAPI property PR_ATTACH_CONTENT_ID. + + + The MAPI property PR_ATTACH_CONTENT_ID. + + + + + The MAPI property PR_ATTACH_CONTENT_ID. + + + The MAPI property PR_ATTACH_CONTENT_ID. + + + + + The MAPI property PR_ATTACH_CONTENT_LOCATION. + + + The MAPI property PR_ATTACH_CONTENT_LOCATION. + + + + + The MAPI property PR_ATTACH_CONTENT_LOCATION. + + + The MAPI property PR_ATTACH_CONTENT_LOCATION. + + + + + The MAPI property PR_ATTACH_DATA. + + + The MAPI property PR_ATTACH_DATA. + + + + + The MAPI property PR_ATTACH_DATA. + + + The MAPI property PR_ATTACH_DATA. + + + + + The MAPI property PR_ATTACH_DISPOSITION. + + + The MAPI property PR_ATTACH_DISPOSITION. + + + + + The MAPI property PR_ATTACH_DISPOSITION. + + + The MAPI property PR_ATTACH_DISPOSITION. + + + + + The MAPI property PR_ATTACH_ENCODING. + + + The MAPI property PR_ATTACH_ENCODING. + + + + + The MAPI property PR_ATTACH_EXTENSION. + + + The MAPI property PR_ATTACH_EXTENSION. + + + + + The MAPI property PR_ATTACH_EXTENSION. + + + The MAPI property PR_ATTACH_EXTENSION. + + + + + The MAPI property PR_ATTACH_FILENAME. + + + The MAPI property PR_ATTACH_FILENAME. + + + + + The MAPI property PR_ATTACH_FILENAME. + + + The MAPI property PR_ATTACH_FILENAME. + + + + + The MAPI property PR_ATTACH_FLAGS. + + + The MAPI property PR_ATTACH_FLAGS. + + + + + The MAPI property PR_ATTACH_LONG_FILENAME. + + + The MAPI property PR_ATTACH_LONG_FILENAME. + + + + + The MAPI property PR_ATTACH_LONG_FILENAME. + + + The MAPI property PR_ATTACH_LONG_FILENAME. + + + + + The MAPI property PR_ATTACH_LONG_PATHNAME. + + + The MAPI property PR_ATTACH_LONG_PATHNAME. + + + + + The MAPI property PR_ATTACH_LONG_PATHNAME. + + + The MAPI property PR_ATTACH_LONG_PATHNAME. + + + + + The MAPI property PR_ATTACHMENT_X400_PARAMETERS. + + + The MAPI property PR_ATTACHMENT_X400_PARAMETERS. + + + + + The MAPI property PR_ATTACH_METHOD. + + + The MAPI property PR_ATTACH_METHOD. + + + + + The MAPI property PR_ATTACH_MIME_SEQUENCE. + + + The MAPI property PR_ATTACH_MIME_SEQUENCE. + + + + + The MAPI property PR_ATTACH_MIME_TAG. + + + The MAPI property PR_ATTACH_MIME_TAG. + + + + + The MAPI property PR_ATTACH_MIME_TAG. + + + The MAPI property PR_ATTACH_MIME_TAG. + + + + + The MAPI property PR_ATTACH_NETSCAPE_MAC_INFO. + + + The MAPI property PR_ATTACH_NETSCAPE_MAC_INFO. + + + + + The MAPI property PR_ATTACH_NUM. + + + The MAPI property PR_ATTACH_NUM. + + + + + The MAPI property PR_ATTACH_PATHNAME. + + + The MAPI property PR_ATTACH_PATHNAME. + + + + + The MAPI property PR_ATTACH_PATHNAME. + + + The MAPI property PR_ATTACH_PATHNAME. + + + + + The MAPI property PR_ATTACH_RENDERING. + + + The MAPI property PR_ATTACH_RENDERING. + + + + + The MAPI property PR_ATTACH_SIZE. + + + The MAPI property PR_ATTACH_SIZE. + + + + + The MAPI property PR_ATTACH_TAG. + + + The MAPI property PR_ATTACH_TAG. + + + + + The MAPI property PR_ATTACH_TRANSPORT_NAME. + + + The MAPI property PR_ATTACH_TRANSPORT_NAME. + + + + + The MAPI property PR_ATTACH_TRANSPORT_NAME. + + + The MAPI property PR_ATTACH_TRANSPORT_NAME. + + + + + The MAPI property PR_AUTHORIZING_USERS. + + + The MAPI property PR_AUTHORIZING_USERS. + + + + + The MAPI property PR_AUTOFORWARDED. + + + The MAPI property PR_AUTOFORWARDED. + + + + + The MAPI property PR_AUTOFORWARDING_COMMENT. + + + The MAPI property PR_AUTOFORWARDING_COMMENT. + + + + + The MAPI property PR_AUTOFORWARDING_COMMENT. + + + The MAPI property PR_AUTOFORWARDING_COMMENT. + + + + + The MAPI property PR_AUTORESPONSE_SUPPRESS. + + + The MAPI property PR_AUTORESPONSE_SUPPRESS. + + + + + The MAPI property PR_BEEPER_TELEPHONE_NUMBER. + + + The MAPI property PR_BEEPER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_BEEPER_TELEPHONE_NUMBER. + + + The MAPI property PR_BEEPER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_BIRTHDAY. + + + The MAPI property PR_BIRTHDAY. + + + + + The MAPI property PR_BODY. + + + The MAPI property PR_BODY. + + + + + The MAPI property PR_BODY. + + + The MAPI property PR_BODY. + + + + + The MAPI property PR_BODY_CONTENT_ID. + + + The MAPI property PR_BODY_CONTENT_ID. + + + + + The MAPI property PR_BODY_CONTENT_ID. + + + The MAPI property PR_BODY_CONTENT_ID. + + + + + The MAPI property PR_BODY_CONTENT_LOCATION. + + + The MAPI property PR_BODY_CONTENT_LOCATION. + + + + + The MAPI property PR_BODY_CONTENT_LOCATION. + + + The MAPI property PR_BODY_CONTENT_LOCATION. + + + + + The MAPI property PR_BODY_CRC. + + + The MAPI property PR_BODY_CRC. + + + + + The MAPI property PR_BODY_HTML. + + + The MAPI property PR_BODY_HTML. + + + + + The MAPI property PR_BODY_HTML. + + + The MAPI property PR_BODY_HTML. + + + + + The MAPI property PR_BODY_HTML. + + + The MAPI property PR_BODY_HTML. + + + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + The MAPI property PR_BUSINESS2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_BUSINESS_ADDRESS_CITY. + + + The MAPI property PR_BUSINESS_ADDRESS_CITY. + + + + + The MAPI property PR_BUSINESS_ADDRESS_CITY. + + + The MAPI property PR_BUSINESS_ADDRESS_CITY. + + + + + The MAPI property PR_BUSINESS_ADDRESS_COUNTRY. + + + The MAPI property PR_BUSINESS_ADDRESS_COUNTRY. + + + + + The MAPI property PR_BUSINESS_ADDRESS_COUNTRY. + + + The MAPI property PR_BUSINESS_ADDRESS_COUNTRY. + + + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_CODE. + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_CODE. + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_STREET. + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_STREET. + + + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_STREET. + + + The MAPI property PR_BUSINESS_ADDRESS_POSTAL_STREET. + + + + + The MAPI property PR_BUSINESS_FAX_NUMBER. + + + The MAPI property PR_BUSINESS_FAX_NUMBER. + + + + + The MAPI property PR_BUSINESS_FAX_NUMBER. + + + The MAPI property PR_BUSINESS_FAX_NUMBER. + + + + + The MAPI property PR_BUSINESS_HOME_PAGE. + + + The MAPI property PR_BUSINESS_HOME_PAGE. + + + + + The MAPI property PR_BUSINESS_HOME_PAGE. + + + The MAPI property PR_BUSINESS_HOME_PAGE. + + + + + The MAPI property PR_CALLBACK_TELEPHONE_NUMBER. + + + The MAPI property PR_CALLBACK_TELEPHONE_NUMBER. + + + + + The MAPI property PR_CALLBACK_TELEPHONE_NUMBER. + + + The MAPI property PR_CALLBACK_TELEPHONE_NUMBER. + + + + + The MAPI property PR_CAR_TELEPHONE_NUMBER. + + + The MAPI property PR_CAR_TELEPHONE_NUMBER. + + + + + The MAPI property PR_CAR_TELEPHONE_NUMBER. + + + The MAPI property PR_CAR_TELEPHONE_NUMBER. + + + + + The MAPI property PR_CHILDRENS_NAMES. + + + The MAPI property PR_CHILDRENS_NAMES. + + + + + The MAPI property PR_CHILDRENS_NAMES. + + + The MAPI property PR_CHILDRENS_NAMES. + + + + + The MAPI property PR_CLIENT_SUBMIT_TIME. + + + The MAPI property PR_CLIENT_SUBMIT_TIME. + + + + + The MAPI property PR_COMMENT. + + + The MAPI property PR_COMMENT. + + + + + The MAPI property PR_COMMENT. + + + The MAPI property PR_COMMENT. + + + + + The MAPI property PR_COMMON_VIEWS_ENTRYID. + + + The MAPI property PR_COMMON_VIEWS_ENTRYID. + + + + + The MAPI property PR_COMPANY_MAIN_PHONE_NUMBER. + + + The MAPI property PR_COMPANY_MAIN_PHONE_NUMBER. + + + + + The MAPI property PR_COMPANY_MAIN_PHONE_NUMBER. + + + The MAPI property PR_COMPANY_MAIN_PHONE_NUMBER. + + + + + The MAPI property PR_COMPANY_NAME. + + + The MAPI property PR_COMPANY_NAME. + + + + + The MAPI property PR_COMPANY_NAME. + + + The MAPI property PR_COMPANY_NAME. + + + + + The MAPI property PR_COMPUTER_NETWORK_NAME. + + + The MAPI property PR_COMPUTER_NETWORK_NAME. + + + + + The MAPI property PR_COMPUTER_NETWORK_NAME. + + + The MAPI property PR_COMPUTER_NETWORK_NAME. + + + + + The MAPI property PR_CONTACT_ADDRTYPES. + + + The MAPI property PR_CONTACT_ADDRTYPES. + + + + + The MAPI property PR_CONTACT_ADDRTYPES. + + + The MAPI property PR_CONTACT_ADDRTYPES. + + + + + The MAPI property PR_CONTACT_DEFAULT_ADDRESS_INDEX. + + + The MAPI property PR_CONTACT_DEFAULT_ADDRESS_INDEX. + + + + + The MAPI property PR_CONTACT_EMAIL_ADDRESSES. + + + The MAPI property PR_CONTACT_EMAIL_ADDRESSES. + + + + + The MAPI property PR_CONTACT_EMAIL_ADDRESSES. + + + The MAPI property PR_CONTACT_EMAIL_ADDRESSES. + + + + + The MAPI property PR_CONTACT_ENTRYIDS. + + + The MAPI property PR_CONTACT_ENTRYIDS. + + + + + The MAPI property PR_CONTACT_VERSION. + + + The MAPI property PR_CONTACT_VERSION. + + + + + The MAPI property PR_CONTAINER_CLASS. + + + The MAPI property PR_CONTAINER_CLASS. + + + + + The MAPI property PR_CONTAINER_CLASS. + + + The MAPI property PR_CONTAINER_CLASS. + + + + + The MAPI property PR_CONTAINER_CONTENTS. + + + The MAPI property PR_CONTAINER_CONTENTS. + + + + + The MAPI property PR_CONTAINER_FLAGS. + + + The MAPI property PR_CONTAINER_FLAGS. + + + + + The MAPI property PR_CONTAINER_HIERARCHY. + + + The MAPI property PR_CONTAINER_HIERARCHY. + + + + + The MAPI property PR_CONTAINER_MODIFY_VERSION. + + + The MAPI property PR_CONTAINER_MODIFY_VERSION. + + + + + The MAPI property PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID. + + + The MAPI property PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID. + + + + + The MAPI property PR_CONTENT_CORRELATOR. + + + The MAPI property PR_CONTENT_CORRELATOR. + + + + + The MAPI property PR_CONTENT_COUNT. + + + The MAPI property PR_CONTENT_COUNT. + + + + + The MAPI property PR_CONTENT_IDENTIFIER. + + + The MAPI property PR_CONTENT_IDENTIFIER. + + + + + The MAPI property PR_CONTENT_IDENTIFIER. + + + The MAPI property PR_CONTENT_IDENTIFIER. + + + + + The MAPI property PR_CONTENT_INTEGRITY_CHECK. + + + The MAPI property PR_CONTENT_INTEGRITY_CHECK. + + + + + The MAPI property PR_CONTENT_LENGTH. + + + The MAPI property PR_CONTENT_LENGTH. + + + + + The MAPI property PR_CONTENT_RETURN_REQUESTED. + + + The MAPI property PR_CONTENT_RETURN_REQUESTED. + + + + + The MAPI property PR_CONTENTS_SORT_ORDER. + + + The MAPI property PR_CONTENTS_SORT_ORDER. + + + + + The MAPI property PR_CONTENT_UNREAD. + + + The MAPI property PR_CONTENT_UNREAD. + + + + + The MAPI property PR_CONTROL_FLAGS. + + + The MAPI property PR_CONTROL_FLAGS. + + + + + The MAPI property PR_CONTROL_ID. + + + The MAPI property PR_CONTROL_ID. + + + + + The MAPI property PR_CONTROL_STRUCTURE. + + + The MAPI property PR_CONTROL_STRUCTURE. + + + + + The MAPI property PR_CONTROL_TYPE. + + + The MAPI property PR_CONTROL_TYPE. + + + + + The MAPI property PR_CONVERSATION_INDEX. + + + The MAPI property PR_CONVERSATION_INDEX. + + + + + The MAPI property PR_CONVERSATION_KEY. + + + The MAPI property PR_CONVERSATION_KEY. + + + + + The MAPI property PR_CONVERSATION_TOPIC. + + + The MAPI property PR_CONVERSATION_TOPIC. + + + + + The MAPI property PR_CONVERSATION_TOPIC. + + + The MAPI property PR_CONVERSATION_TOPIC. + + + + + The MAPI property PR_CONVERSION_EITS. + + + The MAPI property PR_CONVERSION_EITS. + + + + + The MAPI property PR_CONVERSION_PROHIBITED. + + + The MAPI property PR_CONVERSION_PROHIBITED. + + + + + The MAPI property PR_CONVERSION_WITH_LOSS_PROHIBITED. + + + The MAPI property PR_CONVERSION_WITH_LOSS_PROHIBITED. + + + + + The MAPI property PR_CONVERTED_EITS. + + + The MAPI property PR_CONVERTED_EITS. + + + + + The MAPI property PR_CORRELATE. + + + The MAPI property PR_CORRELATE. + + + + + The MAPI property PR_CORRELATE_MTSID. + + + The MAPI property PR_CORRELATE_MTSID. + + + + + The MAPI property PR_COUNTRY. + + + The MAPI property PR_COUNTRY. + + + + + The MAPI property PR_COUNTRY. + + + The MAPI property PR_COUNTRY. + + + + + The MAPI property PR_CREATE_TEMPLATES. + + + The MAPI property PR_CREATE_TEMPLATES. + + + + + The MAPI property PR_CREATION_TIME. + + + The MAPI property PR_CREATION_TIME. + + + + + The MAPI property PR_CREATION_VERSION. + + + The MAPI property PR_CREATION_VERSION. + + + + + The MAPI property PR_CURRENT_VERSION. + + + The MAPI property PR_CURRENT_VERSION. + + + + + The MAPI property PR_CUSTOMER_ID. + + + The MAPI property PR_CUSTOMER_ID. + + + + + The MAPI property PR_CUSTOMER_ID. + + + The MAPI property PR_CUSTOMER_ID. + + + + + The MAPI property PR_DEFAULT_PROFILE. + + + The MAPI property PR_DEFAULT_PROFILE. + + + + + The MAPI property PR_DEFAULT_STORE. + + + The MAPI property PR_DEFAULT_STORE. + + + + + The MAPI property PR_DEFAULT_VIEW_ENTRYID. + + + The MAPI property PR_DEFAULT_VIEW_ENTRYID. + + + + + The MAPI property PR_DEF_CREATE_DL. + + + The MAPI property PR_DEF_CREATE_DL. + + + + + The MAPI property PR_DEF_CREATE_MAILUSER. + + + The MAPI property PR_DEF_CREATE_MAILUSER. + + + + + The MAPI property PR_DEFERRED_DELIVERY_TIME. + + + The MAPI property PR_DEFERRED_DELIVERY_TIME. + + + + + The MAPI property PR_DELEGATION. + + + The MAPI property PR_DELEGATION. + + + + + The MAPI property PR_DELETE_AFTER_SUBMIT. + + + The MAPI property PR_DELETE_AFTER_SUBMIT. + + + + + The MAPI property PR_DELIVER_TIME. + + + The MAPI property PR_DELIVER_TIME. + + + + + The MAPI property PR_DELIVERY_POINT. + + + The MAPI property PR_DELIVERY_POINT. + + + + + The MAPI property PR_DELTAX. + + + The MAPI property PR_DELTAX. + + + + + The MAPI property PR_DELTAY. + + + The MAPI property PR_DELTAY. + + + + + The MAPI property PR_DEPARTMENT_NAME. + + + The MAPI property PR_DEPARTMENT_NAME. + + + + + The MAPI property PR_DEPARTMENT_NAME. + + + The MAPI property PR_DEPARTMENT_NAME. + + + + + The MAPI property PR_DEPTH. + + + The MAPI property PR_DEPTH. + + + + + The MAPI property PR_DETAILS_TABLE. + + + The MAPI property PR_DETAILS_TABLE. + + + + + The MAPI property PR_DISCARD_REASON. + + + The MAPI property PR_DISCARD_REASON. + + + + + The MAPI property PR_DISCLOSE_RECIPIENTS. + + + The MAPI property PR_DISCLOSE_RECIPIENTS. + + + + + The MAPI property PR_DISCLOSURE_OF_RECIPIENTS. + + + The MAPI property PR_DISCLOSURE_OF_RECIPIENTS. + + + + + The MAPI property PR_DISCRETE_VALUES. + + + The MAPI property PR_DISCRETE_VALUES. + + + + + The MAPI property PR_DISC_VAL. + + + The MAPI property PR_DISC_VAL. + + + + + The MAPI property PR_DISPLAY_BCC. + + + The MAPI property PR_DISPLAY_BCC. + + + + + The MAPI property PR_DISPLAY_BCC. + + + The MAPI property PR_DISPLAY_BCC. + + + + + The MAPI property PR_DISPLAY_CC. + + + The MAPI property PR_DISPLAY_CC. + + + + + The MAPI property PR_DISPLAY_CC. + + + The MAPI property PR_DISPLAY_CC. + + + + + The MAPI property PR_DISPLAY_NAME. + + + The MAPI property PR_DISPLAY_NAME. + + + + + The MAPI property PR_DISPLAY_NAME. + + + The MAPI property PR_DISPLAY_NAME. + + + + + The MAPI property PR_DISPLAY_NAME_PREFIX. + + + The MAPI property PR_DISPLAY_NAME_PREFIX. + + + + + The MAPI property PR_DISPLAY_NAME_PREFIX. + + + The MAPI property PR_DISPLAY_NAME_PREFIX. + + + + + The MAPI property PR_DISPLAY_TO. + + + The MAPI property PR_DISPLAY_TO. + + + + + The MAPI property PR_DISPLAY_TO. + + + The MAPI property PR_DISPLAY_TO. + + + + + The MAPI property PR_DISPLAY_TYPE. + + + The MAPI property PR_DISPLAY_TYPE. + + + + + The MAPI property PR_DL_EXPANSION_HISTORY. + + + The MAPI property PR_DL_EXPANSION_HISTORY. + + + + + The MAPI property PR_DL_EXPANSION_PROHIBITED. + + + The MAPI property PR_DL_EXPANSION_PROHIBITED. + + + + + The MAPI property PR_EMAIL_ADDRESS. + + + The MAPI property PR_EMAIL_ADDRESS. + + + + + The MAPI property PR_EMAIL_ADDRESS. + + + The MAPI property PR_EMAIL_ADDRESS. + + + + + The MAPI property PR_END_DATE. + + + The MAPI property PR_END_DATE. + + + + + The MAPI property PR_ENTRYID. + + + The MAPI property PR_ENTRYID. + + + + + The MAPI property PR_EXPAND_BEGIN_TIME. + + + The MAPI property PR_EXPAND_BEGIN_TIME. + + + + + The MAPI property PR_EXPANDED_BEGIN_TIME. + + + The MAPI property PR_EXPANDED_BEGIN_TIME. + + + + + The MAPI property PR_EXPANDED_END_TIME. + + + The MAPI property PR_EXPANDED_END_TIME. + + + + + The MAPI property PR_EXPAND_END_TIME. + + + The MAPI property PR_EXPAND_END_TIME. + + + + + The MAPI property PR_EXPIRY_TIME. + + + The MAPI property PR_EXPIRY_TIME. + + + + + The MAPI property PR_EXPLICIT_CONVERSION. + + + The MAPI property PR_EXPLICIT_CONVERSION. + + + + + The MAPI property PR_FILTERING_HOOKS. + + + The MAPI property PR_FILTERING_HOOKS. + + + + + The MAPI property PR_FINDER_ENTRYID. + + + The MAPI property PR_FINDER_ENTRYID. + + + + + The MAPI property PR_FOLDER_ASSOCIATED_CONTENTS. + + + The MAPI property PR_FOLDER_ASSOCIATED_CONTENTS. + + + + + The MAPI property PR_FOLDER_TYPE. + + + The MAPI property PR_FOLDER_TYPE. + + + + + The MAPI property PR_FORM_CATEGORY. + + + The MAPI property PR_FORM_CATEGORY. + + + + + The MAPI property PR_FORM_CATEGORY. + + + The MAPI property PR_FORM_CATEGORY. + + + + + The MAPI property PR_FORM_CATEGORY_SUB. + + + The MAPI property PR_FORM_CATEGORY_SUB. + + + + + The MAPI property PR_FORM_CATEGORY_SUB. + + + The MAPI property PR_FORM_CATEGORY_SUB. + + + + + The MAPI property PR_FORM_CLSID. + + + The MAPI property PR_FORM_CLSID. + + + + + The MAPI property PR_FORM_CONTACT_NAME. + + + The MAPI property PR_FORM_CONTACT_NAME. + + + + + The MAPI property PR_FORM_CONTACT_NAME. + + + The MAPI property PR_FORM_CONTACT_NAME. + + + + + The MAPI property PR_FORM_DESIGNER_GUID. + + + The MAPI property PR_FORM_DESIGNER_GUID. + + + + + The MAPI property PR_FORM_DESIGNER_NAME. + + + The MAPI property PR_FORM_DESIGNER_NAME. + + + + + The MAPI property PR_FORM_DESIGNER_NAME. + + + The MAPI property PR_FORM_DESIGNER_NAME. + + + + + The MAPI property PR_FORM_HIDDEN. + + + The MAPI property PR_FORM_HIDDEN. + + + + + The MAPI property PR_FORM_HOST_MAP. + + + The MAPI property PR_FORM_HOST_MAP. + + + + + The MAPI property PR_FORM_MESSAGE_BEHAVIOR. + + + The MAPI property PR_FORM_MESSAGE_BEHAVIOR. + + + + + The MAPI property PR_FORM_VERSION. + + + The MAPI property PR_FORM_VERSION. + + + + + The MAPI property PR_FORM_VERSION. + + + The MAPI property PR_FORM_VERSION. + + + + + The MAPI property PR_FTP_SITE. + + + The MAPI property PR_FTP_SITE. + + + + + The MAPI property PR_FTP_SITE. + + + The MAPI property PR_FTP_SITE. + + + + + The MAPI property PR_GENDER. + + + The MAPI property PR_GENDER. + + + + + The MAPI property PR_GENERATION. + + + The MAPI property PR_GENERATION. + + + + + The MAPI property PR_GENERATION. + + + The MAPI property PR_GENERATION. + + + + + The MAPI property PR_GIVEN_NAME. + + + The MAPI property PR_GIVEN_NAME. + + + + + The MAPI property PR_GIVEN_NAME. + + + The MAPI property PR_GIVEN_NAME. + + + + + The MAPI property PR_GOVERNMENT_ID_NUMBER. + + + The MAPI property PR_GOVERNMENT_ID_NUMBER. + + + + + The MAPI property PR_GOVERNMENT_ID_NUMBER. + + + The MAPI property PR_GOVERNMENT_ID_NUMBER. + + + + + The MAPI property PR_HASATTACH. + + + The MAPI property PR_HASATTACH. + + + + + The MAPI property PR_HEADER_FOLDER_ENTRYID. + + + The MAPI property PR_HEADER_FOLDER_ENTRYID. + + + + + The MAPI property PR_HOBBIES. + + + The MAPI property PR_HOBBIES. + + + + + The MAPI property PR_HOBBIES. + + + The MAPI property PR_HOBBIES. + + + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + The MAPI property PR_HOME2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_HOME_ADDRESS_CITY. + + + The MAPI property PR_HOME_ADDRESS_CITY. + + + + + The MAPI property PR_HOME_ADDRESS_CITY. + + + The MAPI property PR_HOME_ADDRESS_CITY. + + + + + The MAPI property PR_HOME_ADDRESS_COUNTRY. + + + The MAPI property PR_HOME_ADDRESS_COUNTRY. + + + + + The MAPI property PR_HOME_ADDRESS_COUNTRY. + + + The MAPI property PR_HOME_ADDRESS_COUNTRY. + + + + + The MAPI property PR_HOME_ADDRESS_POSTAL_CODE. + + + The MAPI property PR_HOME_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_HOME_ADDRESS_POSTAL_CODE. + + + The MAPI property PR_HOME_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_HOME_ADDRESS_POST_OFFICE_BOX. + + + The MAPI property PR_HOME_ADDRESS_POST_OFFICE_BOX. + + + + + The MAPI property PR_HOME_ADDRESS_POST_OFFICE_BOX. + + + The MAPI property PR_HOME_ADDRESS_POST_OFFICE_BOX. + + + + + The MAPI property PR_HOME_ADDRESS_STATE_OR_PROVINCE. + + + The MAPI property PR_HOME_ADDRESS_STATE_OR_PROVINCE. + + + + + The MAPI property PR_HOME_ADDRESS_STATE_OR_PROVINCE. + + + The MAPI property PR_HOME_ADDRESS_STATE_OR_PROVINCE. + + + + + The MAPI property PR_HOME_ADDRESS_STREET. + + + The MAPI property PR_HOME_ADDRESS_STREET. + + + + + The MAPI property PR_HOME_ADDRESS_STREET. + + + The MAPI property PR_HOME_ADDRESS_STREET. + + + + + The MAPI property PR_HOME_FAX_NUMBER. + + + The MAPI property PR_HOME_FAX_NUMBER. + + + + + The MAPI property PR_HOME_FAX_NUMBER. + + + The MAPI property PR_HOME_FAX_NUMBER. + + + + + The MAPI property PR_HOME_TELEPHONE_NUMBER. + + + The MAPI property PR_HOME_TELEPHONE_NUMBER. + + + + + The MAPI property PR_HOME_TELEPHONE_NUMBER. + + + The MAPI property PR_HOME_TELEPHONE_NUMBER. + + + + + The MAPI property PR_ICON. + + + The MAPI property PR_ICON. + + + + + The MAPI property PR_IDENTITY_DISPLAY. + + + The MAPI property PR_IDENTITY_DISPLAY. + + + + + The MAPI property PR_IDENTITY_DISPLAY. + + + The MAPI property PR_IDENTITY_DISPLAY. + + + + + The MAPI property PR_IDENTITY_ENTRYID. + + + The MAPI property PR_IDENTITY_ENTRYID. + + + + + The MAPI property PR_IDENTITY_SEARCH_KEY. + + + The MAPI property PR_IDENTITY_SEARCH_KEY. + + + + + The MAPI property PR_IMPLICIT_CONVERSION_PROHIBITED. + + + The MAPI property PR_IMPLICIT_CONVERSION_PROHIBITED. + + + + + The MAPI property PR_IMPORTANCE. + + + The MAPI property PR_IMPORTANCE. + + + + + The MAPI property PR_INCOMPLETE_COPY. + + + The MAPI property PR_INCOMPLETE_COPY. + + + + + The Internet mail override charset. + + + The Internet mail override charset. + + + + + The Internet mail override format. + + + The Internet mail override format. + + + + + The MAPI property PR_INITIAL_DETAILS_PANE. + + + The MAPI property PR_INITIAL_DETAILS_PANE. + + + + + The MAPI property PR_INITIALS. + + + The MAPI property PR_INITIALS. + + + + + The MAPI property PR_INITIALS. + + + The MAPI property PR_INITIALS. + + + + + The MAPI property PR_IN_REPLY_TO_ID. + + + The MAPI property PR_IN_REPLY_TO_ID. + + + + + The MAPI property PR_IN_REPLY_TO_ID. + + + The MAPI property PR_IN_REPLY_TO_ID. + + + + + The MAPI property PR_INSTANCE_KEY. + + + The MAPI property PR_INSTANCE_KEY. + + + + + The MAPI property PR_INTERNET_APPROVED. + + + The MAPI property PR_INTERNET_APPROVED. + + + + + The MAPI property PR_INTERNET_APPROVED. + + + The MAPI property PR_INTERNET_APPROVED. + + + + + The MAPI property PR_INTERNET_ARTICLE_NUMBER. + + + The MAPI property PR_INTERNET_ARTICLE_NUMBER. + + + + + The MAPI property PR_INTERNET_CONTROL. + + + The MAPI property PR_INTERNET_CONTROL. + + + + + The MAPI property PR_INTERNET_CONTROL. + + + The MAPI property PR_INTERNET_CONTROL. + + + + + The MAPI property PR_INTERNET_CPID. + + + The MAPI property PR_INTERNET_CPID. + + + + + The MAPI property PR_INTERNET_DISTRIBUTION. + + + The MAPI property PR_INTERNET_DISTRIBUTION. + + + + + The MAPI property PR_INTERNET_DISTRIBUTION. + + + The MAPI property PR_INTERNET_DISTRIBUTION. + + + + + The MAPI property PR_INTERNET_FOLLOWUP_TO. + + + The MAPI property PR_INTERNET_FOLLOWUP_TO. + + + + + The MAPI property PR_INTERNET_FOLLOWUP_TO. + + + The MAPI property PR_INTERNET_FOLLOWUP_TO. + + + + + The MAPI property PR_INTERNET_LINES. + + + The MAPI property PR_INTERNET_LINES. + + + + + The MAPI property PR_INTERNET_MESSAGE_ID. + + + The MAPI property PR_INTERNET_MESSAGE_ID. + + + + + The MAPI property PR_INTERNET_MESSAGE_ID. + + + The MAPI property PR_INTERNET_MESSAGE_ID. + + + + + The MAPI property PR_INTERNET_NEWSGROUPS. + + + The MAPI property PR_INTERNET_NEWSGROUPS. + + + + + The MAPI property PR_INTERNET_NEWSGROUPS. + + + The MAPI property PR_INTERNET_NEWSGROUPS. + + + + + The MAPI property PR_INTERNET_NNTP_PATH. + + + The MAPI property PR_INTERNET_NNTP_PATH. + + + + + The MAPI property PR_INTERNET_NNTP_PATH. + + + The MAPI property PR_INTERNET_NNTP_PATH. + + + + + The MAPI property PR_INTERNET_ORGANIZATION. + + + The MAPI property PR_INTERNET_ORGANIZATION. + + + + + The MAPI property PR_INTERNET_ORGANIZATION. + + + The MAPI property PR_INTERNET_ORGANIZATION. + + + + + The MAPI property PR_INTERNET_PRECEDENCE. + + + The MAPI property PR_INTERNET_PRECEDENCE. + + + + + The MAPI property PR_INTERNET_PRECEDENCE. + + + The MAPI property PR_INTERNET_PRECEDENCE. + + + + + The MAPI property PR_INTERNET_REFERENCES. + + + The MAPI property PR_INTERNET_REFERENCES. + + + + + The MAPI property PR_INTERNET_REFERENCES. + + + The MAPI property PR_INTERNET_REFERENCES. + + + + + The MAPI property PR_IPM_ID. + + + The MAPI property PR_IPM_ID. + + + + + The MAPI property PR_IPM_OUTBOX_ENTRYID. + + + The MAPI property PR_IPM_OUTBOX_ENTRYID. + + + + + The MAPI property PR_IPM_OUTBOX_SEARCH_KEY. + + + The MAPI property PR_IPM_OUTBOX_SEARCH_KEY. + + + + + The MAPI property PR_IPM_RETURN_REQUESTED. + + + The MAPI property PR_IPM_RETURN_REQUESTED. + + + + + The MAPI property PR_IPM_SENTMAIL_ENTRYID. + + + The MAPI property PR_IPM_SENTMAIL_ENTRYID. + + + + + The MAPI property PR_IPM_SENTMAIL_SEARCH_KEY. + + + The MAPI property PR_IPM_SENTMAIL_SEARCH_KEY. + + + + + The MAPI property PR_IPM_SUBTREE_ENTRYID. + + + The MAPI property PR_IPM_SUBTREE_ENTRYID. + + + + + The MAPI property PR_IPM_SUBTREE_SEARCH_KEY. + + + The MAPI property PR_IPM_SUBTREE_SEARCH_KEY. + + + + + The MAPI property PR_IPM_WASTEBASKET_ENTRYID. + + + The MAPI property PR_IPM_WASTEBASKET_ENTRYID. + + + + + The MAPI property PR_IPM_WASTEBASKET_SEARCH_KEY. + + + The MAPI property PR_IPM_WASTEBASKET_SEARCH_KEY. + + + + + The MAPI property PR_ISDN_NUMBER. + + + The MAPI property PR_ISDN_NUMBER. + + + + + The MAPI property PR_ISDN_NUMBER. + + + The MAPI property PR_ISDN_NUMBER. + + + + + The MAPI property PR_KEYWORD. + + + The MAPI property PR_KEYWORD. + + + + + The MAPI property PR_KEYWORD. + + + The MAPI property PR_KEYWORD. + + + + + The MAPI property PR_LANGUAGE. + + + The MAPI property PR_LANGUAGE. + + + + + The MAPI property PR_LANGUAGE. + + + The MAPI property PR_LANGUAGE. + + + + + The MAPI property PR_LANGUAGES. + + + The MAPI property PR_LANGUAGES. + + + + + The MAPI property PR_LANGUAGES. + + + The MAPI property PR_LANGUAGES. + + + + + The MAPI property PR_LAST_MODIFICATION_TIME. + + + The MAPI property PR_LAST_MODIFICATION_TIME. + + + + + The MAPI property PR_LATEST_DELIVERY_TIME. + + + The MAPI property PR_LATEST_DELIVERY_TIME. + + + + + The MAPI property PR_LIST_HELP. + + + The MAPI property PR_LIST_HELP. + + + + + The MAPI property PR_LIST_HELP. + + + The MAPI property PR_LIST_HELP. + + + + + The MAPI property PR_LIST_SUBSCRIBE. + + + The MAPI property PR_LIST_SUBSCRIBE. + + + + + The MAPI property PR_LIST_SUBSCRIBE. + + + The MAPI property PR_LIST_SUBSCRIBE. + + + + + The MAPI property PR_LIST_UNSUBSCRIBE. + + + The MAPI property PR_LIST_UNSUBSCRIBE. + + + + + The MAPI property PR_LIST_UNSUBSCRIBE. + + + The MAPI property PR_LIST_UNSUBSCRIBE. + + + + + The MAPI property PR_LOCALITY. + + + The MAPI property PR_LOCALITY. + + + + + The MAPI property PR_LOCALITY. + + + The MAPI property PR_LOCALITY. + + + + + The MAPI property PR_LOCATION. + + + The MAPI property PR_LOCATION. + + + + + The MAPI property PR_LOCATION. + + + The MAPI property PR_LOCATION. + + + + + The MAPI property PR_LOCK_BRANCH_ID. + + + The MAPI property PR_LOCK_BRANCH_ID. + + + + + The MAPI property PR_LOCK_DEPTH. + + + The MAPI property PR_LOCK_DEPTH. + + + + + The MAPI property PR_LOCK_ENLISTMENT_CONTEXT. + + + The MAPI property PR_LOCK_ENLISTMENT_CONTEXT. + + + + + The MAPI property PR_LOCK_EXPIRY_TIME. + + + The MAPI property PR_LOCK_EXPIRY_TIME. + + + + + The MAPI property PR_LOCK_PERSISTENT. + + + The MAPI property PR_LOCK_PERSISTENT. + + + + + The MAPI property PR_LOCK_RESOURCE_DID. + + + The MAPI property PR_LOCK_RESOURCE_DID. + + + + + The MAPI property PR_LOCK_RESOURCE_FID. + + + The MAPI property PR_LOCK_RESOURCE_FID. + + + + + The MAPI property PR_LOCK_RESOURCE_MID. + + + The MAPI property PR_LOCK_RESOURCE_MID. + + + + + The MAPI property PR_LOCK_SCOPE. + + + The MAPI property PR_LOCK_SCOPE. + + + + + The MAPI property PR_LOCK_TIMEOUT. + + + The MAPI property PR_LOCK_TIMEOUT. + + + + + The MAPI property PR_LOCK_TYPE. + + + The MAPI property PR_LOCK_TYPE. + + + + + The MAPI property PR_MAIL_PERMISSION. + + + The MAPI property PR_MAIL_PERMISSION. + + + + + The MAPI property PR_MANAGER_NAME. + + + The MAPI property PR_MANAGER_NAME. + + + + + The MAPI property PR_MANAGER_NAME. + + + The MAPI property PR_MANAGER_NAME. + + + + + The MAPI property PR_MAPPING_SIGNATURE. + + + The MAPI property PR_MAPPING_SIGNATURE. + + + + + The MAPI property PR_MDB_PROVIDER. + + + The MAPI property PR_MDB_PROVIDER. + + + + + The MAPI property PR_MESSAGE_ATTACHMENTS. + + + The MAPI property PR_MESSAGE_ATTACHMENTS. + + + + + The MAPI property PR_MESSAGE_CC_ME. + + + The MAPI property PR_MESSAGE_CC_ME. + + + + + The MAPI property PR_MESSAGE_CLASS. + + + The MAPI property PR_MESSAGE_CLASS. + + + + + The MAPI property PR_MESSAGE_CLASS. + + + The MAPI property PR_MESSAGE_CLASS. + + + + + The MAPI property PR_MESSAGE_CODEPAGE. + + + The MAPI property PR_MESSAGE_CODEPAGE. + + + + + The MAPI property PR_MESSAGE_DELIVERY_ID. + + + The MAPI property PR_MESSAGE_DELIVERY_ID. + + + + + The MAPI property PR_MESSAGE_DELIVERY_TIME. + + + The MAPI property PR_MESSAGE_DELIVERY_TIME. + + + + + The MAPI property PR_MESSAGE_DOWNLOAD_TIME. + + + The MAPI property PR_MESSAGE_DOWNLOAD_TIME. + + + + + The MAPI property PR_MESSAGE_FLAGS. + + + The MAPI property PR_MESSAGE_FLAGS. + + + + + The MAPI property PR_MESSAGE_RECIPIENTS. + + + The MAPI property PR_MESSAGE_RECIPIENTS. + + + + + The MAPI property PR_MESSAGE_RECIP_ME. + + + The MAPI property PR_MESSAGE_RECIP_ME. + + + + + The MAPI property PR_MESSAGE_SECURITY_LABEL. + + + The MAPI property PR_MESSAGE_SECURITY_LABEL. + + + + + The MAPI property PR_MESSAGE_SIZE. + + + The MAPI property PR_MESSAGE_SIZE. + + + + + The MAPI property PR_MESSAGE_SUBMISSION_ID. + + + The MAPI property PR_MESSAGE_SUBMISSION_ID. + + + + + The MAPI property PR_MESSAGE_TOKEN. + + + The MAPI property PR_MESSAGE_TOKEN. + + + + + The MAPI property PR_MESSAGE_TO_ME. + + + The MAPI property PR_MESSAGE_TO_ME. + + + + + The MAPI property PR_MHS_COMMON_NAME. + + + The MAPI property PR_MHS_COMMON_NAME. + + + + + The MAPI property PR_MHS_COMMON_NAME. + + + The MAPI property PR_MHS_COMMON_NAME. + + + + + The MAPI property PR_MIDDLE_NAME. + + + The MAPI property PR_MIDDLE_NAME. + + + + + The MAPI property PR_MIDDLE_NAME. + + + The MAPI property PR_MIDDLE_NAME. + + + + + The MAPI property PR_MINI_ICON. + + + The MAPI property PR_MINI_ICON. + + + + + The MAPI property PR_MOBILE_TELEPHONE_NUMBER. + + + The MAPI property PR_MOBILE_TELEPHONE_NUMBER. + + + + + The MAPI property PR_MOBILE_TELEPHONE_NUMBER. + + + The MAPI property PR_MOBILE_TELEPHONE_NUMBER. + + + + + The MAPI property PR_MODIFY_VERSION. + + + The MAPI property PR_MODIFY_VERSION. + + + + + The MAPI property PR_MSG_STATUS. + + + The MAPI property PR_MSG_STATUS. + + + + + The MAPI property PR_NDR_DIAG_CODE. + + + The MAPI property PR_NDR_DIAG_CODE. + + + + + The MAPI property PR_NDR_REASON_CODE. + + + The MAPI property PR_NDR_REASON_CODE. + + + + + The MAPI property PR_NDR_STATUS_CODE. + + + The MAPI property PR_NDR_STATUS_CODE. + + + + + The MAPI property PR_NEWSGROUP_NAME. + + + The MAPI property PR_NEWSGROUP_NAME. + + + + + The MAPI property PR_NEWSGROUP_NAME. + + + The MAPI property PR_NEWSGROUP_NAME. + + + + + The MAPI property PR_NICKNAME. + + + The MAPI property PR_NICKNAME. + + + + + The MAPI property PR_NICKNAME. + + + The MAPI property PR_NICKNAME. + + + + + The MAPI property PR_NNTP_XREF. + + + The MAPI property PR_NNTP_XREF. + + + + + The MAPI property PR_NNTP_XREF. + + + The MAPI property PR_NNTP_XREF. + + + + + The MAPI property PR_NON_RECEIPT_NOTIFICATION_REQUESTED. + + + The MAPI property PR_NON_RECEIPT_NOTIFICATION_REQUESTED. + + + + + The MAPI property PR_NON_RECEIPT_REASON. + + + The MAPI property PR_NON_RECEIPT_REASON. + + + + + The MAPI property PR_NORMALIZED_SUBJECT. + + + The MAPI property PR_NORMALIZED_SUBJECT. + + + + + The MAPI property PR_NORMALIZED_SUBJECT. + + + The MAPI property PR_NORMALIZED_SUBJECT. + + + + + The MAPI property PR_NT_SECURITY_DESCRIPTOR. + + + The MAPI property PR_NT_SECURITY_DESCRIPTOR. + + + + + The MAPI property PR_NULL. + + + The MAPI property PR_NULL. + + + + + The MAPI property PR_OBJECT_TYPE. + + + The MAPI property PR_OBJECT_TYPE. + + + + + The MAPI property PR_OBSOLETE_IPMS. + + + The MAPI property PR_OBSOLETE_IPMS. + + + + + The MAPI property PR_OFFICE2_TELEPHONE_NUMBER. + + + The MAPI property PR_OFFICE2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OFFICE2_TELEPHONE_NUMBER. + + + The MAPI property PR_OFFICE2_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OFFICE_LOCATION. + + + The MAPI property PR_OFFICE_LOCATION. + + + + + The MAPI property PR_OFFICE_LOCATION. + + + The MAPI property PR_OFFICE_LOCATION. + + + + + The MAPI property PR_OFFICE_TELEPHONE_NUMBER. + + + The MAPI property PR_OFFICE_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OFFICE_TELEPHONE_NUMBER. + + + The MAPI property PR_OFFICE_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OOF_REPLY_TYPE. + + + The MAPI property PR_OOF_REPLY_TYPE. + + + + + The MAPI property PR_ORGANIZATIONAL_ID_NUMBER. + + + The MAPI property PR_ORGANIZATIONAL_ID_NUMBER. + + + + + The MAPI property PR_ORGANIZATIONAL_ID_NUMBER. + + + The MAPI property PR_ORGANIZATIONAL_ID_NUMBER. + + + + + The MAPI property PR_ORIG_ENTRYID. + + + The MAPI property PR_ORIG_ENTRYID. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_ADDRTYPE. + + + The MAPI property PR_ORIGINAL_AUTHOR_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_ADDRTYPE. + + + The MAPI property PR_ORIGINAL_AUTHOR_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS. + + + The MAPI property PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS. + + + The MAPI property PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_ENTRYID. + + + The MAPI property PR_ORIGINAL_AUTHOR_ENTRYID. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_NAME. + + + The MAPI property PR_ORIGINAL_AUTHOR_NAME. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_NAME. + + + The MAPI property PR_ORIGINAL_AUTHOR_NAME. + + + + + The MAPI property PR_ORIGINAL_AUTHOR_SEARCH_KEY. + + + The MAPI property PR_ORIGINAL_AUTHOR_SEARCH_KEY. + + + + + The MAPI property PR_ORIGINAL_DELIVERY_TIME. + + + The MAPI property PR_ORIGINAL_DELIVERY_TIME. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_BCC. + + + The MAPI property PR_ORIGINAL_DISPLAY_BCC. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_BCC. + + + The MAPI property PR_ORIGINAL_DISPLAY_BCC. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_CC. + + + The MAPI property PR_ORIGINAL_DISPLAY_CC. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_CC. + + + The MAPI property PR_ORIGINAL_DISPLAY_CC. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_NAME. + + + The MAPI property PR_ORIGINAL_DISPLAY_NAME. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_NAME. + + + The MAPI property PR_ORIGINAL_DISPLAY_NAME. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_TO. + + + The MAPI property PR_ORIGINAL_DISPLAY_TO. + + + + + The MAPI property PR_ORIGINAL_DISPLAY_TO. + + + The MAPI property PR_ORIGINAL_DISPLAY_TO. + + + + + The MAPI property PR_ORIGINAL_EITS. + + + The MAPI property PR_ORIGINAL_EITS. + + + + + The MAPI property PR_ORIGINAL_ENTRYID. + + + The MAPI property PR_ORIGINAL_ENTRYID. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE. + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE. + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS. + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS. + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_ENTRYID. + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIP_ENTRYID. + + + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIPIENT_NAME. + + + The MAPI property PR_ORIGINALLY_INTENDED_RECIPIENT_NAME. + + + + + The MAPI property PR_ORIGINAL_SEARCH_KEY. + + + The MAPI property PR_ORIGINAL_SEARCH_KEY. + + + + + The MAPI property PR_ORIGINAL_SENDER_ADDRTYPE. + + + The MAPI property PR_ORIGINAL_SENDER_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_SENDER_ADDRTYPE. + + + The MAPI property PR_ORIGINAL_SENDER_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_SENDER_EMAIL_ADDRESS. + + + The MAPI property PR_ORIGINAL_SENDER_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_SENDER_EMAIL_ADDRESS. + + + The MAPI property PR_ORIGINAL_SENDER_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_SENDER_ENTRYID. + + + The MAPI property PR_ORIGINAL_SENDER_ENTRYID. + + + + + The MAPI property PR_ORIGINAL_SENDER_NAME. + + + The MAPI property PR_ORIGINAL_SENDER_NAME. + + + + + The MAPI property PR_ORIGINAL_SENDER_NAME. + + + The MAPI property PR_ORIGINAL_SENDER_NAME. + + + + + The MAPI property PR_ORIGINAL_SENDER_SEARCH_KEY. + + + The MAPI property PR_ORIGINAL_SENDER_SEARCH_KEY. + + + + + The MAPI property PR_ORIGINAL_SENSITIVITY. + + + The MAPI property PR_ORIGINAL_SENSITIVITY. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE. + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE. + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS. + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS. + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_ENTRYID. + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_ENTRYID. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_NAME. + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_NAME. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_NAME. + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_NAME. + + + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY. + + + The MAPI property PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY. + + + + + The MAPI property PR_ORIGINAL_SUBJECT. + + + The MAPI property PR_ORIGINAL_SUBJECT. + + + + + The MAPI property PR_ORIGINAL_SUBJECT. + + + The MAPI property PR_ORIGINAL_SUBJECT. + + + + + The MAPI property PR_ORIGINAL_SUBMIT_TIME. + + + The MAPI property PR_ORIGINAL_SUBMIT_TIME. + + + + + The MAPI property PR_ORIGINATING_MTA_CERTIFICATE. + + + The MAPI property PR_ORIGINATING_MTA_CERTIFICATE. + + + + + The MAPI property PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY. + + + The MAPI property PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY. + + + + + The MAPI property PR_ORIGINATOR_CERTIFICATE. + + + The MAPI property PR_ORIGINATOR_CERTIFICATE. + + + + + The MAPI property PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED. + + + The MAPI property PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED. + + + + + The MAPI property PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED. + + + The MAPI property PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED. + + + + + The MAPI property PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT. + + + The MAPI property PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT. + + + + + The MAPI property PR_ORIGINATOR_RETURN_ADDRESS. + + + The MAPI property PR_ORIGINATOR_RETURN_ADDRESS. + + + + + The MAPI property PR_ORIGIN_CHECK. + + + The MAPI property PR_ORIGIN_CHECK. + + + + + The MAPI property PR_ORIG_MESSAGE_CLASS. + + + The MAPI property PR_ORIG_MESSAGE_CLASS. + + + + + The MAPI property PR_ORIG_MESSAGE_CLASS. + + + The MAPI property PR_ORIG_MESSAGE_CLASS. + + + + + The MAPI property PR_OTHER_ADDRESS_CITY. + + + The MAPI property PR_OTHER_ADDRESS_CITY. + + + + + The MAPI property PR_OTHER_ADDRESS_CITY. + + + The MAPI property PR_OTHER_ADDRESS_CITY. + + + + + The MAPI property PR_OTHER_ADDRESS_COUNTRY. + + + The MAPI property PR_OTHER_ADDRESS_COUNTRY. + + + + + The MAPI property PR_OTHER_ADDRESS_COUNTRY. + + + The MAPI property PR_OTHER_ADDRESS_COUNTRY. + + + + + The MAPI property PR_OTHER_ADDRESS_POSTAL_CODE. + + + The MAPI property PR_OTHER_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_OTHER_ADDRESS_POSTAL_CODE. + + + The MAPI property PR_OTHER_ADDRESS_POSTAL_CODE. + + + + + The MAPI property PR_OTHER_ADDRESS_POST_OFFICE_BOX. + + + The MAPI property PR_OTHER_ADDRESS_POST_OFFICE_BOX. + + + + + The MAPI property PR_OTHER_ADDRESS_POST_OFFICE_BOX. + + + The MAPI property PR_OTHER_ADDRESS_POST_OFFICE_BOX. + + + + + The MAPI property PR_OTHER_ADDRESS_STATE_OR_PROVINCE. + + + The MAPI property PR_OTHER_ADDRESS_STATE_OR_PROVINCE. + + + + + The MAPI property PR_OTHER_ADDRESS_STATE_OR_PROVINCE. + + + The MAPI property PR_OTHER_ADDRESS_STATE_OR_PROVINCE. + + + + + The MAPI property PR_OTHER_ADDRESS_STREET. + + + The MAPI property PR_OTHER_ADDRESS_STREET. + + + + + The MAPI property PR_OTHER_ADDRESS_STREET. + + + The MAPI property PR_OTHER_ADDRESS_STREET. + + + + + The MAPI property PR_OTHER_TELEPHONE_NUMBER. + + + The MAPI property PR_OTHER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OTHER_TELEPHONE_NUMBER. + + + The MAPI property PR_OTHER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_OWNER_APPT_ID. + + + The MAPI property PR_OWNER_APPT_ID. + + + + + The MAPI property PR_OWN_STORE_ENTRYID. + + + The MAPI property PR_OWN_STORE_ENTRYID. + + + + + The MAPI property PR_PAGER_TELEPHONE_NUMBER. + + + The MAPI property PR_PAGER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_PAGER_TELEPHONE_NUMBER. + + + The MAPI property PR_PAGER_TELEPHONE_NUMBER. + + + + + The MAPI property PR_PARENT_DISPLAY. + + + The MAPI property PR_PARENT_DISPLAY. + + + + + The MAPI property PR_PARENT_DISPLAY. + + + The MAPI property PR_PARENT_DISPLAY. + + + + + The MAPI property PR_PARENT_ENTRYID. + + + The MAPI property PR_PARENT_ENTRYID. + + + + + The MAPI property PR_PARENT_KEY. + + + The MAPI property PR_PARENT_KEY. + + + + + The MAPI property PR_PERSONAL_HOME_PAGE. + + + The MAPI property PR_PERSONAL_HOME_PAGE. + + + + + The MAPI property PR_PERSONAL_HOME_PAGE. + + + The MAPI property PR_PERSONAL_HOME_PAGE. + + + + + The MAPI property PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY. + + + The MAPI property PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY. + + + + + The MAPI property PR_PHYSICAL_DELIVERY_MODE. + + + The MAPI property PR_PHYSICAL_DELIVERY_MODE. + + + + + The MAPI property PR_PHYSICAL_DELIVERY_REPORT_REQUEST. + + + The MAPI property PR_PHYSICAL_DELIVERY_REPORT_REQUEST. + + + + + The MAPI property PR_PHYSICAL_FORWARDING_ADDRESS. + + + The MAPI property PR_PHYSICAL_FORWARDING_ADDRESS. + + + + + The MAPI property PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED. + + + The MAPI property PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED. + + + + + The MAPI property PR_PHYSICAL_FORWARDING_PROHIBITED. + + + The MAPI property PR_PHYSICAL_FORWARDING_PROHIBITED. + + + + + The MAPI property PR_PHYSICAL_RENDITION_ATTRIBUTES. + + + The MAPI property PR_PHYSICAL_RENDITION_ATTRIBUTES. + + + + + The MAPI property PR_POSTAL_ADDRESS. + + + The MAPI property PR_POSTAL_ADDRESS. + + + + + The MAPI property PR_POSTAL_ADDRESS. + + + The MAPI property PR_POSTAL_ADDRESS. + + + + + The MAPI property PR_POSTAL_CODE. + + + The MAPI property PR_POSTAL_CODE. + + + + + The MAPI property PR_POSTAL_CODE. + + + The MAPI property PR_POSTAL_CODE. + + + + + The MAPI property PR_POST_FOLDER_ENTRIES. + + + The MAPI property PR_POST_FOLDER_ENTRIES. + + + + + The MAPI property PR_POST_FOLDER_NAMES. + + + The MAPI property PR_POST_FOLDER_NAMES. + + + + + The MAPI property PR_POST_FOLDER_NAMES. + + + The MAPI property PR_POST_FOLDER_NAMES. + + + + + The MAPI property PR_POST_OFFICE_BOX. + + + The MAPI property PR_POST_OFFICE_BOX. + + + + + The MAPI property PR_POST_OFFICE_BOX. + + + The MAPI property PR_POST_OFFICE_BOX. + + + + + The MAPI property PR_POST_REPLY_DENIED. + + + The MAPI property PR_POST_REPLY_DENIED. + + + + + The MAPI property PR_POST_REPLY_FOLDER_ENTRIES. + + + The MAPI property PR_POST_REPLY_FOLDER_ENTRIES. + + + + + The MAPI property PR_POST_REPLY_FOLDER_NAMES. + + + The MAPI property PR_POST_REPLY_FOLDER_NAMES. + + + + + The MAPI property PR_POST_REPLY_FOLDER_NAMES. + + + The MAPI property PR_POST_REPLY_FOLDER_NAMES. + + + + + The MAPI property PR_PREFERRED_BY_NAME. + + + The MAPI property PR_PREFERRED_BY_NAME. + + + + + The MAPI property PR_PREFERRED_BY_NAME. + + + The MAPI property PR_PREFERRED_BY_NAME. + + + + + The MAPI property PR_PREPROCESS. + + + The MAPI property PR_PREPROCESS. + + + + + The MAPI property PR_PRIMARY_CAPABILITY. + + + The MAPI property PR_PRIMARY_CAPABILITY. + + + + + The MAPI property PR_PRIMARY_FAX_NUMBER. + + + The MAPI property PR_PRIMARY_FAX_NUMBER. + + + + + The MAPI property PR_PRIMARY_FAX_NUMBER. + + + The MAPI property PR_PRIMARY_FAX_NUMBER. + + + + + The MAPI property PR_PRIMARY_TELEPHONE_NUMBER. + + + The MAPI property PR_PRIMARY_TELEPHONE_NUMBER. + + + + + The MAPI property PR_PRIMARY_TELEPHONE_NUMBER. + + + The MAPI property PR_PRIMARY_TELEPHONE_NUMBER. + + + + + The MAPI property PR_PRIORITY. + + + The MAPI property PR_PRIORITY. + + + + + The MAPI property PR_PROFESSION. + + + The MAPI property PR_PROFESSION. + + + + + The MAPI property PR_PROFESSION. + + + The MAPI property PR_PROFESSION. + + + + + The MAPI property PR_PROFILE_NAME. + + + The MAPI property PR_PROFILE_NAME. + + + + + The MAPI property PR_PROFILE_NAME. + + + The MAPI property PR_PROFILE_NAME. + + + + + The MAPI property PR_PROOF_OF_DELIVERY. + + + The MAPI property PR_PROOF_OF_DELIVERY. + + + + + The MAPI property PR_PROOF_OF_DELIVERY_REQUESTED. + + + The MAPI property PR_PROOF_OF_DELIVERY_REQUESTED. + + + + + The MAPI property PR_PROOF_OF_SUBMISSION. + + + The MAPI property PR_PROOF_OF_SUBMISSION. + + + + + The MAPI property PR_PROOF_OF_SUBMISSION_REQUESTED. + + + The MAPI property PR_PROOF_OF_SUBMISSION_REQUESTED. + + + + + The MAPI property PR_PROVIDER_DISPLAY. + + + The MAPI property PR_PROVIDER_DISPLAY. + + + + + The MAPI property PR_PROVIDER_DISPLAY. + + + The MAPI property PR_PROVIDER_DISPLAY. + + + + + The MAPI property PR_PROVIDER_DLL_NAME. + + + The MAPI property PR_PROVIDER_DLL_NAME. + + + + + The MAPI property PR_PROVIDER_DLL_NAME. + + + The MAPI property PR_PROVIDER_DLL_NAME. + + + + + The MAPI property PR_PROVIDER_ORDINAL. + + + The MAPI property PR_PROVIDER_ORDINAL. + + + + + The MAPI property PR_PROVIDER_SUBMIT_TIME. + + + The MAPI property PR_PROVIDER_SUBMIT_TIME. + + + + + The MAPI property PR_PROVIDER_UID. + + + The MAPI property PR_PROVIDER_UID. + + + + + The MAPI property PR_PUID. + + + The MAPI property PR_PUID. + + + + + The MAPI property PR_RADIO_TELEPHONE_NUMBER. + + + The MAPI property PR_RADIO_TELEPHONE_NUMBER. + + + + + The MAPI property PR_RADIO_TELEPHONE_NUMBER. + + + The MAPI property PR_RADIO_TELEPHONE_NUMBER. + + + + + The MAPI property PR_RCVD_REPRESENTING_ADDRTYPE. + + + The MAPI property PR_RCVD_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_RCVD_REPRESENTING_ADDRTYPE. + + + The MAPI property PR_RCVD_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_RCVD_REPRESENTING_EMAIL_ADDRESS. + + + The MAPI property PR_RCVD_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_RCVD_REPRESENTING_EMAIL_ADDRESS. + + + The MAPI property PR_RCVD_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_RCVD_REPRESENTING_ENTRYID. + + + The MAPI property PR_RCVD_REPRESENTING_ENTRYID. + + + + + The MAPI property PR_RCVD_REPRESENTING_NAME. + + + The MAPI property PR_RCVD_REPRESENTING_NAME. + + + + + The MAPI property PR_RCVD_REPRESENTING_NAME. + + + The MAPI property PR_RCVD_REPRESENTING_NAME. + + + + + The MAPI property PR_RCVD_REPRESENTING_SEARCH_KEY. + + + The MAPI property PR_RCVD_REPRESENTING_SEARCH_KEY. + + + + + The MAPI property PR_READ_RECEIPT_ENTRYID. + + + The MAPI property PR_READ_RECEIPT_ENTRYID. + + + + + The MAPI property PR_READ_RECEIPT_REQUESTED. + + + The MAPI property PR_READ_RECEIPT_REQUESTED. + + + + + The MAPI property PR_READ_RECEIPT_SEARCH_KEY. + + + The MAPI property PR_READ_RECEIPT_SEARCH_KEY. + + + + + The MAPI property PR_RECEIPT_TIME. + + + The MAPI property PR_RECEIPT_TIME. + + + + + The MAPI property PR_RECEIVED_BY_ADDRTYPE. + + + The MAPI property PR_RECEIVED_BY_ADDRTYPE. + + + + + The MAPI property PR_RECEIVED_BY_ADDRTYPE. + + + The MAPI property PR_RECEIVED_BY_ADDRTYPE. + + + + + The MAPI property PR_RECEIVED_BY_EMAIL_ADDRESS. + + + The MAPI property PR_RECEIVED_BY_EMAIL_ADDRESS. + + + + + The MAPI property PR_RECEIVED_BY_EMAIL_ADDRESS. + + + The MAPI property PR_RECEIVED_BY_EMAIL_ADDRESS. + + + + + The MAPI property PR_RECEIVED_BY_ENTRYID. + + + The MAPI property PR_RECEIVED_BY_ENTRYID. + + + + + The MAPI property PR_RECEIVED_BY_NAME. + + + The MAPI property PR_RECEIVED_BY_NAME. + + + + + The MAPI property PR_RECEIVED_BY_NAME. + + + The MAPI property PR_RECEIVED_BY_NAME. + + + + + The MAPI property PR_RECEIVED_BY_SEARCH_KEY. + + + The MAPI property PR_RECEIVED_BY_SEARCH_KEY. + + + + + The MAPI property PR_RECEIVE_FOLDER_SETTINGS. + + + The MAPI property PR_RECEIVE_FOLDER_SETTINGS. + + + + + The MAPI property PR_RECIPIENT_CERTIFICATE. + + + The MAPI property PR_RECIPIENT_CERTIFICATE. + + + + + The MAPI property PR_RECIPIENT_NUMBER_FOR_ADVICE. + + + The MAPI property PR_RECIPIENT_NUMBER_FOR_ADVICE. + + + + + The MAPI property PR_RECIPIENT_NUMBER_FOR_ADVICE. + + + The MAPI property PR_RECIPIENT_NUMBER_FOR_ADVICE. + + + + + The MAPI property PR_RECIPIENT_REASSIGNMENT_PROHIBITED. + + + The MAPI property PR_RECIPIENT_REASSIGNMENT_PROHIBITED. + + + + + The MAPI property PR_RECIPIENT_STATUS. + + + The MAPI property PR_RECIPIENT_STATUS. + + + + + The MAPI property PR_RECIPIENT_TYPE. + + + The MAPI property PR_RECIPIENT_TYPE. + + + + + The MAPI property PR_REDIRECTION_HISTORY. + + + The MAPI property PR_REDIRECTION_HISTORY. + + + + + The MAPI property PR_REFERRED_BY_NAME. + + + The MAPI property PR_REFERRED_BY_NAME. + + + + + The MAPI property PR_REFERRED_BY_NAME. + + + The MAPI property PR_REFERRED_BY_NAME. + + + + + The MAPI property PR_REGISTERED_MAIL_TYPE. + + + The MAPI property PR_REGISTERED_MAIL_TYPE. + + + + + The MAPI property PR_RELATED_IPMS. + + + The MAPI property PR_RELATED_IPMS. + + + + + The MAPI property PR_REMOTE_PROGRESS. + + + The MAPI property PR_REMOTE_PROGRESS. + + + + + The MAPI property PR_REMOTE_PROGRESS_TEXT. + + + The MAPI property PR_REMOTE_PROGRESS_TEXT. + + + + + The MAPI property PR_REMOTE_PROGRESS_TEXT. + + + The MAPI property PR_REMOTE_PROGRESS_TEXT. + + + + + The MAPI property PR_REMOTE_VALIDATE_OK. + + + The MAPI property PR_REMOTE_VALIDATE_OK. + + + + + The MAPI property PR_RENDERING_POSITION. + + + The MAPI property PR_RENDERING_POSITION. + + + + + The MAPI property PR_REPLY_RECIPIENT_ENTRIES. + + + The MAPI property PR_REPLY_RECIPIENT_ENTRIES. + + + + + The MAPI property PR_REPLY_RECIPIENT_NAMES. + + + The MAPI property PR_REPLY_RECIPIENT_NAMES. + + + + + The MAPI property PR_REPLY_RECIPIENT_NAMES. + + + The MAPI property PR_REPLY_RECIPIENT_NAMES. + + + + + The MAPI property PR_REPLY_REQUESTED. + + + The MAPI property PR_REPLY_REQUESTED. + + + + + The MAPI property PR_REPLY_TIME. + + + The MAPI property PR_REPLY_TIME. + + + + + The MAPI property PR_REPORT_ENTRYID. + + + The MAPI property PR_REPORT_ENTRYID. + + + + + The MAPI property PR_REPORTING_DL_NAME. + + + The MAPI property PR_REPORTING_DL_NAME. + + + + + The MAPI property PR_REPORTING_MTA_CERTIFICATE. + + + The MAPI property PR_REPORTING_MTA_CERTIFICATE. + + + + + The MAPI property PR_REPORT_NAME. + + + The MAPI property PR_REPORT_NAME. + + + + + The MAPI property PR_REPORT_NAME. + + + The MAPI property PR_REPORT_NAME. + + + + + The MAPI property PR_REPORT_SEARCH_KEY. + + + The MAPI property PR_REPORT_SEARCH_KEY. + + + + + The MAPI property PR_REPORT_TAG. + + + The MAPI property PR_REPORT_TAG. + + + + + The MAPI property PR_REPORT_TEXT. + + + The MAPI property PR_REPORT_TEXT. + + + + + The MAPI property PR_REPORT_TEXT. + + + The MAPI property PR_REPORT_TEXT. + + + + + The MAPI property PR_REPORT_TIME. + + + The MAPI property PR_REPORT_TIME. + + + + + The MAPI property PR_REQUESTED_DELIVERY_METHOD. + + + The MAPI property PR_REQUESTED_DELIVERY_METHOD. + + + + + The MAPI property PR_RESOURCE_FLAGS. + + + The MAPI property PR_RESOURCE_FLAGS. + + + + + The MAPI property PR_RESOURCE_METHODS. + + + The MAPI property PR_RESOURCE_METHODS. + + + + + The MAPI property PR_RESOURCE_PATH. + + + The MAPI property PR_RESOURCE_PATH. + + + + + The MAPI property PR_RESOURCE_PATH. + + + The MAPI property PR_RESOURCE_PATH. + + + + + The MAPI property PR_RESOURCE_TYPE. + + + The MAPI property PR_RESOURCE_TYPE. + + + + + The MAPI property PR_RESPONSE_REQUESTED. + + + The MAPI property PR_RESPONSE_REQUESTED. + + + + + The MAPI property PR_RESPONSIBILITY. + + + The MAPI property PR_RESPONSIBILITY. + + + + + The MAPI property PR_RETURNED_IPM. + + + The MAPI property PR_RETURNED_IPM. + + + + + The MAPI property PR_ROWID. + + + The MAPI property PR_ROWID. + + + + + The MAPI property PR_ROW_TYPE. + + + The MAPI property PR_ROW_TYPE. + + + + + The MAPI property PR_RTF_COMPRESSED. + + + The MAPI property PR_RTF_COMPRESSED. + + + + + The MAPI property PR_RTF_IN_SYNC. + + + The MAPI property PR_RTF_IN_SYNC. + + + + + The MAPI property PR_RTF_SYNC_BODY_COUNT. + + + The MAPI property PR_RTF_SYNC_BODY_COUNT. + + + + + The MAPI property PR_RTF_SYNC_BODY_CRC. + + + The MAPI property PR_RTF_SYNC_BODY_CRC. + + + + + The MAPI property PR_RTF_SYNC_BODY_TAG. + + + The MAPI property PR_RTF_SYNC_BODY_TAG. + + + + + The MAPI property PR_RTF_SYNC_BODY_TAG. + + + The MAPI property PR_RTF_SYNC_BODY_TAG. + + + + + The MAPI property PR_RTF_SYNC_PREFIX_COUNT. + + + The MAPI property PR_RTF_SYNC_PREFIX_COUNT. + + + + + The MAPI property PR_RTF_SYNC_TRAILING_COUNT. + + + The MAPI property PR_RTF_SYNC_TRAILING_COUNT. + + + + + The MAPI property PR_SEARCH. + + + The MAPI property PR_SEARCH. + + + + + The MAPI property PR_SEARCH_KEY. + + + The MAPI property PR_SEARCH_KEY. + + + + + The MAPI property PR_SECURITY. + + + The MAPI property PR_SECURITY. + + + + + The MAPI property PR_SELECTABLE. + + + The MAPI property PR_SELECTABLE. + + + + + The MAPI property PR_SENDER_ADDRTYPE. + + + The MAPI property PR_SENDER_ADDRTYPE. + + + + + The MAPI property PR_SENDER_ADDRTYPE. + + + The MAPI property PR_SENDER_ADDRTYPE. + + + + + The MAPI property PR_SENDER_EMAIL_ADDRESS. + + + The MAPI property PR_SENDER_EMAIL_ADDRESS. + + + + + The MAPI property PR_SENDER_EMAIL_ADDRESS. + + + The MAPI property PR_SENDER_EMAIL_ADDRESS. + + + + + The MAPI property PR_SENDER_ENTRYID. + + + The MAPI property PR_SENDER_ENTRYID. + + + + + The MAPI property PR_SENDER_NAME. + + + The MAPI property PR_SENDER_NAME. + + + + + The MAPI property PR_SENDER_NAME. + + + The MAPI property PR_SENDER_NAME. + + + + + The MAPI property PR_SENDER_SEARCH_KEY. + + + The MAPI property PR_SENDER_SEARCH_KEY. + + + + + The MAPI property PR_SEND_INTERNET_ENCODING. + + + The MAPI property PR_SEND_INTERNET_ENCODING. + + + + + The MAPI property PR_SEND_RECALL_REPORT + + + The MAPI property PR_SEND_RECALL_REPORT. + + + + + The MAPI property PR_SEND_RICH_INFO. + + + The MAPI property PR_SEND_RICH_INFO. + + + + + The MAPI property PR_SENSITIVITY. + + + The MAPI property PR_SENSITIVITY. + + + + + The MAPI property PR_SENTMAIL_ENTRYID. + + + The MAPI property PR_SENTMAIL_ENTRYID. + + + + + The MAPI property PR_SENT_REPRESENTING_ADDRTYPE. + + + The MAPI property PR_SENT_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_SENT_REPRESENTING_ADDRTYPE. + + + The MAPI property PR_SENT_REPRESENTING_ADDRTYPE. + + + + + The MAPI property PR_SENT_REPRESENTING_EMAIL_ADDRESS. + + + The MAPI property PR_SENT_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_SENT_REPRESENTING_EMAIL_ADDRESS. + + + The MAPI property PR_SENT_REPRESENTING_EMAIL_ADDRESS. + + + + + The MAPI property PR_SENT_REPRESENTING_ENTRYID. + + + The MAPI property PR_SENT_REPRESENTING_ENTRYID. + + + + + The MAPI property PR_SENT_REPRESENTING_NAME. + + + The MAPI property PR_SENT_REPRESENTING_NAME. + + + + + The MAPI property PR_SENT_REPRESENTING_NAME. + + + The MAPI property PR_SENT_REPRESENTING_NAME. + + + + + The MAPI property PR_SENT_REPRESENTING_SEARCH_KEY. + + + The MAPI property PR_SENT_REPRESENTING_SEARCH_KEY. + + + + + The MAPI property PR_SERVICE_DELETE_FILES. + + + The MAPI property PR_SERVICE_DELETE_FILES. + + + + + The MAPI property PR_SERVICE_DELETE_FILES. + + + The MAPI property PR_SERVICE_DELETE_FILES. + + + + + The MAPI property PR_SERVICE_DLL_NAME. + + + The MAPI property PR_SERVICE_DLL_NAME. + + + + + The MAPI property PR_SERVICE_DLL_NAME. + + + The MAPI property PR_SERVICE_DLL_NAME. + + + + + The MAPI property PR_SERVICE_ENTRY_NAME. + + + The MAPI property PR_SERVICE_ENTRY_NAME. + + + + + The MAPI property PR_SERVICE_EXTRA_UIDS. + + + The MAPI property PR_SERVICE_EXTRA_UIDS. + + + + + The MAPI property PR_SERVICE_NAME. + + + The MAPI property PR_SERVICE_NAME. + + + + + The MAPI property PR_SERVICE_NAME. + + + The MAPI property PR_SERVICE_NAME. + + + + + The MAPI property PR_SERVICES. + + + The MAPI property PR_SERVICES. + + + + + The MAPI property PR_SERVICE_SUPPORT_FILES. + + + The MAPI property PR_SERVICE_SUPPORT_FILES. + + + + + The MAPI property PR_SERVICE_SUPPORT_FILES. + + + The MAPI property PR_SERVICE_SUPPORT_FILES. + + + + + The MAPI property PR_SERVICE_UID. + + + The MAPI property PR_SERVICE_UID. + + + + + The MAPI property PR_SEVEN_BIT_DISPLAY_NAME. + + + The MAPI property PR_SEVEN_BIT_DISPLAY_NAME. + + + + + The MAPI property PR_SMTP_ADDRESS. + + + The MAPI property PR_SMTP_ADDRESS. + + + + + The MAPI property PR_SMTP_ADDRESS. + + + The MAPI property PR_SMTP_ADDRESS. + + + + + The MAPI property PR_SPOOLER_STATUS. + + + The MAPI property PR_SPOOLER_STATUS. + + + + + The MAPI property PR_SPOUSE_NAME. + + + The MAPI property PR_SPOUSE_NAME. + + + + + The MAPI property PR_SPOUSE_NAME. + + + The MAPI property PR_SPOUSE_NAME. + + + + + The MAPI property PR_START_DATE. + + + The MAPI property PR_START_DATE. + + + + + The MAPI property PR_STATE_OR_PROVINCE. + + + The MAPI property PR_STATE_OR_PROVINCE. + + + + + The MAPI property PR_STATE_OR_PROVINCE. + + + The MAPI property PR_STATE_OR_PROVINCE. + + + + + The MAPI property PR_STATUS. + + + The MAPI property PR_STATUS. + + + + + The MAPI property PR_STATUS_CODE. + + + The MAPI property PR_STATUS_CODE. + + + + + The MAPI property PR_STATUS_STRING. + + + The MAPI property PR_STATUS_STRING. + + + + + The MAPI property PR_STATUS_STRING. + + + The MAPI property PR_STATUS_STRING. + + + + + The MAPI property PR_STORE_ENTRYID. + + + The MAPI property PR_STORE_ENTRYID. + + + + + The MAPI property PR_STORE_PROVIDERS. + + + The MAPI property PR_STORE_PROVIDERS. + + + + + The MAPI property PR_STORE_RECORD_KEY. + + + The MAPI property PR_STORE_RECORD_KEY. + + + + + The MAPI property PR_STORE_STATE. + + + The MAPI property PR_STORE_STATE. + + + + + The MAPI property PR_STORE_SUPPORT_MASK. + + + The MAPI property PR_STORE_SUPPORT_MASK. + + + + + The MAPI property PR_STREET_ADDRESS. + + + The MAPI property PR_STREET_ADDRESS. + + + + + The MAPI property PR_STREET_ADDRESS. + + + The MAPI property PR_STREET_ADDRESS. + + + + + The MAPI property PR_SUBFOLDERS. + + + The MAPI property PR_SUBFOLDERS. + + + + + The MAPI property PR_SUBJECT. + + + The MAPI property PR_SUBJECT. + + + + + The MAPI property PR_SUBJECT. + + + The MAPI property PR_SUBJECT. + + + + + The MAPI property PR_SUBJECT_IPM. + + + The MAPI property PR_SUBJECT_IPM. + + + + + The MAPI property PR_SUBJECT_PREFIX. + + + The MAPI property PR_SUBJECT_PREFIX. + + + + + The MAPI property PR_SUBJECT_PREFIX. + + + The MAPI property PR_SUBJECT_PREFIX. + + + + + The MAPI property PR_SUBMIT_FLAGS. + + + The MAPI property PR_SUBMIT_FLAGS. + + + + + The MAPI property PR_SUPERSEDES. + + + The MAPI property PR_SUPERSEDES. + + + + + The MAPI property PR_SUPERSEDES. + + + The MAPI property PR_SUPERSEDES. + + + + + The MAPI property PR_SUPPLEMENTARY_INFO. + + + The MAPI property PR_SUPPLEMENTARY_INFO. + + + + + The MAPI property PR_SUPPLEMENTARY_INFO. + + + The MAPI property PR_SUPPLEMENTARY_INFO. + + + + + The MAPI property PR_SURNAME. + + + The MAPI property PR_SURNAME. + + + + + The MAPI property PR_SURNAME. + + + The MAPI property PR_SURNAME. + + + + + The MAPI property PR_TELEX_NUMBER. + + + The MAPI property PR_TELEX_NUMBER. + + + + + The MAPI property PR_TELEX_NUMBER. + + + The MAPI property PR_TELEX_NUMBER. + + + + + The MAPI property PR_TEMPLATEID. + + + The MAPI property PR_TEMPLATEID. + + + + + The MAPI property PR_TITLE. + + + The MAPI property PR_TITLE. + + + + + The MAPI property PR_TITLE. + + + The MAPI property PR_TITLE. + + + + + The MAPI property PR_TNEF_CORRELATION_KEY. + + + The MAPI property PR_TNEF_CORRELATION_KEY. + + + + + The MAPI property PR_TRANSMITABLE_DISPLAY_NAME. + + + The MAPI property PR_TRANSMITABLE_DISPLAY_NAME. + + + + + The MAPI property PR_TRANSMITABLE_DISPLAY_NAME. + + + The MAPI property PR_TRANSMITABLE_DISPLAY_NAME. + + + + + The MAPI property PR_TRANSPORT_KEY. + + + The MAPI property PR_TRANSPORT_KEY. + + + + + The MAPI property PR_TRANSPORT_MESSAGE_HEADERS. + + + The MAPI property PR_TRANSPORT_MESSAGE_HEADERS. + + + + + The MAPI property PR_TRANSPORT_MESSAGE_HEADERS. + + + The MAPI property PR_TRANSPORT_MESSAGE_HEADERS. + + + + + The MAPI property PR_TRANSPORT_PROVIDERS. + + + The MAPI property PR_TRANSPORT_PROVIDERS. + + + + + The MAPI property PR_TRANSPORT_STATUS. + + + The MAPI property PR_TRANSPORT_STATUS. + + + + + The MAPI property PR_TTYDD_PHONE_NUMBER. + + + The MAPI property PR_TTYDD_PHONE_NUMBER. + + + + + The MAPI property PR_TTYDD_PHONE_NUMBER. + + + The MAPI property PR_TTYDD_PHONE_NUMBER. + + + + + The MAPI property PR_TYPE_OF_MTS_USER. + + + The MAPI property PR_TYPE_OF_MTS_USER. + + + + + The MAPI property PR_USER_CERTIFICATE. + + + The MAPI property PR_USER_CERTIFICATE. + + + + + The MAPI property PR_USER_X509_CERTIFICATE. + + + The MAPI property PR_USER_X509_CERTIFICATE. + + + + + The MAPI property PR_VALID_FOLDER_MASK. + + + The MAPI property PR_VALID_FOLDER_MASK. + + + + + The MAPI property PR_VIEWS_ENTRYID. + + + The MAPI property PR_VIEWS_ENTRYID. + + + + + The MAPI property PR_WEDDING_ANNIVERSARY. + + + The MAPI property PR_WEDDING_ANNIVERSARY. + + + + + The MAPI property PR_X400_CONTENT_TYPE. + + + The MAPI property PR_X400_CONTENT_TYPE. + + + + + The MAPI property PR_X400_DEFERRED_DELIVERY_CANCEL. + + + The MAPI property PR_X400_DEFERRED_DELIVERY_CANCEL. + + + + + The MAPI property PR_XPOS. + + + The MAPI property PR_XPOS. + + + + + The MAPI property PR_YPOS. + + + The MAPI property PR_YPOS. + + + + + Gets the property identifier. + + + Gets the property identifier. + + The identifier. + + + + Gets a value indicating whether or not the property contains multiple values. + + + Gets a value indicating whether or not the property contains multiple values. + + true if the property contains multiple values; otherwise, false. + + + + Gets a value indicating whether or not the property has a special name. + + + Gets a value indicating whether or not the property has a special name. + + true if the property has a special name; otherwise, false. + + + + Gets a value indicating whether the property value type is valid. + + + Gets a value indicating whether the property value type is valid. + + true if the property value type is valid; otherwise, false. + + + + Gets the property's value type (including the multi-valued bit). + + + Gets the property's value type (including the multi-valued bit). + + The property's value type. + + + + Gets the type of the value that the property contains. + + + Gets the type of the value that the property contains. + + The type of the value. + + + + Initializes a new instance of the struct. + + + Creates a new based on a 32-bit integer tag as read from + a TNEF stream. + + The property tag. + + + + Initializes a new instance of the struct. + + + Creates a new based on a + and . + + The property identifier. + The property type. + + + + Casts an integer tag value into a TNEF property tag. + + + Casts an integer tag value into a TNEF property tag. + + A that represents the integer tag value. + The integer tag value. + + + + Casts a TNEF property tag into a 32-bit integer value. + + + Casts a TNEF property tag into a 32-bit integer value. + + A 32-bit integer value representing the TNEF property tag. + The TNEF property tag. + + + + Serves as a hash function for a object. + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms + and data structures such as a hash table. + + + + Determines whether the specified is equal to the current . + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Returns a that represents the current . + + + Returns a that represents the current . + + A that represents the current . + + + + Returns a new where the type has been changed to . + + + Returns a new where the type has been changed to . + + The unicode equivalent of the property tag. + + + + The type of value that a TNEF property contains. + + + The type of value that a TNEF property contains. + + + + + The type of the property is unspecified. + + + + + The property has a null value. + + + + + The property has a signed 16-bit value. + + + + + The property has a signed 32-bit value. + + + + + THe property has a 32-bit floating point value. + + + + + The property has a 64-bit floating point value. + + + + + The property has a 64-bit integer value representing 1/10000th of a monetary unit (i.e., 1/100th of a cent). + + + + + The property has a 64-bit integer value specifying the number of 100ns periods since Jan 1, 1601. + + + + + The property has a 32-bit error value. + + + + + The property has a boolean value. + + + + + The property has an embedded object value. + + + + + The property has a signed 64-bit value. + + + + + The property has a null-terminated 8-bit character string value. + + + + + The property has a null-terminated unicode character string value. + + + + + The property has a 64-bit integer value specifying the number of 100ns periods since Jan 1, 1601. + + + + + The property has an OLE GUID value. + + + + + The property has a binary blob value. + + + + + A flag indicating that the property contains multiple values. + + + + + A TNEF reader. + + + A TNEF reader. + + + + + Gets the attachment key value. + + + Gets the attachment key value. + + The attachment key value. + + + + Gets the current attribute's level. + + + Gets the current attribute's level. + + The current attribute's level. + + + + Gets the length of the current attribute's raw value. + + + Gets the length of the current attribute's raw value. + + The length of the current attribute's raw value. + + + + Gets the stream offset of the current attribute's raw value. + + + Gets the stream offset of the current attribute's raw value. + + The stream offset of the current attribute's raw value. + + + + Gets the current attribute's tag. + + + Gets the current attribute's tag. + + The current attribute's tag. + + + + Gets the compliance mode. + + + Gets the compliance mode. + + The compliance mode. + + + + Gets the current compliance status of the TNEF stream. + + + Gets the current compliance status of the TNEF stream. + As the reader progresses, this value may change if errors are encountered. + + The compliance status. + + + + Gets the message codepage. + + + Gets the message codepage. + + The message codepage. + + + + Gets the TNEF property reader. + + + Gets the TNEF property reader. + + The TNEF property reader. + + + + Gets the current stream offset. + + + Gets the current stream offset. + + The stream offset. + + + + Gets the TNEF version. + + + Gets the TNEF version. + + The TNEF version. + + + + Initializes a new instance of the class. + + + When reading a TNEF stream using the mode, + a will be thrown immediately at the first sign of + invalid or corrupted data. + When reading a TNEF stream using the mode, + however, compliance issues are accumulated in the + property, but exceptions are not raised unless the stream is too corrupted to continue. + + The input stream. + The default message codepage. + The compliance mode. + + is null. + + + is not a valid codepage. + + + is not a supported codepage. + + + The TNEF stream is corrupted or invalid. + + + + + Initializes a new instance of the class. + + + Creates a new for the specified input stream. + + The input stream. + + is null. + + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Advances to the next attribute in the TNEF stream. + + + Advances to the next attribute in the TNEF stream. + + true if there is another attribute available to be read; otherwise false. + + The TNEF stream is corrupted or invalid. + + + + + Reads the raw attribute value data from the underlying TNEF stream. + + + Reads the raw attribute value data from the underlying TNEF stream. + + The total number of bytes read into the buffer. This can be less than the number + of bytes requested if that many bytes are not available, or zero (0) if the end of the + value has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + An I/O error occurred. + + + + + Resets the compliance status. + + + Resets the compliance status. + + + + + Closes the TNEF reader and the underlying stream. + + + Closes the TNEF reader and the underlying stream. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + Releases all resource used by the object. + + Call when you are finished using the . The + method leaves the in an unusable state. After calling + , you must release all references to the so the garbage + collector can reclaim the memory that the was occupying. + + + + A stream for reading raw values from a or . + + + A stream for reading raw values from a or . + + + + + Initializes a new instance of the class. + + + Creates a stream for reading a raw value from the . + + The . + The end offset. + + + + Checks whether or not the stream supports reading. + + + The is always readable. + + true if the stream supports reading; otherwise, false. + + + + Checks whether or not the stream supports writing. + + + Writing to a is not supported. + + true if the stream supports writing; otherwise, false. + + + + Checks whether or not the stream supports seeking. + + + Seeking within a is not supported. + + true if the stream supports seeking; otherwise, false. + + + + Gets the length of the stream, in bytes. + + + Getting the length of a is not supported. + + The length of the stream in bytes. + + The stream does not support seeking. + + + + + Gets or sets the current position within the stream. + + + Getting and setting the position of a is not supported. + + The position of the stream. + + The stream does not support seeking. + + + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + + Reads a sequence of bytes from the stream and advances the position + within the stream by the number of bytes read. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many + bytes are not currently available, or zero (0) if the end of the stream has been reached. + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + The stream has been disposed. + + + An I/O error occurred. + + + + + Writes a sequence of bytes to the stream and advances the current + position within this stream by the number of bytes written. + + + The does not support writing. + + The buffer to write. + The offset of the first byte to write. + The number of bytes to write. + + The stream does not support writing. + + + + + Sets the position within the current stream. + + + The does not support seeking. + + The new position within the stream. + The offset into the stream relative to the . + The origin to seek from. + + The stream does not support seeking. + + + + + Clears all buffers for this stream and causes any buffered data to be written + to the underlying device. + + + The does not support writing. + + + The stream does not support writing. + + + + + Sets the length of the stream. + + + The does not support setting the length. + + The desired length of the stream in bytes. + + The stream does not support setting the length. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + The underlying is not disposed. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + The 32-bit cyclic redundancy check (CRC) algorithm. + + + A cyclic redundancy check is a form of integrity check to make sure + that a block of data has not been corrupted. + + + + + Initializes a new instance of the class. + + + Creates a new CRC32 context. + + The initial value. + + + + Clones the CRC32 context and state. + + + Clones the CRC32 context and state. + + + + + Gets the computed checksum. + + + Gets the computed checksum. + + The checksum. + + + + Updates the CRC based on the specified block of data. + + + Updates the CRC based on the specified block of data. + + The buffer to read data into. + The offset into the buffer to start reading data. + The number of bytes to read. + + is null. + + + is less than zero or greater than the length of . + -or- + The is not large enough to contain bytes starting + at the specified . + + + + + Updates the CRC based on the specified byte. + + + Updates the CRC based on the specified byte. + + The byte value. + + + + Resets the checksum so that the context can be reused. + + + Resets the checksum so that the context can be reused. + + + + + Utility methods to parse and format rfc822 date strings. + + + Utility methods to parse and format rfc822 date strings. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses an rfc822 date and time from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the date was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed date. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses an rfc822 date and time from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the date was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed date. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses an rfc822 date and time from the supplied buffer starting at the specified index. + + true, if the date was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed date. + + is null. + + + is not within the range of the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses an rfc822 date and time from the supplied buffer starting at the specified index. + + true, if the date was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed date. + + is null. + + + is not within the range of the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses an rfc822 date and time from the specified buffer. + + true, if the date was successfully parsed, false otherwise. + The input buffer. + The parsed date. + + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses an rfc822 date and time from the specified buffer. + + true, if the date was successfully parsed, false otherwise. + The input buffer. + The parsed date. + + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses an rfc822 date and time from the specified text. + + true, if the date was successfully parsed, false otherwise. + The input text. + The parsed date. + + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses an rfc822 date and time from the specified text. + + true, if the date was successfully parsed, false otherwise. + The input text. + The parsed date. + + is null. + + + + + Formats the as an rfc822 date string. + + + Formats the date and time in the format specified by rfc822, suitable for use + in the Date header of MIME messages. + + The formatted string. + The date. + + + + MIME utility methods. + + + Various utility methods that don't belong anywhere else. + + + + + A string comparer that performs a case-insensitive ordinal string comparison. + + + A string comparer that performs a case-insensitive ordinal string comparison. + + + + + Generates a Message-Id. + + + Generates a new Message-Id using the supplied domain. + + The message identifier. + A domain to use. + + is null. + + + is invalid. + + + + + Generates a Message-Id. + + + Generates a new Message-Id using the local machine's domain. + + The message identifier. + + + + Enumerates the message-id references such as those that can be found in + the In-Reply-To or References header. + + + Incrementally parses Message-Ids (such as those from a References header + in a MIME message) from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + The references. + The raw byte buffer to parse. + The index into the buffer to start parsing. + The length of the buffer to parse. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Enumerates the message-id references such as those that can be found in + the In-Reply-To or References header. + + + Incrementally parses Message-Ids (such as those from a References header + in a MIME message) from the specified text. + + The references. + The text to parse. + + is null. + + + + + Parses a Message-Id header value. + + + Parses the Message-Id value, returning the addr-spec portion of the msg-id token. + + The addr-spec portion of the msg-id token. + The raw byte buffer to parse. + The index into the buffer to start parsing. + The length of the buffer to parse. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Parses a Message-Id header value. + + + Parses the Message-Id value, returning the addr-spec portion of the msg-id token. + + The addr-spec portion of the msg-id token. + The text to parse. + + is null. + + + + + Tries to parse a version from a header such as Mime-Version. + + + Parses a MIME version string from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the version was successfully parsed, false otherwise. + The raw byte buffer to parse. + The index into the buffer to start parsing. + The length of the buffer to parse. + The parsed version. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse a version from a header such as Mime-Version. + + + Parses a MIME version string from the specified text. + + true, if the version was successfully parsed, false otherwise. + The text to parse. + The parsed version. + + is null. + + + + + Tries to parse a version from a header such as Mime-Version. + + + Parses a MIME version string from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the version was successfully parsed, false otherwise. + The raw byte buffer to parse. + The index into the buffer to start parsing. + The length of the buffer to parse. + The parsed version. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse a version from a header such as Mime-Version. + + + Parses a MIME version string from the specified text. + + true, if the version was successfully parsed, false otherwise. + The text to parse. + The parsed version. + + is null. + + + + + Tries to parse the value of a Content-Transfer-Encoding header. + + + Parses a Content-Transfer-Encoding header value. + + true, if the encoding was successfully parsed, false otherwise. + The text to parse. + The parsed encoding. + + is null. + + + + + Quotes the specified text. + + + Quotes the specified text, enclosing it in double-quotes and escaping + any backslashes and double-quotes within. + + The quoted text. + The text to quote. + + is null. + + + + + Unquotes the specified text. + + + Unquotes the specified text, removing any escaped backslashes within. + + The unquoted text. + The text to unquote. + + is null. + + + + + An optimized version of StringComparer.OrdinalIgnoreCase. + + + An optimized version of StringComparer.OrdinalIgnoreCase. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Compare the input strings for equality. + + + Compares the input strings for equality. + + trueif and refer to the same object, + or and are equal, + or and are null; + otherwise, false. + A string to compare to . + A string to compare to . + + + + Get the hash code for the specified string. + + + Get the hash code for the specified string. + + A 32-bit signed hash code calculated from the value of the parameter. + The string. + + is null. + + + + + Utility methods for encoding and decoding rfc2047 encoded-word tokens. + + + Utility methods for encoding and decoding rfc2047 encoded-word tokens. + + + + + Decodes the phrase. + + + Decodes the phrase(s) starting at the given index and spanning across + the specified number of bytes using the supplied parser options. + + The decoded phrase. + The parser options to use. + The phrase to decode. + The starting index. + The number of bytes to decode. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Decodes the phrase. + + + Decodes the phrase(s) starting at the given index and spanning across + the specified number of bytes using the default parser options. + + The decoded phrase. + The phrase to decode. + The starting index. + The number of bytes to decode. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Decodes the phrase. + + + Decodes the phrase(s) within the specified buffer using the supplied parser options. + + The decoded phrase. + The parser options to use. + The phrase to decode. + + is null. + -or- + is null. + + + + + Decodes the phrase. + + + Decodes the phrase(s) within the specified buffer using the default parser options. + + The decoded phrase. + The phrase to decode. + + is null. + + + + + Decodes unstructured text. + + + Decodes the unstructured text buffer starting at the given index and spanning + across the specified number of bytes using the supplied parser options. + + The decoded text. + The parser options to use. + The text to decode. + The starting index. + The number of bytes to decode. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Decodes unstructured text. + + + Decodes the unstructured text buffer starting at the given index and spanning + across the specified number of bytes using the default parser options. + + The decoded text. + The text to decode. + The starting index. + The number of bytes to decode. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Decodes unstructured text. + + + Decodes the unstructured text buffer using the specified parser options. + + The decoded text. + The parser options to use. + The text to decode. + + is null. + -or- + is null. + + + + + Decodes unstructured text. + + + Decodes the unstructured text buffer using the default parser options. + + The decoded text. + The text to decode. + + is null. + + + + + Encodes the phrase. + + + Encodes the phrase according to the rules of rfc2047 using + the specified charset encoding and formatting options. + + The encoded phrase. + The formatting options + The charset encoding. + The phrase to encode. + + is null. + -or- + is null. + -or- + is null. + + + + + Encodes the phrase. + + + Encodes the phrase according to the rules of rfc2047 using + the specified charset encoding. + + The encoded phrase. + The charset encoding. + The phrase to encode. + + is null. + -or- + is null. + + + + + Encodes the unstructured text. + + + Encodes the unstructured text according to the rules of rfc2047 + using the specified charset encoding and formatting options. + + The encoded text. + The formatting options + The charset encoding. + The text to encode. + + is null. + -or- + is null. + -or- + is null. + + + + + Encodes the unstructured text. + + + Encodes the unstructured text according to the rules of rfc2047 + using the specified charset encoding. + + The encoded text. + The charset encoding. + The text to encode. + + is null. + -or- + is null. + + + + + A collection of attachments. + + + The is only used when building a message body with a . + + + + + Initializes a new instance of the class. + + + Creates a new . + If is true, then the attachments + are treated as if they are linked to another . + + If set to true; the attachments are treated as linked resources. + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the number of attachments currently in the collection. + + + Indicates the number of attachments in the collection. + + The number of attachments. + + + + Gets whther or not the collection is read-only. + + + A is never read-only. + + true if the collection is read only; otherwise, false. + + + + Gets or sets the at the specified index. + + + Gets or sets the at the specified index. + + The attachment at the specified index. + The index. + + is null. + + + is out of range. + + + + + Add the specified attachment. + + + Adds the specified data as an attachment using the supplied Content-Type. + The file name parameter is used to set the Content-Location. + For a list of known mime-types and their associated file extensions, see + http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types + + The newly added attachment . + The name of the file. + The file data. + The mime-type of the file. + + is null. + -or- + is null. + -or- + is null. + + + The specified file path is empty. + + + + + Add the specified attachment. + + + Adds the specified data as an attachment using the supplied Content-Type. + The file name parameter is used to set the Content-Location. + For a list of known mime-types and their associated file extensions, see + http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types + + The newly added attachment . + The name of the file. + The content stream. + The mime-type of the file. + + is null. + -or- + is null. + -or- + is null. + + + The specified file path is empty. + -or- + The stream cannot be read. + + + + + Add the specified attachment. + + + Adds the data as an attachment, using the specified file name for deducing + the mime-type by extension and for setting the Content-Location. + + The newly added attachment . + The name of the file. + The file data to attach. + + is null. + -or- + is null. + + + The specified file path is empty. + + + + + Add the specified attachment. + + + Adds the stream as an attachment, using the specified file name for deducing + the mime-type by extension and for setting the Content-Location. + + The newly added attachment . + The name of the file. + The content stream. + + is null. + -or- + is null. + + + The specified file path is empty. + -or- + The stream cannot be read + + + + + Add the specified attachment. + + + Adds the specified file as an attachment using the supplied Content-Type. + For a list of known mime-types and their associated file extensions, see + http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types + + The newly added attachment . + The name of the file. + The mime-type of the file. + + is null. + -or- + is null. + + + The specified file path is empty. + + + The specified file could not be found. + + + The user does not have access to read the specified file. + + + An I/O error occurred. + + + + + Add the specified attachment. + + + Adds the specified file as an attachment. + + The newly added attachment . + The name of the file. + + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to read the specified file. + + + An I/O error occurred. + + + + + Add the specified attachment. + + + Adds the specified as an attachment. + + The attachment. + + is null. + + + + + Clears the attachment collection. + + + Removes all attachments from the collection. + + + + + Checks if the collection contains the specified attachment. + + + Determines whether or not the collection contains the specified attachment. + + true if the specified attachment exists; + otherwise false. + The attachment. + + is null. + + + + + Copies all of the attachments in the collection to the specified array. + + + Copies all of the attachments within the into the array, + starting at the specified array index. + + The array to copy the attachments to. + The index into the array. + + is null. + + + is out of range. + + + + + Gets the index of the requested attachment, if it exists. + + + Finds the index of the specified attachment, if it exists. + + The index of the requested attachment; otherwise -1. + The attachment. + + is null. + + + + + Inserts the specified attachment at the given index. + + + Inserts the attachment at the specified index. + + The index to insert the attachment. + The attachment. + + is null. + + + is out of range. + + + + + Removes the specified attachment. + + + Removes the specified attachment. + + true if the attachment was removed; otherwise false. + The attachment. + + is null. + + + + + Removes the attachment at the specified index. + + + Removes the attachment at the specified index. + + The index. + + is out of range. + + + + + Gets an enumerator for the list of attachments. + + + Gets an enumerator for the list of attachments. + + The enumerator. + + + + Gets an enumerator for the list of attachments. + + + Gets an enumerator for the list of attachments. + + The enumerator. + + + + A message body builder. + + + is a helper class for building common MIME body structures. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the attachments. + + + Represents a collection of file attachments that will be included in the message. + + The attachments. + + + + Gets the linked resources. + + + Linked resources are a special type of attachment which are linked to from the . + + The linked resources. + + + + Gets or sets the text body. + + + Represents the plain-text formatted version of the message body. + + The text body. + + + + Gets or sets the html body. + + + Represents the html formatted version of the message body and may link to any of the . + + The html body. + + + + Constructs the message body based on the text-based bodies, the linked resources, and the attachments. + + + Combines the , , , + and into the proper MIME structure suitable for display in many common + mail clients. + + The message body. + + + + A class representing a Content-Disposition header value. + + + The Content-Disposition header is a way for the originating client to + suggest to the receiving client whether to present the part to the user + as an attachment or as part of the content (inline). + + + + + The attachment disposition. + + + Indicates that the should be treated as an attachment. + + + + + The form-data disposition. + + + Indicates that the should be treated as form data. + + + + + The inline disposition. + + + Indicates that the should be rendered inline. + + + + + Initializes a new instance of the class. + + + The disposition should either be + or . + + The disposition. + + is null. + + + is not "attachment" or "inline". + + + + + Initializes a new instance of the class. + + + This is identical to with a disposition + value of . + + + + + Gets or sets the disposition. + + + The disposition is typically either "attachment" or "inline". + + The disposition. + + is null. + + + is an invalid disposition value. + + + + + Gets or sets a value indicating whether the is an attachment. + + + A convenience property to determine if the entity should be considered an attachment or not. + + true if the is an attachment; otherwise, false. + + + + Gets the parameters. + + + In addition to specifying whether the entity should be treated as an + attachment vs displayed inline, the Content-Disposition header may also + contain parameters to provide further information to the receiving client + such as the file attributes. + + The parameters. + + + + Gets or sets the name of the file. + + + When set, this can provide a useful hint for a default file name for the + content when the user decides to save it to disk. + + The name of the file. + + + + Gets or sets the creation-date parameter. + + + Refers to the date and time that the content file was created on the + originating system. This parameter serves little purpose and is + typically not used by mail clients. + + The creation date. + + + + Gets or sets the modification-date parameter. + + + Refers to the date and time that the content file was last modified on + the originating system. This parameter serves little purpose and is + typically not used by mail clients. + + The modification date. + + + + Gets or sets the read-date parameter. + + + Refers to the date and time that the content file was last read on the + originating system. This parameter serves little purpose and is typically + not used by mail clients. + + The read date. + + + + Gets or sets the size parameter. + + + When set, the size parameter typically refers to the original size of the + content on disk. This parameter is rarely used by mail clients as it serves + little purpose. + + The size. + + + + Serializes the to a string, + optionally encoding the parameters. + + + Creates a string-representation of the , + optionally encoding the parameters as they would be encoded for trabsport. + + The serialized string. + The formatting options. + The charset to be used when encoding the parameter values. + If set to true, the parameter values will be encoded. + + is null. + -or- + is null. + + + + + Serializes the to a string, + optionally encoding the parameters. + + + Creates a string-representation of the , + optionally encoding the parameters as they would be encoded for trabsport. + + The serialized string. + The charset to be used when encoding the parameter values. + If set to true, the parameter values will be encoded. + + is null. + + + + + Returns a that represents the current + . + + + Creates a string-representation of the . + + A that represents the current + . + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Disposition value from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the disposition was successfully parsed, false otherwise. + The parser options. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed disposition. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Disposition value from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the disposition was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed disposition. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Disposition value from the supplied buffer starting at the specified index. + + true, if the disposition was successfully parsed, false otherwise. + The parser options. + The input buffer. + The starting index of the input buffer. + The parsed disposition. + + is null. + -or- + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Disposition value from the supplied buffer starting at the specified index. + + true, if the disposition was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed disposition. + + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Disposition value from the specified buffer. + + true, if the disposition was successfully parsed, false otherwise. + The parser options. + The input buffer. + The parsed disposition. + + is null. + -or- + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Disposition value from the specified buffer. + + true, if the disposition was successfully parsed, false otherwise. + The input buffer. + The parsed disposition. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a Content-Disposition value from the supplied text. + + true, if the disposition was successfully parsed, false otherwise. + The parser options. + The text to parse. + The parsed disposition. + + is null. + -or- + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a Content-Disposition value from the supplied text. + + true, if the disposition was successfully parsed, false otherwise. + The text to parse. + The parsed disposition. + + is null. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Disposition value from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + The parsed . + The parser options. + The input buffer. + The start index of the buffer. + The length of the buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Disposition value from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + The parsed . + The input buffer. + The start index of the buffer. + The length of the buffer. + + is null. + + + and do not specify + a valid range in the byte array. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Disposition value from the supplied buffer starting at the specified index. + + The parsed . + The parser options. + The input buffer. + The start index of the buffer. + + is null. + -or- + is null. + + + is out of range. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Disposition value from the supplied buffer starting at the specified index. + + The parsed . + The input buffer. + The start index of the buffer. + + is null. + + + is out of range. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Disposition value from the supplied buffer. + + The parsed . + The parser options. + The input buffer. + + is null. + -or- + is null. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Disposition value from the supplied buffer. + + The parsed . + The input buffer. + + is null. + + + The could not be parsed. + + + + + Parse the specified text into a new instance of the class. + + + Parses a Content-Disposition value from the specified text. + + The parsed . + The parser options. + The input text. + + is null. + -or- + is null. + + + The could not be parsed. + + + + + Parse the specified text into a new instance of the class. + + + Parses a Content-Disposition value from the specified text. + + The parsed . + The input text. + + is null. + + + The could not be parsed. + + + + + An enumeration of all supported content transfer encodings. + . + + + Some older mail software is unable to properly deal with + data outside of the ASCII range, so it is sometimes + necessary to encode the content of MIME entities. + + + + + The default encoding (aka no encoding at all). + + + + + The 7bit content transfer encoding. + + + This encoding should be restricted to textual content + in the US-ASCII range. + + + + + The 8bit content transfer encoding. + + + This encoding should be restricted to textual content + outside of the US-ASCII range but may not be supported + by all transport services such as older SMTP servers + that do not support the 8BITMIME extension. + + + + + The binary content transfer encoding. + + + This encoding is simply unencoded binary data. Typically not + supported by standard message transport services such as SMTP. + + + + + The base64 content transfer encoding. + . + + + This encoding is typically used for encoding binary data + or textual content in a largely 8bit charset encoding and + is supported by all message transport services. + + + + + The quoted printable content transfer encoding. + . + + + This encoding is used for textual content that is in a charset + that has a minority of characters outside of the US-ASCII range + (such as ISO-8859-1 and other single-byte charset encodings) and + is supported by all message transport services. + + + + + The uuencode content transfer encoding. + . + + + This is an obsolete encoding meant for encoding binary + data and has largely been superceeded by . + + + + + Encapsulates a content stream used by . + + + A represents the content of a . + The content has both a stream and an encoding (typically ). + + + + + Initializes a new instance of the class. + + + When creating new s, the + should typically be unless the + has already been encoded. + + The content stream. + The stream encoding. + + is null. + + + does not support reading. + -or- + does not support seeking. + + + + + Gets or sets the content encoding. + + + If the was parsed from an existing stream, the + encoding will be identical to the , + otherwise it will typically be . + + The content encoding. + + + + Gets the content stream. + + + Gets the content stream. + + The stream. + + + + Opens the decoded content stream. + + + Provides a means of reading the decoded content without having to first write it to another + stream using . + + The decoded content stream. + + + + Copies the content stream to the specified output stream. + + + This is equivalent to simply using to + copy the content stream to the output stream except that this method is + cancellable. + + The output stream. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Decodes the content stream into another stream. + + + Uses the to decode the content stream to the output stream. + + The output stream. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + A class representing a Content-Type header value. + + + The Content-Type header is a way for the originating client to + suggest to the receiving client the mime-type of the content and, + depending on that mime-type, presentation options such as charset. + + + + + Initializes a new instance of the class. + + + Creates a new based on the media type and subtype provided. + + Media type. + Media subtype. + + is null. + -or- + is null. + + + + + Gets or sets the type of the media. + + + Represents the media type of the . Examples include + "text", "image", and "application". This string should + always be treated as case-insensitive. + + The type of the media. + + is null. + + + + + Gets or sets the media subtype. + + + Represents the media subtype of the . Examples include + "html", "jpeg", and "octet-stream". This string should + always be treated as case-insensitive. + + The media subtype. + + is null. + + + + + Gets the parameters. + + + In addition to the media type and subtype, the Content-Type header may also + contain parameters to provide further hints to the receiving client as to + how to process or display the content. + + The parameters. + + + + Gets or sets the boundary parameter. + + + This is a special parameter on entities, designating to the + parser a unique string that should be considered the boundary marker for each sub-part. + + The boundary. + + + + Gets or sets the charset parameter. + + + Text-based entities will often include a charset parameter + so that the receiving client can properly render the text. + + The charset. + + + + Gets or sets the format parameter. + + + The format parameter is typically use with text/plain + entities and will either have a value of "fixed" or "flowed". + + The charset. + + + + Gets the simple mime-type. + + + Gets the simple mime-type. + + The mime-type. + + + + Gets or sets the name parameter. + + + The name parameter is a way for the originiating client to suggest + to the receiving client a display-name for the content, which may + be used by the receiving client if it cannot display the actual + content to the user. + + The name. + + + + Checks if the this instance of matches + the specified media type and subtype. + + + If the specified or + are "*", they match anything. + + true if the matches the + provided media type and subtype. + The media type. + The media subtype. + + is null. + -or- + is null. + + + + + Checks if the this instance of matches + the specified MIME media type and subtype. + + + If the specified or + are "*", they match anything. + + true if the matches the + provided media type and subtype. + The media type. + The media subtype. + + is null. + -or- + is null. + + + + + Serializes the to a string, + optionally encoding the parameters. + + + Creates a string-representation of the , optionally encoding + the parameters as they would be encoded for transport. + + The serialized string. + The formatting options. + The charset to be used when encoding the parameter values. + If set to true, the parameter values will be encoded. + + is null. + -or- + is null. + + + + + Serializes the to a string, + optionally encoding the parameters. + + + Creates a string-representation of the , optionally encoding + the parameters as they would be encoded for transport. + + The serialized string. + The charset to be used when encoding the parameter values. + If set to true, the parameter values will be encoded. + + is null. + + + + + Returns a that represents the current + . + + + Creates a string-representation of the . + + A that represents the current + . + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Type value from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the content type was successfully parsed, false otherwise. + The parser options. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed content type. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Type value from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the content type was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed content type. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Type value from the supplied buffer starting at the specified index. + + true, if the content type was successfully parsed, false otherwise. + The parser options. + The input buffer. + The starting index of the input buffer. + The parsed content type. + + is null. + -or- + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Type value from the supplied buffer starting at the specified index. + + true, if the content type was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed content type. + + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Type value from the specified buffer. + + true, if the content type was successfully parsed, false otherwise. + The parser options. + The input buffer. + The parsed content type. + + is null. + -or- + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a Content-Type value from the specified buffer. + + true, if the content type was successfully parsed, false otherwise. + The input buffer. + The parsed content type. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a Content-Type value from the specified text. + + true, if the content type was successfully parsed, false otherwise. + THe parser options. + The text to parse. + The parsed content type. + + is null. + -or- + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a Content-Type value from the specified text. + + true, if the content type was successfully parsed, false otherwise. + The text to parse. + The parsed content type. + + is null. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Type value from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + The parsed . + The parser options. + The input buffer. + The start index of the buffer. + The length of the buffer. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Type value from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + The parsed . + The input buffer. + The start index of the buffer. + The length of the buffer. + + is null. + + + and do not specify + a valid range in the byte array. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Type value from the supplied buffer starting at the specified index. + + The parsed . + The parser options. + The input buffer. + The start index of the buffer. + + is null. + -or- + is null. + + + is out of range. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Type value from the supplied buffer starting at the specified index. + + The parsed . + The input buffer. + The start index of the buffer. + + is null. + + + is out of range. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Type value from the specified buffer. + + The parsed . + The parser options. + The input buffer. + + is null. + -or- + is null. + + + The could not be parsed. + + + + + Parse the specified input buffer into a new instance of the class. + + + Parses a Content-Type value from the specified buffer. + + The parsed . + The input buffer. + + is null. + + + The could not be parsed. + + + + + Parse the specified text into a new instance of the class. + + + Parses a Content-Type value from the specified text. + + The parsed . + The parser options. + The text. + + is null. + -or- + is null. + + + The could not be parsed. + + + + + Parse the specified text into a new instance of the class. + + + Parses a Content-Type value from the specified text. + + The parsed . + The text. + + is null. + + + The could not be parsed. + + + + + A domain list. + + + Represents a list of domains, such as those that an email was routed through. + + + + + Initializes a new instance of the class. + + + Creates a new based on the domains provided. + + A domain list. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the index of the requested domain, if it exists. + + + Finds the index of the specified domain, if it exists. + + The index of the requested domain; otherwise -1. + The domain. + + is null. + + + + + Insert the domain at the specified index. + + + Inserts the domain at the specified index in the list. + + The index to insert the domain. + The domain to insert. + + is null. + + + is out of range. + + + + + Removes the domain at the specified index. + + + Removes the domain at the specified index. + + The index. + + is out of range. + + + + + Gets or sets the domain at the specified index. + + + Gets or sets the domain at the specified index. + + The domain at the specified index. + The index. + + is null. + + + is out of range. + + + + + Add the specified domain. + + + Adds the specified domain to the end of the list. + + The domain. + + is null. + + + + + Clears the domain list. + + + Removes all of the domains in the list. + + + + + Checks if the contains the specified domain. + + + Determines whether or not the domain list contains the specified domain. + + true if the specified domain is contained; + otherwise false. + The domain. + + is null. + + + + + Copies all of the domains in the to the specified array. + + + Copies all of the domains within the into the array, + starting at the specified array index. + + The array to copy the domains to. + The index into the array. + + is null. + + + is out of range. + + + + + Removes the specified domain. + + + Removes the first instance of the specified domain from the list if it exists. + + true if the domain was removed; otherwise false. + The domain. + + is null. + + + + + Gets the number of domains in the . + + + Indicates the number of domains in the list. + + The number of domains. + + + + Gets a value indicating whether this instance is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Gets an enumerator for the list of domains. + + + Gets an enumerator for the list of domains. + + The enumerator. + + + + Gets an enumerator for the list of domains. + + + Gets an enumerator for the list of domains. + + The enumerator. + + + + Returns a string representation of the list of domains. + + + Each non-empty domain string will be prepended by an '@'. + If there are multiple domains in the list, they will be separated by a comma. + + A string representing the . + + + + Tries to parse a list of domains. + + + Attempts to parse a from the text buffer starting at the + specified index. The index will only be updated if a was + successfully parsed. + + true if a was successfully parsed; + false otherwise. + The buffer to parse. + The index to start parsing. + An index of the end of the input. + A flag indicating whether or not an + exception should be thrown on error. + The parsed DomainList. + + + + Tries to parse a list of domains. + + + Attempts to parse a from the supplied text. The index + will only be updated if a was successfully parsed. + + true if a was successfully parsed; + false otherwise. + The text to parse. + The parsed DomainList. + + is null. + + + + + A content encoding constraint. + + + Not all message transports support binary or 8-bit data, so it becomes + necessary to constrain the content encoding to a subset of the possible + Content-Transfer-Encoding values. + + + + + There are no encoding constraints, the content may contain any byte. + + + + + The content may contain bytes with the high bit set, but must not contain any zero-bytes. + + + + + The content may only contain bytes within the 7-bit ASCII range. + + + + + A New-Line format. + + + There are two commonly used line-endings used by modern Operating Systems. + Unix-based systems such as Linux and Mac OS use a single character ('\n' aka LF) + to represent the end of line where-as Windows (or DOS) uses a sequence of two + characters ("\r\n" aka CRLF). Most text-based network protocols such as SMTP, + POP3, and IMAP use the CRLF sequence as well. + + + + + The Unix New-Line format ("\n"). + + + + + The DOS New-Line format ("\r\n"). + + + + + Format options for serializing various MimeKit objects. + + + Represents the available options for formatting MIME messages + and entities when writing them to a stream. + + + + + The default formatting options. + + + If a custom is not passed to methods such as + , + the default options will be used. + + + + + Gets the maximum line length used by the encoders. The encoders + use this value to determine where to place line breaks. + + + Specifies the maximum line length to use when line-wrapping headers. + + The maximum line length. + + + + Gets or sets the new-line format. + + + Specifies the new-line encoding to use when writing the message + or entity to a stream. + + The new-line format. + + cannot be changed. + + + + + Gets the message headers that should be hidden. + + + Specifies the set of headers that should be removed when + writing a to a stream. + This is primarily meant for the purposes of removing Bcc + and Resent-Bcc headers when sending via a transport such as + SMTP. + + The message headers. + + + + Gets or sets whether the new "Internationalized Email" formatting standards should be used. + + + The new "Internationalized Email" format is defined by + rfc6530 and + rfc6532. + This feature should only be used when formatting messages meant to be sent via + SMTP using the SMTPUTF8 extension (rfc6531) + or when appending messages to an IMAP folder via UTF8 APPEND + (rfc6855). + + true if the new internationalized formatting should be used; otherwise, false. + + cannot be changed. + + + + + Gets or sets whether the formatter should allow mixed charsets in the headers. + + + When this option is enabled, the MIME formatter will try to use US-ASCII and/or + ISO-8859-1 to encode headers when appropriate rather than being forced to use the + specified charset for all encoded-word tokens in order to maximize readability. + Unfortunately, mail clients like Outlook and Thunderbird do not treat + encoded-word tokens individually and assume that all tokens are encoded using the + charset declared in the first encoded-word token despite the specification + explicitly stating that each encoded-word token should be treated independently. + The Thunderbird bug can be tracked at + + https://bugzilla.mozilla.org/show_bug.cgi?id=317263. + + true if the formatter should be allowed to use ISO-8859-1 when encoding headers; otherwise, false. + + + + The method to use for encoding Content-Type and Content-Disposition parameter values. + + + The method to use for encoding Content-Type and Content-Disposition parameter + values when the is set to + . + The MIME specifications specify that the proper method for encoding Content-Type + and Content-Disposition parameter values is the method described in + rfc2231. However, it is common for + some older email clients to improperly encode using the method described in + rfc2047 instead. + + The parameter encoding method that will be used. + + is not a valid value. + + + + + Initializes a new instance of the class. + + + Creates a new set of formatting options for use with methods such as + . + + + + + Clones an instance of . + + + Clones the formatting options. + + An exact copy of the . + + + + Get the default formatting options in a thread-safe way. + + + Gets the default formatting options in a thread-safe way. + + The default formatting options. + + + + An address group, as specified by rfc0822. + + + Group addresses are rarely used anymore. Typically, if you see a group address, + it will be of the form: "undisclosed-recipients: ;". + + + + + Initializes a new instance of the class. + + + Creates a new with the specified name and list of addresses. The + specified text encoding is used when encoding the name according to the rules of rfc2047. + + The character encoding to be used for encoding the name. + The name of the group. + A list of addresses. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified name and list of addresses. + + The name of the group. + A list of addresses. + + + + Initializes a new instance of the class. + + + Creates a new with the specified name. The specified + text encoding is used when encoding the name according to the rules of rfc2047. + + The character encoding to be used for encoding the name. + The name of the group. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified name. + + The name of the group. + + + + Clone the group address. + + + Clones the group address. + + The cloned group address. + + + + Gets the members of the group. + + + Represents the member addresses of the group. Typically the member addresses + will be of the variety, but it is possible + for groups to contain other groups. + + The list of members. + + + + Returns a string representation of the , + optionally encoding it for transport. + + + Returns a string containing the formatted group of addresses. If the + parameter is true, then the name of the group and all member addresses will be encoded + according to the rules defined in rfc2047, otherwise the names will not be encoded at all and + will therefor only be suitable for display purposes. + + A string representing the . + The formatting options. + If set to true, the will be encoded. + + is null. + + + + + Determines whether the specified is equal to the current . + + + Compares two group addresses to determine if they are identical or not. + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed group address. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed group address. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The parsed group address. + + is null. + -or- + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed group address. + + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The parsed group address. + + is null. + -or- + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The parsed group address. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The text. + The parsed group address. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The text. + The parsed group address. + + is null. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + The parsed . + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + + is null. + + + and do not specify + a valid range in the byte array. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + The starting index of the input buffer. + + is null. + -or- + is null. + + + is out of range. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + The parsed . + The input buffer. + The starting index of the input buffer. + + is null. + + + is out of range. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + + is null. + -or- + is null. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + The parsed . + The input buffer. + + is null. + + + could not be parsed. + + + + + Parses the given text into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + The parsed . + The parser options to use. + The text. + + is null. + -or- + is null. + + + could not be parsed. + + + + + Parses the given text into a new instance. + + + Parses a single . If the address is not a group address or + there is more than a single group address, then parsing will fail. + + The parsed . + The text. + + is null. + + + could not be parsed. + + + + + A class representing a Message or MIME header. + + + Represents a single header field and value pair. + + + + + Initializes a new instance of the class. + + + Creates a new message or entity header for the specified field and + value pair. The encoding is used to determine which charset to use + when encoding the value according to the rules of rfc2047. + + The character encoding that should be used to + encode the header value. + The header identifier. + The value of the header. + + is null. + -or- + is null. + + + is not a valid . + + + + + Initializes a new instance of the class. + + + Creates a new message or entity header for the specified field and + value pair. The encoding is used to determine which charset to use + when encoding the value according to the rules of rfc2047. + + The charset that should be used to encode the + header value. + The header identifier. + The value of the header. + + is null. + -or- + is null. + + + is not a valid . + + + is not supported. + + + + + Initializes a new instance of the class. + + + Creates a new message or entity header for the specified field and + value pair with the UTF-8 encoding. + + The header identifier. + The value of the header. + + is null. + + + is not a valid . + + + + + Initializes a new instance of the class. + + + Creates a new message or entity header for the specified field and + value pair. The encoding is used to determine which charset to use + when encoding the value according to the rules of rfc2047. + + The character encoding that should be used + to encode the header value. + The name of the header field. + The value of the header. + + is null. + -or- + is null. + -or- + is null. + + + The contains illegal characters. + + + + + Initializes a new instance of the class. + + + Creates a new message or entity header for the specified field and + value pair. The encoding is used to determine which charset to use + when encoding the value according to the rules of rfc2047. + + The charset that should be used to encode the + header value. + The name of the header field. + The value of the header. + + is null. + -or- + is null. + -or- + is null. + + + The contains illegal characters. + + + is not supported. + + + + + Initializes a new instance of the class. + + + Creates a new message or entity header for the specified field and + value pair with the UTF-8 encoding. + + The name of the header field. + The value of the header. + + is null. + -or- + is null. + + + The contains illegal characters. + + + + + Clone the header. + + + Clones the header, copying the current RawValue. + + A copy of the header with its current state. + + + + Gets the stream offset of the beginning of the header. + + + If the offset is set, it refers to the byte offset where it + was found in the stream it was parsed from. + + The stream offset. + + + + Gets the name of the header field. + + + Represents the field name of the header. + + The name of the header field. + + + + Gets the header identifier. + + + This property is mainly used for switch-statements for performance reasons. + + The header identifier. + + + + Gets the raw field name of the header. + + + Contains the raw field name of the header. + + The raw field name of the header. + + + + Gets the raw value of the header. + + + Contains the raw value of the header, before any decoding or charset conversion. + + The raw value of the header. + + + + Gets or sets the header value. + + + Represents the decoded header value and is suitable for displaying to the user. + + The header value. + + is null. + + + + + Gets the header value using the specified character encoding. + + + If the raw header value does not properly encode non-ASCII text, the decoder + will fall back to a default charset encoding. Sometimes, however, this + default charset fallback is wrong and the mail client may wish to override + that default charset on a per-header basis. + By using this method, the client is able to override the fallback charset + on a per-header basis. + + The value. + The character encoding to use as a fallback. + + + + Gets the header value using the specified charset. + + + If the raw header value does not properly encode non-ASCII text, the decoder + will fall back to a default charset encoding. Sometimes, however, this + default charset fallback is wrong and the mail client may wish to override + that default charset on a per-header basis. + By using this method, the client is able to override the fallback charset + on a per-header basis. + + The value. + The charset to use as a fallback. + + + + Sets the header value using the specified formatting options and character encoding. + + + When a particular charset is desired for encoding the header value + according to the rules of rfc2047, this method should be used + instead of the setter. + + The formatting options. + A character encoding. + The header value. + + is null. + -or- + is null. + -or- + is null. + + + + + Sets the header value using the specified character encoding. + + + When a particular charset is desired for encoding the header value + according to the rules of rfc2047, this method should be used + instead of the setter. + + A character encoding. + The header value. + + is null. + -or- + is null. + + + + + Sets the header value using the specified formatting options and charset. + + + When a particular charset is desired for encoding the header value + according to the rules of rfc2047, this method should be used + instead of the setter. + + The formatting options. + A charset encoding. + The header value. + + is null. + -or- + is null. + -or- + is null. + + + is not supported. + + + + + Sets the header value using the specified charset. + + + When a particular charset is desired for encoding the header value + according to the rules of rfc2047, this method should be used + instead of the setter. + + A charset encoding. + The header value. + + is null. + -or- + is null. + + + is not supported. + + + + + Returns a string representation of the header. + + + Formats the header field and value in a way that is suitable for display. + + A string representing the . + + + + Unfold the specified header value. + + + Unfolds the header value so that it becomes suitable for display. + Since is already unfolded, this method is really + only needed when working with raw header strings. + + The unfolded header value. + The header text. + + + + Tries to parse the given input buffer into a new instance. + + + Parses a header from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the header was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed header. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a header from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the header was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed header. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a header from the supplied buffer starting at the specified index. + + true, if the header was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The parsed header. + + is null. + -or- + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a header from the supplied buffer starting at the specified index. + + true, if the header was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed header. + + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a header from the specified buffer. + + true, if the header was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The parsed header. + + is null. + -or- + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a header from the specified buffer. + + true, if the header was successfully parsed, false otherwise. + The input buffer. + The parsed header. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a header from the specified text. + + true, if the header was successfully parsed, false otherwise. + The parser options to use. + The text to parse. + The parsed header. + + is null. + -or- + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a header from the specified text. + + true, if the header was successfully parsed, false otherwise. + The text to parse. + The parsed header. + + is null. + + + + + An enumeration of common header fields. + + + Comparing enum values is not only faster, but less error prone than + comparing strings. + + + + + The Ad-Hoc header field. + + + + + The Apparently-To header field. + + + + + The Approved header field. + + + + + The Article header field. + + + + + The Bcc header field. + + + + + The Bytes header field. + + + + + The Cc header field. + + + + + The Comments header field. + + + + + The Content-Base header field. + + + + + The Content-Class header field. + + + + + The Content-Description header field. + + + + + The Content-Disposition header field. + + + + + The Content-Duration header field. + + + + + The Content-Id header field. + + + + + The Content-Language header field. + + + + + The Content-Length header field. + + + + + The Content-Location header field. + + + + + The Content-Md5 header field. + + + + + The Content-Transfer-Encoding header field. + + + + + The Content-Type header field. + + + + + The Control header field. + + + + + The Date header field. + + + + + The Deferred-Delivery header field. + + + + + The Disposition-Notification-Options header field. + + + + + The Disposition-Notification-To header field. + + + + + The Distribution header field. + + + + + The DKIM-Signature header field. + + + + + The DomainKey-Signature header field. + + + + + The Encoding header field. + + + + + The Encrypted header field. + + + + + The Expires header field. + + + + + The Expiry-Date header field. + + + + + The Followup-To header field. + + + + + The From header field. + + + + + The Importance header field. + + + + + The In-Reply-To header field. + + + + + The Keywords header field. + + + + + The Lines header field. + + + + + The List-Help header field. + + + + + The List-Subscribe header field. + + + + + The List-Unsubscribe header field. + + + + + The Message-Id header field. + + + + + The MIME-Version header field. + + + + + The Newsgroups header field. + + + + + The Nntp-Posting-Host header field. + + + + + The Organization header field. + + + + + The Original-Recipient header field. + + + + + The Path header field. + + + + + The Precedence header field. + + + + + The Priority header field. + + + + + The Received header field. + + + + + The References header field. + + + + + The Reply-By header field. + + + + + The Reply-To header field. + + + + + The Resent-Bcc header field. + + + + + The Resent-Cc header field. + + + + + The Resent-Date header field. + + + + + The Resent-From header field. + + + + + The Resent-Message-Id header field. + + + + + The Resent-Reply-To header field. + + + + + The Resent-Sender header field. + + + + + The Resent-To header field. + + + + + The Return-Path header field. + + + + + The Return-Receipt-To header field. + + + + + The Sender header field. + + + + + The Sensitivity header field. + + + + + The Status header field. + + + + + The Subject header field. + + + + + The Summary header field. + + + + + The Supersedes header field. + + + + + The To header field. + + + + + The User-Agent header field. + + + + + The X-Mailer header field. + + + + + The X-MSMail-Priority header field. + + + + + The X-Priority header field. + + + + + The X-Status header field. + + + + + An unknown header field. + + + + + extension methods. + + + extension methods. + + + + + Converts the enum value into the equivalent header field name. + + + Converts the enum value into the equivalent header field name. + + The header name. + The enum value. + + + + A list of s. + + + Represents a list of headers as found in a + or . + + + + + Initializes a new instance of the class. + + + Creates a new empty header list. + + + + + Adds a header with the specified field and value. + + + Adds a new header for the specified field and value pair. + + The header identifier. + The header value. + + is null. + + + is not a valid . + + + + + Adds a header with the specified field and value. + + + Adds a new header for the specified field and value pair. + + The name of the header field. + The header value. + + is null. + -or- + is null. + + + The contains illegal characters. + + + + + Adds a header with the specified field and value. + + + Adds a new header for the specified field and value pair. + + The header identifier. + The character encoding to use for the value. + The header value. + + is null. + -or- + is null. + + + is not a valid . + + + + + Adds a header with the specified field and value. + + + Adds a new header for the specified field and value pair. + + The name of the header field. + The character encoding to use for the value. + The header value. + + is null. + -or- + is null. + -or- + is null. + + + The contains illegal characters. + + + + + Checks if the contains a header with the specified field name. + + + Determines whether or not the header list contains the specified header. + + true if the requested header exists; + otherwise false. + The header identifier. + + is not a valid . + + + + + Checks if the contains a header with the specified field name. + + + Determines whether or not the header list contains the specified header. + + true if the requested header exists; + otherwise false. + The name of the header field. + + is null. + + + + + Gets the index of the requested header, if it exists. + + + Finds the first index of the specified header, if it exists. + + The index of the requested header; otherwise -1. + The header id. + + is not a valid . + + + + + Gets the index of the requested header, if it exists. + + + Finds the first index of the specified header, if it exists. + + The index of the requested header; otherwise -1. + The name of the header field. + + is null. + + + + + Inserts a header with the specified field and value at the given index. + + + Inserts the header at the specified index in the list. + + The index to insert the header. + The header identifier. + The header value. + + is null. + + + is not a valid . + -or- + is out of range. + + + + + Inserts a header with the specified field and value at the given index. + + + Inserts the header at the specified index in the list. + + The index to insert the header. + The name of the header field. + The header value. + + is null. + -or- + is null. + + + The contains illegal characters. + + + is out of range. + + + + + Inserts a header with the specified field and value at the given index. + + + Inserts the header at the specified index in the list. + + The index to insert the header. + The header identifier. + The character encoding to use for the value. + The header value. + + is null. + -or- + is null. + + + is not a valid . + -or- + is out of range. + + + + + Inserts a header with the specified field and value at the given index. + + + Inserts the header at the specified index in the list. + + The index to insert the header. + The name of the header field. + The character encoding to use for the value. + The header value. + + is null. + -or- + is null. + -or- + is null. + + + The contains illegal characters. + + + is out of range. + + + + + Gets the last index of the requested header, if it exists. + + + Finds the last index of the specified header, if it exists. + + The last index of the requested header; otherwise -1. + The header id. + + is not a valid . + + + + + Gets the last index of the requested header, if it exists. + + + Finds the last index of the specified header, if it exists. + + The last index of the requested header; otherwise -1. + The name of the header field. + + is null. + + + + + Removes the first occurance of the specified header field. + + + Removes the first occurance of the specified header field, if any exist. + + true if the first occurance of the specified + header was removed; otherwise false. + The header identifier. + + is is not a valid . + + + + + Removes the first occurance of the specified header field. + + + Removes the first occurance of the specified header field, if any exist. + + true if the first occurance of the specified + header was removed; otherwise false. + The name of the header field. + + is null. + + + + + Removes all of the headers matching the specified field name. + + + Removes all of the headers matching the specified field name. + + The header identifier. + + is not a valid . + + + + + Removes all of the headers matching the specified field name. + + + Removes all of the headers matching the specified field name. + + The name of the header field. + + is null. + + + + + Replaces all headers with identical field names with the single specified header. + + + Replaces all headers with identical field names with the single specified header. + If no headers with the specified field name exist, it is simply added. + + The header identifier. + The character encoding to use for the value. + The header value. + + is null. + -or- + is null. + + + is not a valid . + + + + + Replaces all headers with identical field names with the single specified header. + + + Replaces all headers with identical field names with the single specified header. + If no headers with the specified field name exist, it is simply added. + + The header identifier. + The header value. + + is null. + + + is not a valid . + + + + + Replaces all headers with identical field names with the single specified header. + + + Replaces all headers with identical field names with the single specified header. + If no headers with the specified field name exist, it is simply added. + + The name of the header field. + The character encoding to use for the value. + The header value. + + is null. + -or- + is null. + -or- + is null. + + + + + Replaces all headers with identical field names with the single specified header. + + + Replaces all headers with identical field names with the single specified header. + If no headers with the specified field name exist, it is simply added. + + The name of the header field. + The header value. + + is null. + -or- + is null. + + + The contains illegal characters. + + + + + Gets or sets the value of the first occurance of a header + with the specified field name. + + + Gets or sets the value of the first occurance of a header + with the specified field name. + + The value of the first occurrance of the specified header if it exists; otherwise null. + The header identifier. + + is null. + + + + + Gets or sets the value of the first occurance of a header + with the specified field name. + + + Gets or sets the value of the first occurance of a header + with the specified field name. + + The value of the first occurrance of the specified header if it exists; otherwise null. + The name of the header field. + + is null. + -or- + is null. + + + + + Writes the to the specified output stream. + + + Writes all of the headers to the output stream. + + The formatting options. + The output stream. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Writes the to the specified output stream. + + + Writes all of the headers to the output stream. + + The output stream. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Gets the number of headers in the list. + + + Gets the number of headers in the list. + + The number of headers. + + + + Gets whether or not the header list is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Adds the specified header. + + + Adds the specified header to the end of the header list. + + The header to add. + + is null. + + + + + Clears the header list. + + + Removes all of the headers from the list. + + + + + Checks if the contains the specified header. + + + Determines whether or not the header list contains the specified header. + + true if the specified header is contained; + otherwise, false. + The header. + + is null. + + + + + Copies all of the headers in the to the specified array. + + + Copies all of the headers within the into the array, + starting at the specified array index. + + The array to copy the headers to. + The index into the array. + + is null. + + + is out of range. + + + + + Removes the specified header. + + + Removes the specified header from the list if it exists. + + true if the specified header was removed; + otherwise false. + The header. + + is null. + + + + + Replaces all headers with identical field names with the single specified header. + + + Replaces all headers with identical field names with the single specified header. + If no headers with the specified field name exist, it is simply added. + + The header. + + is null. + + + + + Gets the index of the requested header, if it exists. + + + Finds the index of the specified header, if it exists. + + The index of the requested header; otherwise -1. + The header. + + is null. + + + + + Inserts the specified header at the given index. + + + Inserts the header at the specified index in the list. + + The index to insert the header. + The header. + + is null. + + + is out of range. + + + + + Removes the header at the specified index. + + + Removes the header at the specified index. + + The index. + + is out of range. + + + + + Gets or sets the at the specified index. + + + Gets or sets the at the specified index. + + The header at the specified index. + The index. + + is null. + + + is out of range. + + + + + Gets an enumerator for the list of headers. + + + Gets an enumerator for the list of headers. + + The enumerator. + + + + Gets an enumerator for the list of headers. + + + Gets an enumerator for the list of headers. + + The enumerator. + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + specified . + + The parsed list of headers. + The parser options. + The stream. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the headers. + + + An I/O error occurred. + + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + default . + + The parsed list of headers. + The stream. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified file. + + + Loads a from the file at the give file path, + using the specified . + + The parsed list of headers. + The parser options. + The name of the file to load. + A cancellation token. + + is null. + -or- + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to read the specified file. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the headers. + + + An I/O error occurred. + + + + + Load a from the specified file. + + + Loads a from the file at the give file path, + using the default . + + The parsed list of headers. + The name of the file to load. + A cancellation token. + + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to read the specified file. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the headers. + + + An I/O error occurred. + + + + + Header list changed action. + + + Specifies the way that a was changed. + + + + + A header was added. + + + + + A header was changed. + + + + + A header was removed. + + + + + The header list was cleared. + + + + + A collection of groups. + + + A collection of groups used with + . + + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Gets the number of groups in the collection. + + + Gets the number of groups in the collection. + + The number of groups. + + + + Gets whether or not the header list collection is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Gets or sets the at the specified index. + + + Gets or sets the at the specified index. + + The group of headers at the specified index. + The index. + + is null. + + + is out of range. + + + + + Adds the group of headers to the collection. + + + Adds the group of headers to the collection. + + The group of headers. + + is null. + + + + + Clears the header list collection. + + + Removes all of the groups from the collection. + + + + + Checks if the collection contains the specified group of headers. + + + Determines whether or not the collection contains the specified group of headers. + + true if the specified group of headers is contained; + otherwise, false. + The group of headers. + + is null. + + + + + Copies all of the header groups in the to the specified array. + + + Copies all of the header groups within the into the array, + starting at the specified array index. + + The array to copy the headers to. + The index into the array. + + is null. + + + is out of range. + + + + + Removes the specified header group. + + + Removes the specified header group from the collection, if it exists. + + true if the specified header group was removed; + otherwise false. + The group of headers. + + is null. + + + + + Gets an enumerator for the groups of headers. + + + Gets an enumerator for the groups of headers. + + The enumerator. + + + + Gets an enumerator for the groups of headers. + + + Gets an enumerator for the groups of headers. + + The enumerator. + + + + An interface for content stream encapsulation as used by . + + + Implemented by . + + + + + Gets the content encoding. + + + If the is not encoded, this value will be + . Otherwise, it will be + set to the raw content encoding of the stream. + + The encoding. + + + + Gets the content stream. + + + Gets the content stream. + + The stream. + + + + Opens the decoded content stream. + + + Provides a means of reading the decoded content without having to first write it to another + stream using . + + The decoded content stream. + + + + Decodes the content stream into another stream. + + + If the content stream is encoded, this method will decode it into the + output stream using a suitable decoder. + + The output stream. + A cancellation token. + + is null. + + + The operation was cancelled via the cancellation token. + + + An I/O error occurred. + + + + + Copies the content stream to the specified output stream. + + + Copies the data from into . + + The output stream. + A cancellation token. + + is null. + + + The operation was cancelled via the cancellation token. + + + An I/O error occurred. + + + + + An internet address, as specified by rfc0822. + + + A can be any type of address defined by the + original Internet Message specification. + There are effectively two (2) types of addresses: mailboxes and groups. + Mailbox addresses are what are most commonly known as email addresses and are + represented by the class. + Group addresses are themselves lists of addresses and are represented by the + class. While rare, it is still important to handle these + types of addresses. They typically only contain mailbox addresses, but may also + contain other group addresses. + + + + + Initializes a new instance of the class. + + + Initializes the and properties of the internet address. + + The character encoding to be used for encoding the name. + The name of the mailbox or group. + + is null. + + + + + Gets or sets the character encoding to use when encoding the name of the address. + + + The character encoding is used to convert the property, if it is set, + to a stream of bytes when encoding the internet address for transport. + + The character encoding. + + is null. + + + + + Gets or sets the display name of the address. + + + A name is optional and is typically set to the name of the person + or group that own the internet address. + + The name of the address. + + + + Clone the address. + + + Clones the address. + + The cloned address. + + + + Compares two internet addresses. + + + Compares two internet addresses for the purpose of sorting. + + The sort order of the current internet address compared to the other internet address. + The internet address to compare to. + + is null. + + + + + Determines whether the specified is equal to the current . + + + Compares two internet addresses to determine if they are identical or not. + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Returns a string representation of the , + optionally encoding it for transport. + + + If the parameter is true, then this method will return + an encoded version of the internet address according to the rules described in rfc2047. + However, if the parameter is false, then this method will + return a string suitable only for display purposes. + + A string representing the . + The formatting options. + If set to true, the will be encoded. + + is null. + + + + + Returns a string representation of the , + optionally encoding it for transport. + + + If the parameter is true, then this method will return + an encoded version of the internet address according to the rules described in rfc2047. + However, if the parameter is false, then this method will + return a string suitable only for display purposes. + + A string representing the . + If set to true, the will be encoded. + + + + Returns a string representation of a suitable for display. + + + The string returned by this method is suitable only for display purposes. + + A string representing the . + + + + Raises the internal changed event used by to keep headers in sync. + + + This method is called whenever a property of the internet address is changed. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed address. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed address. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The parsed address. + + is null. + -or- + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed address. + + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The parsed address. + + is null. + -or- + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The parsed address. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a single or . If the text contains + more data, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The text. + The parsed address. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a single or . If the text contains + more data, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The text. + The parsed address. + + is null. + + + + + Parses the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + The parsed . + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + + is null. + + + and do not specify + a valid range in the byte array. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + The starting index of the input buffer. + + is null. + -or- + is null. + + + is out of range. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + The parsed . + The input buffer. + The starting index of the input buffer. + + is null. + + + is out of range. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + + is null. + -or- + is null. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single or . If the buffer contains + more data, then parsing will fail. + + The parsed . + The input buffer. + + is null. + + + could not be parsed. + + + + + Parses the given text into a new instance. + + + Parses a single or . If the text contains + more data, then parsing will fail. + + The parsed . + The parser options to use. + The text. + + is null. + -or- + is null. + + + could not be parsed. + + + + + Parses the given text into a new instance. + + + Parses a single or . If the text contains + more data, then parsing will fail. + + The parsed . + The text. + + is null. + + + could not be parsed. + + + + + A list of email addresses. + + + An may contain any number of addresses of any type + defined by the original Internet Message specification. + There are effectively two (2) types of addresses: mailboxes and groups. + Mailbox addresses are what are most commonly known as email addresses and are + represented by the class. + Group addresses are themselves lists of addresses and are represented by the + class. While rare, it is still important to handle these + types of addresses. They typically only contain mailbox addresses, but may also + contain other group addresses. + + + + + Initializes a new instance of the class. + + + Creates a new containing the supplied addresses. + + An initial list of addresses. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new, empty, . + + + + + Recursively gets all of the mailboxes contained within the . + + + This API is useful for collecting a flattened list of + recipients for use with sending via SMTP or for encrypting via S/MIME or PGP/MIME. + + The mailboxes. + + + + Gets the index of the specified address. + + + Finds the index of the specified address, if it exists. + + The index of the specified address if found; otherwise -1. + The address to get the index of. + + is null. + + + + + Inserts the address at the specified index. + + + Inserts the address at the specified index in the list. + + The index to insert the address. + The address. + + is null. + + + is out of range. + + + + + Removes the address at the specified index. + + + Removes the address at the specified index. + + The index of the address to remove. + + is out of range. + + + + + Gets or sets the at the specified index. + + + Gets or sets the at the specified index. + + The internet address at the specified index. + The index of the address to get or set. + + is null. + + + is out of range. + + + + + Gets the number of addresses in the . + + + Indicates the number of addresses in the list. + + The number of addresses. + + + + Gets a value indicating whether this instance is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Adds the specified address. + + + Adds the specified address to the end of the address list. + + The address. + + is null. + + + + + Adds a collection of addresses. + + + Adds a range of addresses to the end of the address list. + + A colelction of addresses. + + is null. + + + + + Clears the address list. + + + Removes all of the addresses from the list. + + + + + Checks if the contains the specified address. + + + Determines whether or not the address list contains the specified address. + + true if the specified address exists; + otherwise false. + The address. + + is null. + + + + + Copies all of the addresses in the to the specified array. + + + Copies all of the addresses within the into the array, + starting at the specified array index. + + The array to copy the addresses to. + The index into the array. + + is null. + + + is out of range. + + + + + Removes the specified address. + + + Removes the specified address. + + true if the address was removed; otherwise false. + The address. + + is null. + + + + + Gets an enumerator for the list of addresses. + + + Gets an enumerator for the list of addresses. + + The enumerator. + + + + Gets an enumerator for the list of addresses. + + + Gets an enumerator for the list of addresses. + + The enumerator. + + + + Determines whether the specified is equal to the current . + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Compares two internet address lists. + + + Compares two internet address lists for the purpose of sorting. + + The sort order of the current internet address list compared to the other internet address list. + The internet address list to compare to. + + is null. + + + + + Returns a string representation of the email addresses in the , + optionally encoding them for transport. + + + If is true, each address in the list will be encoded + according to the rules defined in rfc2047. + If there are multiple addresses in the list, they will be separated by a comma. + + A string representing the . + The formatting options. + If set to true, each in the list will be encoded. + + + + Returns a string representation of the email addresses in the , + optionally encoding them for transport. + + + If is true, each address in the list will be encoded + according to the rules defined in rfc2047. + If there are multiple addresses in the list, they will be separated by a comma. + + A string representing the . + If set to true, each in the list will be encoded. + + + + Returns a string representation of the email addresses in the . + + + If there are multiple addresses in the list, they will be separated by a comma. + + A string representing the . + + + + Tries to parse the given input buffer into a new instance. + + + Parses a list of addresses from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the address list was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed addresses. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a list of addresses from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + true, if the address list was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed addresses. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a list of addresses from the supplied buffer starting at the specified index. + + true, if the address list was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The parsed addresses. + + is null. + -or- + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a list of addresses from the supplied buffer starting at the specified index. + + true, if the address list was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed addresses. + + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a list of addresses from the specified buffer. + + true, if the address list was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The parsed addresses. + + is null. + -or- + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a list of addresses from the specified buffer. + + true, if the address list was successfully parsed, false otherwise. + The input buffer. + The parsed addresses. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a list of addresses from the specified text. + + true, if the address list was successfully parsed, false otherwise. + The parser options to use. + The text. + The parsed addresses. + + is null. + -or- + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a list of addresses from the specified text. + + true, if the address list was successfully parsed, false otherwise. + The text. + The parsed addresses. + + is null. + + + + + Parses the given input buffer into a new instance. + + + Parses a list of addresses from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + The parsed . + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a list of addresses from the supplied buffer starting at the given index + and spanning across the specified number of bytes. + + The parsed . + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + + is null. + + + and do not specify + a valid range in the byte array. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a list of addresses from the supplied buffer starting at the specified index. + + The parsed . + The parser options to use. + The input buffer. + The starting index of the input buffer. + + is null. + -or- + is null. + + + is out of range. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a list of addresses from the supplied buffer starting at the specified index. + + The parsed . + The input buffer. + The starting index of the input buffer. + + is null. + + + is out of range. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a list of addresses from the specified buffer. + + The parsed . + The parser options to use. + The input buffer. + + is null. + -or- + is null. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a list of addresses from the specified buffer. + + The parsed . + The input buffer. + + is null. + + + could not be parsed. + + + + + Parses the given text into a new instance. + + + Parses a list of addresses from the specified text. + + The parsed . + The parser options to use. + The text. + + is null. + -or- + is null. + + + could not be parsed. + + + + + Parses the given text into a new instance. + + + Parses a list of addresses from the specified text. + + The parsed . + The text. + + is null. + + + could not be parsed. + + + + + Explicit cast to convert a to a + . + + + Casts a to a + in cases where you might want to make use of the System.Net.Mail APIs. + + The equivalent . + The addresses. + + contains one or more group addresses and cannot be converted. + + + + + Explicit cast to convert a + to a . + + + Casts a to a + in cases where you might want to make use of the the superior MimeKit APIs. + + The equivalent . + The mail address. + + + + A mailbox address, as specified by rfc822. + + + Represents a mailbox address (commonly referred to as an email address) + for a single recipient. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified name, address and route. The + specified text encoding is used when encoding the name according to the rules of rfc2047. + + The character encoding to be used for encoding the name. + The name of the mailbox. + The route of the mailbox. + The address of the mailbox. + + is null. + -or- + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified name, address and route. + + The name of the mailbox. + The route of the mailbox. + The address of the mailbox. + + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified name and address. The + specified text encoding is used when encoding the name according to the rules of rfc2047. + + The character encoding to be used for encoding the name. + The name of the mailbox. + The address of the mailbox. + + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified name and address. + + The name of the mailbox. + The address of the mailbox. + + is null. + + + + + Clone the mailbox address. + + + Clones the mailbox address. + + The cloned mailbox address. + + + + Gets the mailbox route. + + + A route is convention that is rarely seen in modern email systems, but is supported + for compatibility with email archives. + + The mailbox route. + + + + Gets or sets the mailbox address. + + + Represents the actual email address and is in the form of "name@example.com". + + The mailbox address. + + is null. + + + + + Gets whether or not the address is an international address. + + + International addresses are addresses that contain international + characters in either their local-parts or their domains. + For more information, see section 3.2 of + rfc6532. + + true if the address is an international address; otherwise, false. + + + + Returns a string representation of the , + optionally encoding it for transport. + + + Returns a string containing the formatted mailbox address. If the + parameter is true, then the mailbox name will be encoded according to the rules defined + in rfc2047, otherwise the name will not be encoded at all and will therefor only be suitable + for display purposes. + + A string representing the . + The formatting options. + If set to true, the will be encoded. + + is null. + + + + + Determines whether the specified is equal to the current . + + + Compares two mailbox addresses to determine if they are identical or not. + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed mailbox address. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + The parsed mailbox address. + + is null. + + + and do not specify + a valid range in the byte array. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The starting index of the input buffer. + The parsed mailbox address. + + is null. + -or- + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The starting index of the input buffer. + The parsed mailbox address. + + is null. + + + is out of range. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The input buffer. + The parsed mailbox address. + + is null. + -or- + is null. + + + + + Tries to parse the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The input buffer. + The parsed mailbox address. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The parser options to use. + The text. + The parsed mailbox address. + + is null. + + + + + Tries to parse the given text into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + true, if the address was successfully parsed, false otherwise. + The text. + The parsed mailbox address. + + is null. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + + is null. + -or- + is null. + + + and do not specify + a valid range in the byte array. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + The parsed . + The input buffer. + The starting index of the input buffer. + The number of bytes in the input buffer to parse. + + is null. + + + and do not specify + a valid range in the byte array. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + The starting index of the input buffer. + + is null. + -or- + is null. + + + is out of range. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + The parsed . + The input buffer. + The starting index of the input buffer. + + is null. + + + is out of range. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + The parsed . + The parser options to use. + The input buffer. + + is null. + -or- + is null. + + + could not be parsed. + + + + + Parses the given input buffer into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + The parsed . + The input buffer. + + is null. + + + could not be parsed. + + + + + Parses the given text into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + The parsed . + The parser options to use. + The text. + + is null. + -or- + is null. + + + could not be parsed. + + + + + Parses the given text into a new instance. + + + Parses a single . If the address is not a mailbox address or + there is more than a single mailbox address, then parsing will fail. + + The parsed . + The text. + + is null. + + + could not be parsed. + + + + + Explicit cast to convert a to a + . + + + Casts a to a + in cases where you might want to make use of the System.Net.Mail APIs. + + The equivalent . + The mailbox. + + + + Explicit cast to convert a + to a . + + + Casts a to a + in cases where you might want to make use of the the superior MimeKit APIs. + + The equivalent . + The mail address. + + + + A message delivery status MIME part. + + + A message delivery status MIME part is a machine readable notification denoting the + delivery status of a message and has a MIME-type of message/delivery-status. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Get the groups of delivery status fields. + + + Gets the groups of delivery status fields. The first group of fields + contains the per-message fields while each of the following groups + contains fields that pertain to particular recipients of the message. + + The fields. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + A message disposition notification MIME part. + + + A message disposition notification MIME part is a machine readable notification + denoting the disposition of a message once it has been successfully delivered + and has a MIME-type of message/disposition-notification. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + + + + Get the disposition notification fields. + + + Gets the disposition notification fields. + + The fields. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + A list of Message-Ids. + + + Used by the property. + + + + + Initializes a new instance of the class. + + + Creates a new, empty, . + + + + + Clones the . + + + Creates an exact copy of the . + + An exact copy of the . + + + + Gets the index of the requested Message-Id, if it exists. + + + Finds the index of the specified Message-Id, if it exists. + + The index of the requested Message-Id; otherwise -1. + The Message-Id. + + is null. + + + + + Insert the Message-Id at the specified index. + + + Inserts the Message-Id at the specified index in the list. + + The index to insert the Message-Id. + The Message-Id to insert. + + is null. + + + is out of range. + + + + + Removes the Message-Id at the specified index. + + + Removes the Message-Id at the specified index. + + The index. + + is out of range. + + + + + Gets or sets the at the specified index. + + + Gets or sets the Message-Id at the specified index. + + The Message-Id at the specified index. + The index. + + is null. + + + is out of range. + + + + + Add the specified Message-Id. + + + Adds the specified Message-Id to the end of the list. + + The Message-Id. + + is null. + + + + + Add a collection of Message-Id items. + + + Adds a collection of Message-Id items to append to the list. + + The Message-Id items to add. + + is null. + + + + + Clears the Message-Id list. + + + Removes all of the Message-Ids in the list. + + + + + Checks if the contains the specified Message-Id. + + + Determines whether or not the list contains the specified Message-Id. + + true if the specified Message-Id is contained; + otherwise false. + The Message-Id. + + is null. + + + + + Copies all of the Message-Ids in the to the specified array. + + + Copies all of the Message-Ids within the into the array, + starting at the specified array index. + + The array to copy the Message-Ids to. + The index into the array. + + is null. + + + is out of range. + + + + + Removes the specified Message-Id. + + + Removes the first instance of the specified Message-Id from the list if it exists. + + true if the specified Message-Id was removed; + otherwise false. + The Message-Id. + + is null. + + + + + Gets the number of Message-Ids in the . + + + Indicates the number of Message-Ids in the list. + + The number of Message-Ids. + + + + Gets a value indicating whether this instance is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Gets an enumerator for the list of Message-Ids. + + + Gets an enumerator for the list of Message-Ids. + + The enumerator. + + + + Gets an enumerator for the list of Message-Ids. + + + Gets an enumerator for the list of Message-Ids. + + The enumerator. + + + + Returns a string representation of the list of Message-Ids. + + + Each Message-Id will be surrounded by angle brackets. + If there are multiple Message-Ids in the list, they will be separated by whitespace. + + A string representing the . + + + + An enumeration of message importance values. + + + Indicates the importance of a message. + + + + + The message is of low importance. + + + + + The message is of normal importance. + + + + + The message is of high importance. + + + + + A MIME part containing a as its content. + + + Represents MIME entities such as those with a Content-Type of message/rfc822 or message/news. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The message subtype. + An array of initialization parameters: headers and message parts. + + is null. + -or- + is null. + + + contains more than one . + -or- + contains one or more arguments of an unknown type. + + + + + Initializes a new instance of the class. + + + Creates a new MIME message entity with the specified subtype. + + The message subtype. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new message/rfc822 MIME entity. + + + + + Gets or sets the message content. + + + Gets or sets the message content. + + The message content. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Prepare the MIME entity for transport using the specified encoding constraints. + + + Prepares the MIME entity for transport using the specified encoding constraints. + + The encoding constraint. + The maximum number of octets allowed per line (not counting the CRLF). Must be between 60 and 998 (inclusive). + + is not between 60 and 998 (inclusive). + -or- + is not a valid value. + + + + + Writes the to the output stream. + + + Writes the MIME entity and its message to the output stream. + + The formatting options. + The output stream. + true if only the content should be written; otherwise, false. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + A MIME part containing a partial message as its content. + + + The "message/partial" MIME-type is used to split large messages into + multiple parts, typically to work around transport systems that have size + limitations (for example, some SMTP servers limit have a maximum message + size that they will accept). + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new message/partial entity. + Three (3) parameters must be specified in the Content-Type header + of a message/partial: id, number, and total. + The "id" parameter is a unique identifier used to match the parts together. + The "number" parameter is the sequential (1-based) index of the partial message fragment. + The "total" parameter is the total number of pieces that make up the complete message. + + The id value shared among the partial message parts. + The (1-based) part number for this partial message part. + The total number of partial message parts. + + is null. + + + is less than 1. + -or- + is less than . + + + + + Gets the "id" parameter of the Content-Type header. + + + The "id" parameter is a unique identifier used to match the parts together. + + The identifier. + + + + Gets the "number" parameter of the Content-Type header. + + + The "number" parameter is the sequential (1-based) index of the partial message fragment. + + The part number. + + + + Gets the "total" parameter of the Content-Type header. + + + The "total" parameter is the total number of pieces that make up the complete message. + + The total number of parts. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Splits the specified message into multiple messages. + + + Splits the specified message into multiple messages, each with a + message/partial body no larger than the max size specified. + + An enumeration of partial messages. + The message. + The maximum size for each message body. + + is null. + + + is less than 1. + + + + + Joins the specified message/partial parts into the complete message. + + + Combines all of the message/partial fragments into its original, + complete, message. + + The re-combined message. + The parser options to use. + The list of partial message parts. + + is null. + -or- + is null. + + + The last partial does not have a Total. + -or- + The number of partials provided does not match the expected count. + -or- + One or more partials is missing. + + + + + Joins the specified message/partial parts into the complete message. + + + Combines all of the message/partial fragments into its original, + complete, message. + + The re-combined message. + The list of partial message parts. + + is null. + + + + + An enumeration of message priority values. + + + Indicates the priority of a message. + + + + + The message has normal priority. + + + + + The message has non-urgent priority. + + + + + The message has urgent priority. + + + + + An abstract MIME entity. + + + A MIME entity is really just a node in a tree structure of MIME parts in a MIME message. + There are 3 basic types of entities: , , + and (which is actually just a special variation of + who's content is another MIME message/document). All other types are + derivatives of one of those. + + + + + Initializes a new instance of the class + based on the . + + + Custom subclasses MUST implement this constructor + in order to register it using . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Initializes the based on the provided media type and subtype. + + The media type. + The media subtype. + + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Initializes the to the one provided. + + The content type. + + is null. + + + + + Tries to use the given object to initialize the appropriate property. + + + Initializes the appropriate property based on the type of the object. + + The object. + true if the object was recognized and used; false otherwise. + + + + Gets the list of headers. + + + Represents the list of headers for a MIME part. Typically, the headers of + a MIME part will be various Content-* headers such as Content-Type or + Content-Disposition, but may include just about anything. + + The list of headers. + + + + Gets or sets the content disposition. + + + Represents the pre-parsed Content-Disposition header value, if present. + If the Content-Disposition header is not set, then this property will + be null. + + The content disposition. + + + + Gets the type of the content. + + + The Content-Type header specifies information about the type of content contained + within the MIME entity. + + The type of the content. + + + + Gets or sets the base content URI. + + + The Content-Base header specifies the base URI for the + in cases where the is a relative URI. + The Content-Base URI must be an absolute URI. + For more information, see rfc2110. + + The base content URI or null. + + is not an absolute URI. + + + + + Gets or sets the content location. + + + The Content-Location header specifies the URI for a MIME entity and can be + either absolute or relative. + Setting a Content-Location URI allows other objects + within the same multipart/related container to reference this part by URI. This + can be useful, for example, when constructing an HTML message body that needs to + reference image attachments. + For more information, see rfc2110. + + The content location or null. + + + + Gets or sets the content identifier. + + + The Content-Id header is used for uniquely identifying a particular entity and + uses the same syntax as the Message-Id header on MIME messages. + Setting a Content-Id allows other objects within the same + multipart/related container to reference this part by its unique identifier, typically + by using a "cid:" URI in an HTML-formatted message body. This can be useful, for example, + when the HTML-formatted message body needs to reference image attachments. + + The content identifier. + + + + Gets a value indicating whether this is an attachment. + + + If the Content-Disposition header is set and has a value of "attachment", + then this property returns true. Otherwise it is assumed that the + is not meant to be treated as an attachment. + + true if this is an attachment; otherwise, false. + + + + Returns a that represents the current . + + + Returns a that represents the current . + + A that represents the current . + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Prepare the MIME entity for transport using the specified encoding constraints. + + + Prepares the MIME entity for transport using the specified encoding constraints. + + The encoding constraint. + The maximum allowable length for a line (not counting the CRLF). Must be between 72 and 998 (inclusive). + + is not between 72 and 998 (inclusive). + -or- + is not a valid value. + + + + + Writes the to the specified output stream. + + + Writes the headers to the output stream, followed by a blank line. + Subclasses should override this method to write the content of the entity. + + The formatting options. + The output stream. + true if only the content should be written; otherwise, false. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Writes the to the specified output stream. + + + Writes the headers to the output stream, followed by a blank line. + Subclasses should override this method to write the content of the entity. + + The formatting options. + The output stream. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Writes the to the specified output stream. + + + Writes the entity to the output stream. + + The output stream. + true if only the content should be written; otherwise, false. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Writes the to the specified output stream. + + + Writes the entity to the output stream. + + The output stream. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Writes the to the specified file. + + + Writes the to the specified file using the provided formatting options. + + The formatting options. + The file. + true if only the content should be written; otherwise, false. + A cancellation token. + + is null. + -or- + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + The operation was canceled via the cancellation token. + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to write to the specified file. + + + An I/O error occurred. + + + + + Writes the to the specified file. + + + Writes the to the specified file using the provided formatting options. + + The formatting options. + The file. + A cancellation token. + + is null. + -or- + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + The operation was canceled via the cancellation token. + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to write to the specified file. + + + An I/O error occurred. + + + + + Writes the to the specified file. + + + Writes the to the specified file using the default formatting options. + + The file. + true if only the content should be written; otherwise, false. + A cancellation token. + + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + The operation was canceled via the cancellation token. + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to write to the specified file. + + + An I/O error occurred. + + + + + Writes the to the specified file. + + + Writes the to the specified file using the default formatting options. + + The file. + A cancellation token. + + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + The operation was canceled via the cancellation token. + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to write to the specified file. + + + An I/O error occurred. + + + + + Removes the header. + + + Removes all headers matching the specified name without + calling . + + The name of the header. + + + + Sets the header. + + + Sets the header to the specified value without + calling . + + The name of the header. + The value of the header. + + + + Sets the header using the raw value. + + + Sets the header to the specified value without + calling . + + The name of the header. + The raw value of the header. + + + + Called when the headers change in some way. + + + Whenever a header is added, changed, or removed, this method will + be called in order to allow custom subclasses + to update their state. + Overrides of this method should call the base method so that their + superclass may also update its own state. + + The type of change. + The header being added, changed or removed. + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + specified . + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save mmeory usage, but also improve + performance. + + The parsed MIME entity. + The parser options. + The stream. + true if the stream is persistent; otherwise false. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + specified . + + The parsed MIME entity. + The parser options. + The stream. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + default . + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save mmeory usage, but also improve + performance. + + The parsed MIME entity. + The stream. + true if the stream is persistent; otherwise false. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + default . + + The parsed MIME entity. + The stream. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified file. + + + Loads a from the file at the give file path, + using the specified . + + The parsed entity. + The parser options. + The name of the file to load. + A cancellation token. + + is null. + -or- + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to read the specified file. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified file. + + + Loads a from the file at the give file path, + using the default . + + The parsed entity. + The name of the file to load. + A cancellation token. + + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to read the specified file. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified content stream. + + + This method is mostly meant for use with APIs such as + where the headers are parsed separately from the content. + + The parsed MIME entity. + The parser options. + The Content-Type of the stream. + The content stream. + A cancellation token. + + is null. + -or- + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified content stream. + + + This method is mostly meant for use with APIs such as + where the headers are parsed separately from the content. + + The parsed MIME entity. + The Content-Type of the stream. + The content stream. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + MIME entity constructor arguments. + + + MIME entity constructor arguments. + + + + + The format of the MIME stream. + + + The format of the MIME stream. + + + + + The stream contains a single MIME entity or message. + + + + + The stream is in the Unix mbox format and may contain + more than a single message. + + + + + The default stream format. + + + + + An iterator for a MIME tree structure. + + + Walks the MIME tree structure of a in depth-first order. + + + + + Initializes a new instance of the class. + + + Creates a new for the specified message. + + The message. + + is null. + + + + + Releases unmanaged resources and performs other cleanup operations before + the is reclaimed by garbage collection. + + + Releases unmanaged resources and performs other cleanup operations before + the is reclaimed by garbage collection. + + + + + Gets the top-level message. + + + Gets the top-level message. + + The message. + + + + Gets the parent of the current entity. + + + After an iterator is created or after the method is called, + the method must be called to advance the iterator to the + first entity of the message before reading the value of the Parent property; + otherwise, Parent throws a . Parent + also throws a if the last call to + returned false, which indicates the end of the message. + If the current entity is the top-level entity of the message, then the parent + will be null; otherwise the parent will be either be a + or a . + + The parent entity. + + Either has not been called or + has moved beyond the end of the message. + + + + + Gets the current entity. + + + After an iterator is created or after the method is called, + the method must be called to advance the iterator to the + first entity of the message before reading the value of the Current property; + otherwise, Current throws a . Current + also throws a if the last call to + returned false, which indicates the end of the message. + + The current entity. + + Either has not been called or + has moved beyond the end of the message. + + + + + Gets the current entity. + + + After an iterator is created or after the method is called, + the method must be called to advance the iterator to the + first entity of the message before reading the value of the Current property; + otherwise, Current throws a . Current + also throws a if the last call to + returned false, which indicates the end of the message. + + The current entity. + + Either has not been called or + has moved beyond the end of the message. + + + + + Gets the path specifier for the current entity. + + + After an iterator is created or after the method is called, + the method must be called to advance the iterator to the + first entity of the message before reading the value of the PathSpecifier property; + otherwise, PathSpecifier throws a . + PathSpecifier also throws a if the + last call to returned false, which indicates the end of + the message. + + The path specifier. + + Either has not been called or + has moved beyond the end of the message. + + + + + Gets the depth of the current entity. + + + After an iterator is created or after the method is called, + the method must be called to advance the iterator to the + first entity of the message before reading the value of the Depth property; + otherwise, Depth throws a . Depth + also throws a if the last call to + returned false, which indicates the end of the message. + + The depth. + + Either has not been called or + has moved beyond the end of the message. + + + + + Advances the iterator to the next depth-first entity of the tree structure. + + + After an iterator is created or after the method is called, + an iterator is positioned before the first entity of the message, and the first + call to the MoveNext method moves the iterator to the first entity of the message. + If MoveNext advances beyond the last entity of the message, MoveNext returns false. + When the iterator is at this position, subsequent calls to MoveNext also return + false until is called. + + true if the iterator was successfully advanced to the next entity; otherwise, false. + + + + Advances to the entity specified by the path specifier. + + + Advances the iterator to the entity specified by the path specifier which + must be in the same format as returned by . + If the iterator has already advanced beyond the entity at the specified + path, the iterator will and advance as normal. + + true if advancing to the specified entity was successful; otherwise, false. + The path specifier. + + is null. + + + is empty. + + + is in an invalid format. + + + + + Resets the iterator to its initial state. + + + Resets the iterator to its initial state. + + + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + + Releases the unmanaged resources used by the and + optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only the unmanaged resources. + + + + Releases all resources used by the object. + + Call when you are finished using the . The + method leaves the in an unusable state. After + calling , you must release all references to the so + the garbage collector can reclaim the memory that the was occupying. + + + + A MIME message. + + + A message consists of header fields and, optionally, a body. + The body of the message can either be plain text or it can be a + tree of MIME entities such as a text/plain MIME part and a collection + of file attachments. + + + + + Initializes a new instance of the class. + + + Creates a new . + + An array of initialization parameters: headers and message parts. + + is null. + + + contains more than one . + -or- + contains one or more arguments of an unknown type. + + + + + Initializes a new instance of the class. + + + Creates a new MIME message, specifying details at creation time. + + The list of addresses in the From header. + The list of addresses in the To header. + The subject of the message. + The body of the message. + + + + Initializes a new instance of the class. + + + Creates a new MIME message. + + + + + Gets or sets the mbox marker. + + + Set by the when parsing attached message/rfc822 parts + so that the message/rfc822 part can be reserialized back to its original form. + + The mbox marker. + + + + Gets the list of headers. + + + Represents the list of headers for a message. Typically, the headers of + a message will contain transmission headers such as From and To along + with metadata headers such as Subject and Date, but may include just + about anything. + To access any MIME headers other than + , you will need to access the + property of the . + + + The list of headers. + + + + Get or set the value of the Importance header. + + + Gets or sets the value of the Importance header. + + The importance. + + is not a valid . + + + + + Get or set the value of the Priority header. + + + Gets or sets the value of the Priority header. + + The priority. + + is not a valid . + + + + + Gets or sets the address in the Sender header. + + + The sender may differ from the addresses in if + the message was sent by someone on behalf of someone else. + + The address in the Sender header. + + + + Gets or sets the address in the Resent-Sender header. + + + The resent sender may differ from the addresses in if + the message was sent by someone on behalf of someone else. + + The address in the Resent-Sender header. + + + + Gets the list of addresses in the From header. + + + The "From" header specifies the author(s) of the message. + If more than one is added to the + list of "From" addresses, the should be set to the + single of the personal actually sending + the message. + + The list of addresses in the From header. + + + + Gets the list of addresses in the Resent-From header. + + + The "Resent-From" header specifies the author(s) of the messagebeing + resent. + If more than one is added to the + list of "Resent-From" addresses, the should + be set to the single of the personal actually + sending the message. + + The list of addresses in the Resent-From header. + + + + Gets the list of addresses in the Reply-To header. + + + When the list of addresses in the Reply-To header is not empty, + it contains the address(es) where the author(s) of the message prefer + that replies be sent. + When the list of addresses in the Reply-To header is empty, + replies should be sent to the mailbox(es) specified in the From + header. + + The list of addresses in the Reply-To header. + + + + Gets the list of addresses in the Resent-Reply-To header. + + + When the list of addresses in the Resent-Reply-To header is not empty, + it contains the address(es) where the author(s) of the resent message prefer + that replies be sent. + When the list of addresses in the Resent-Reply-To header is empty, + replies should be sent to the mailbox(es) specified in the Resent-From + header. + + The list of addresses in the Resent-Reply-To header. + + + + Gets the list of addresses in the To header. + + + The addresses in the To header are the primary recipients of + the message. + + The list of addresses in the To header. + + + + Gets the list of addresses in the Resent-To header. + + + The addresses in the Resent-To header are the primary recipients of + the message. + + The list of addresses in the Resent-To header. + + + + Gets the list of addresses in the Cc header. + + + The addresses in the Cc header are secondary recipients of the message + and are usually not the individuals being directly addressed in the + content of the message. + + The list of addresses in the Cc header. + + + + Gets the list of addresses in the Resent-Cc header. + + + The addresses in the Resent-Cc header are secondary recipients of the message + and are usually not the individuals being directly addressed in the + content of the message. + + The list of addresses in the Resent-Cc header. + + + + Gets the list of addresses in the Bcc header. + + + Recipients in the Blind-Carpbon-Copy list will not be visible to + the other recipients of the message. + + The list of addresses in the Bcc header. + + + + Gets the list of addresses in the Resent-Bcc header. + + + Recipients in the Resent-Bcc list will not be visible to + the other recipients of the message. + + The list of addresses in the Resent-Bcc header. + + + + Gets or sets the subject of the message. + + + The Subject is typically a short string denoting the topic of the message. + Replies will often use "Re: " followed by the Subject of the original message. + + The subject of the message. + + is null. + + + + + Gets or sets the date of the message. + + + If the date is not explicitly set before the message is written to a stream, + the date will default to the exact moment when it is written to said stream. + + The date of the message. + + + + Gets or sets the Resent-Date of the message. + + + Gets or sets the Resent-Date of the message. + + The Resent-Date of the message. + + + + Gets or sets the list of references to other messages. + + + The References header contains a chain of Message-Ids back to the + original message that started the thread. + + The references. + + + + Gets or sets the Message-Id that this message is in reply to. + + + If the message is a reply to another message, it will typically + use the In-Reply-To header to specify the Message-Id of the + original message being replied to. + + The message id that this message is in reply to. + + is improperly formatted. + + + + + Gets or sets the message identifier. + + + The Message-Id is meant to be a globally unique identifier for + a message. + can be used + to generate this value. + + The message identifier. + + is null. + + + is improperly formatted. + + + + + Gets or sets the Resent-Message-Id header. + + + The Resent-Message-Id is meant to be a globally unique identifier for + a message. + can be used + to generate this value. + + The Resent-Message-Id. + + is null. + + + is improperly formatted. + + + + + Gets or sets the MIME-Version. + + + The MIME-Version header specifies the version of the MIME specification + that the message was created for. + + The MIME version. + + is null. + + + + + Gets or sets the body of the message. + + + The body of the message can either be plain text or it can be a + tree of MIME entities such as a text/plain MIME part and a collection + of file attachments. + For a convenient way of constructing message bodies, see the + class. + + The body of the message. + + + + Gets the text body of the message if it exists. + + + Gets the text content of the first text/plain body part that is found (in depth-first + search order) which is not an attachment. + + The text body if it exists; otherwise, null. + + + + Gets the html body of the message if it exists. + + + Gets the HTML-formatted body of the message if it exists. + + The html body if it exists; otherwise, null. + + + + Gets the text body in the specified format. + + + Gets the text body in the specified format, if it exists. + + The text body in the desired format if it exists; otherwise, null. + The desired text format. + + + + Gets the body parts of the message. + + + Traverses over the MIME tree, enumerating all of the objects, + but does not traverse into the bodies of attached messages. + + The body parts. + + + + Gets the attachments. + + + Traverses over the MIME tree, enumerating all of the objects that + have a Content-Disposition header set to "attachment". + + The attachments. + + + + Returns a that represents the current . + + + Returns a that represents the current . + Note: In general, the string returned from this method SHOULD NOT be used for serializing + the message to disk. It is recommended that you use instead. + + A that represents the current . + + + + Dispatches to the specific visit method for this MIME message. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Prepare the message for transport using the specified encoding constraints. + + + Prepares the message for transport using the specified encoding constraints. + + The encoding constraint. + The maximum allowable length for a line (not counting the CRLF). Must be between 60 and 998 (inclusive). + + is not between 60 and 998 (inclusive). + -or- + is not a valid value. + + + + + Writes the message to the specified output stream. + + + Writes the message to the output stream using the provided formatting options. + + The formatting options. + The output stream. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Writes the message to the specified output stream. + + + Writes the message to the output stream using the default formatting options. + + The output stream. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Writes the message to the specified file. + + + Writes the message to the specified file using the provided formatting options. + + The formatting options. + The file. + A cancellation token. + + is null. + -or- + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + The operation was canceled via the cancellation token. + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to write to the specified file. + + + An I/O error occurred. + + + + + Writes the message to the specified file. + + + Writes the message to the specified file using the default formatting options. + + The file. + A cancellation token. + + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + The operation was canceled via the cancellation token. + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to write to the specified file. + + + An I/O error occurred. + + + + + Digitally sign the message using a DomainKeys Identified Mail (DKIM) signature. + + + Digitally signs the message using a DomainKeys Identified Mail (DKIM) signature. + + The formatting options. + The DKIM signer. + The list of header fields to sign. + The header canonicalization algorithm. + The body canonicalization algorithm. + + is null. + -or- + is null. + -or- + is null. + + + does not contain the 'From' header. + -or- + contains one or more of the following headers: Return-Path, + Received, Comments, Keywords, Bcc, Resent-Bcc, or DKIM-Signature. + + + + + Digitally sign the message using a DomainKeys Identified Mail (DKIM) signature. + + + Digitally signs the message using a DomainKeys Identified Mail (DKIM) signature. + + The DKIM signer. + The headers to sign. + The header canonicalization algorithm. + The body canonicalization algorithm. + + is null. + -or- + is null. + + + does not contain the 'From' header. + -or- + contains one or more of the following headers: Return-Path, + Received, Comments, Keywords, Bcc, Resent-Bcc, or DKIM-Signature. + + + + + Verify the specified DKIM-Signature header. + + + Verifies the specified DKIM-Signature header. + + true if the DKIM-Signature is valid; otherwise, false. + The formatting options. + The DKIM-Signature header. + The public key locator service. + The cancellation token. + + is null. + -or- + is null. + -or- + is null. + + + is not a DKIM-Signature header. + + + The DKIM-Signature header value is malformed. + + + The operation was canceled via the cancellation token. + + + + + Verify the specified DKIM-Signature header. + + + Verifies the specified DKIM-Signature header. + + true if the DKIM-Signature is valid; otherwise, false. + The DKIM-Signature header. + The public key locator service. + The cancellation token. + + is null. + -or- + is null. + + + is not a DKIM-Signature header. + + + The DKIM-Signature header value is malformed. + + + The operation was canceled via the cancellation token. + + + + + Sign the message using the specified cryptography context and digest algorithm. + + + If either of the Resent-Sender or Resent-From headers are set, then the message + will be signed using the Resent-Sender (or first mailbox in the Resent-From) + address as the signer address, otherwise the Sender or From address will be + used instead. + + The cryptography context. + The digest algorithm. + + is null. + + + The has not been set. + -or- + A sender has not been specified. + + + The was out of range. + + + The is not supported. + + + A signing certificate could not be found for the sender. + + + The private key could not be found for the sender. + + + + + Sign the message using the specified cryptography context and the SHA-1 digest algorithm. + + + If either of the Resent-Sender or Resent-From headers are set, then the message + will be signed using the Resent-Sender (or first mailbox in the Resent-From) + address as the signer address, otherwise the Sender or From address will be + used instead. + + The cryptography context. + + is null. + + + The has not been set. + -or- + A sender has not been specified. + + + A signing certificate could not be found for the sender. + + + The private key could not be found for the sender. + + + + + Encrypt the message to the sender and all of the recipients + using the specified cryptography context. + + + If either of the Resent-Sender or Resent-From headers are set, then the message + will be encrypted to all of the addresses specified in the Resent headers + (Resent-Sender, Resent-From, Resent-To, Resent-Cc, and Resent-Bcc), + otherwise the message will be encrypted to all of the addresses specified in + the standard address headers (Sender, From, To, Cc, and Bcc). + + The cryptography context. + + is null. + + + An unknown type of cryptography context was used. + + + The has not been set. + -or- + No recipients have been specified. + + + A certificate could not be found for one or more of the recipients. + + + The public key could not be found for one or more of the recipients. + + + + + Sign and encrypt the message to the sender and all of the recipients using + the specified cryptography context and the specified digest algorithm. + + + If either of the Resent-Sender or Resent-From headers are set, then the message + will be signed using the Resent-Sender (or first mailbox in the Resent-From) + address as the signer address, otherwise the Sender or From address will be + used instead. + Likewise, if either of the Resent-Sender or Resent-From headers are set, then the + message will be encrypted to all of the addresses specified in the Resent headers + (Resent-Sender, Resent-From, Resent-To, Resent-Cc, and Resent-Bcc), + otherwise the message will be encrypted to all of the addresses specified in + the standard address headers (Sender, From, To, Cc, and Bcc). + + The cryptography context. + The digest algorithm. + + is null. + + + An unknown type of cryptography context was used. + + + The was out of range. + + + The has not been set. + -or- + The sender has been specified. + -or- + No recipients have been specified. + + + The is not supported. + + + A certificate could not be found for the signer or one or more of the recipients. + + + The private key could not be found for the sender. + + + The public key could not be found for one or more of the recipients. + + + + + Sign and encrypt the message to the sender and all of the recipients using + the specified cryptography context and the SHA-1 digest algorithm. + + + If either of the Resent-Sender or Resent-From headers are set, then the message + will be signed using the Resent-Sender (or first mailbox in the Resent-From) + address as the signer address, otherwise the Sender or From address will be + used instead. + Likewise, if either of the Resent-Sender or Resent-From headers are set, then the + message will be encrypted to all of the addresses specified in the Resent headers + (Resent-Sender, Resent-From, Resent-To, Resent-Cc, and Resent-Bcc), + otherwise the message will be encrypted to all of the addresses specified in + the standard address headers (Sender, From, To, Cc, and Bcc). + + The cryptography context. + + is null. + + + An unknown type of cryptography context was used. + + + The has not been set. + -or- + The sender has been specified. + -or- + No recipients have been specified. + + + A certificate could not be found for the signer or one or more of the recipients. + + + The private key could not be found for the sender. + + + The public key could not be found for one or more of the recipients. + + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + specified . + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save mmeory usage, but also improve + performance. + + The parsed message. + The parser options. + The stream. + true if the stream is persistent; otherwise false. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + specified . + + The parsed message. + The parser options. + The stream. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + default . + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save mmeory usage, but also improve + performance. + + The parsed message. + The stream. + true if the stream is persistent; otherwise false. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified stream. + + + Loads a from the given stream, using the + default . + + The parsed message. + The stream. + A cancellation token. + + is null. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified file. + + + Loads a from the file at the given path, using the + specified . + + The parsed message. + The parser options. + The name of the file to load. + A cancellation token. + + is null. + -or- + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to read the specified file. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Load a from the specified file. + + + Loads a from the file at the given path, using the + default . + + The parsed message. + The name of the file to load. + A cancellation token. + + is null. + + + is a zero-length string, contains only white space, or + contains one or more invalid characters as defined by + . + + + is an invalid file path. + + + The specified file path could not be found. + + + The user does not have access to read the specified file. + + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Creates a new from a . + + + Creates a new from a . + + The equivalent . + The message. + + is null. + + + + + Explicit cast to convert a to a + . + + + Allows creation of messages using Microsoft's System.Net.Mail APIs. + + The equivalent . + The message. + + + + A MIME message and entity parser. + + + A MIME parser is used to parse and + objects from arbitrary streams. + + + + + Initializes a new instance of the class. + + + Creates a new that will parse the specified stream. + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save memory usage, but also improve + performance. + It should be noted, however, that disposing will make it impossible + for to read the content. + + The stream to parse. + The format of the stream. + true if the stream is persistent; otherwise false. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new that will parse the specified stream. + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save memory usage, but also improve + performance. + It should be noted, however, that disposing will make it impossible + for to read the content. + + The stream to parse. + true if the stream is persistent; otherwise false. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new that will parse the specified stream. + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save memory usage, but also improve + performance. + It should be noted, however, that disposing will make it impossible + for to read the content. + + The parser options. + The stream to parse. + true if the stream is persistent; otherwise false. + + is null. + -or- + is null. + + + + + Initializes a new instance of the class. + + + Creates a new that will parse the specified stream. + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save memory usage, but also improve + performance. + It should be noted, however, that disposing will make it impossible + for to read the content. + + The parser options. + The stream to parse. + The format of the stream. + true if the stream is persistent; otherwise false. + + is null. + -or- + is null. + + + + + Gets a value indicating whether the parser has reached the end of the input stream. + + + Gets a value indicating whether the parser has reached the end of the input stream. + + true if this parser has reached the end of the input stream; + otherwise, false. + + + + Gets the current position of the parser within the stream. + + + Gets the current position of the parser within the stream. + + The stream offset. + + + + Gets the most recent mbox marker offset. + + + Gets the most recent mbox marker offset. + + The mbox marker offset. + + + + Gets the most recent mbox marker. + + + Gets the most recent mbox marker. + + The mbox marker. + + + + Sets the stream to parse. + + + Sets the stream to parse. + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save memory usage, but also improve + performance. + It should be noted, however, that disposing will make it impossible + for to read the content. + + The parser options. + The stream to parse. + The format of the stream. + true if the stream is persistent; otherwise false. + + is null. + -or- + is null. + + + + + Sets the stream to parse. + + + Sets the stream to parse. + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save memory usage, but also improve + performance. + It should be noted, however, that disposing will make it impossible + for to read the content. + + The parser options. + The stream to parse. + true if the stream is persistent; otherwise false. + + is null. + -or- + is null. + + + + + Sets the stream to parse. + + + Sets the stream to parse. + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save memory usage, but also improve + performance. + It should be noted, however, that disposing will make it impossible + for to read the content. + + The stream to parse. + The format of the stream. + true if the stream is persistent; otherwise false. + + is null. + + + + + Sets the stream to parse. + + + Sets the stream to parse. + If is true and is seekable, then + the will not copy the content of s into memory. Instead, + it will use a to reference a substream of . + This has the potential to not only save memory usage, but also improve + performance. + It should be noted, however, that disposing will make it impossible + for to read the content. + + The stream to parse. + true if the stream is persistent; otherwise false. + + is null. + + + + + Parses a list of headers from the stream. + + + Parses a list of headers from the stream. + + The parsed list of headers. + A cancellation token. + + The operation was canceled via the cancellation token. + + + There was an error parsing the headers. + + + An I/O error occurred. + + + + + Parses an entity from the stream. + + + Parses an entity from the stream. + + The parsed entity. + A cancellation token. + + The operation was canceled via the cancellation token. + + + There was an error parsing the entity. + + + An I/O error occurred. + + + + + Parses a message from the stream. + + + Parses a message from the stream. + + The parsed message. + A cancellation token. + + The operation was canceled via the cancellation token. + + + There was an error parsing the message. + + + An I/O error occurred. + + + + + Enumerates the messages in the stream. + + + This is mostly useful when parsing mbox-formatted streams. + + The enumerator. + + + + Enumerates the messages in the stream. + + + This is mostly useful when parsing mbox-formatted streams. + + The enumerator. + + + + A leaf-node MIME part that contains content such as the message body text or an attachment. + + + A leaf-node MIME part that contains content such as the message body text or an attachment. + + + + + Initializes a new instance of the class + based on the . + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class + with the specified media type and subtype. + + + Creates a new with the specified media type and subtype. + + The media type. + The media subtype. + An array of initialization parameters: headers and part content. + + is null. + -or- + is null. + -or- + is null. + + + contains more than one or + . + -or- + contains one or more arguments of an unknown type. + + + + + Initializes a new instance of the class + with the specified media type and subtype. + + + Creates a new with the specified media type and subtype. + + The media type. + The media subtype. + + is null. + -or- + is null. + + + + + Initializes a new instance of the class + with the specified content type. + + + Creates a new with the specified Content-Type value. + + The content type. + + is null. + + + + + Initializes a new instance of the class + with the specified content type. + + + Creates a new with the specified Content-Type value. + + The content type. + + is null. + + + could not be parsed. + + + + + Initializes a new instance of the class + with the default Content-Type of application/octet-stream. + + + Creates a new with a Content-Type of application/octet-stream. + + + + + Gets or sets the duration of the content if available. + + + The Content-Duration header specifies duration of timed media, + such as audio or video, in seconds. + + The duration of the content. + + is negative. + + + + + Gets or sets the md5sum of the content. + + + The Content-MD5 header specifies the base64-encoded MD5 checksum of the content + in its canonical format. + For more information, see http://www.ietf.org/rfc/rfc1864.txt + + The md5sum of the content. + + + + Gets or sets the content transfer encoding. + + + The Content-Transfer-Encoding header specifies an auxiliary encoding + that was applied to the content in order to allow it to pass through + mail transport mechanisms (such as SMTP) which may have limitations + in the byte ranges that it accepts. For example, many SMTP servers + do not accept data outside of the 7-bit ASCII range and so sending + binary attachments or even non-English text is not possible without + applying an encoding such as base64 or quoted-printable. + + The content transfer encoding. + + + + Gets or sets the name of the file. + + + First checks for the "filename" parameter on the Content-Disposition header. If + that does not exist, then the "name" parameter on the Content-Type header is used. + When setting the filename, both the "filename" parameter on the Content-Disposition + header and the "name" parameter on the Content-Type header are set. + + The name of the file. + + + + Gets or sets the MIME content. + + + Gets or sets the MIME content. + + The MIME content. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Calculates the most efficient content encoding given the specified constraint. + + + If no is set, will be returned. + + The most efficient content encoding. + The encoding constraint. + A cancellation token. + + is not a valid value. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Calculates the most efficient content encoding given the specified constraint. + + + If no is set, will be returned. + + The most efficient content encoding. + The encoding constraint. + The maximum allowable length for a line (not counting the CRLF). Must be between 72 and 998 (inclusive). + A cancellation token. + + is not between 72 and 998 (inclusive). + -or- + is not a valid value. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Computes the MD5 checksum of the content. + + + Computes the MD5 checksum of the MIME content in its canonical + format and then base64-encodes the result. + + The md5sum of the content. + + The is null. + + + + + Verifies the Content-Md5 value against an independently computed md5sum. + + + Computes the MD5 checksum of the MIME content and compares it with the + value in the Content-MD5 header, returning true if and only if + the values match. + + true, if content MD5 checksum was verified, false otherwise. + + + + Prepare the MIME entity for transport using the specified encoding constraints. + + + Prepares the MIME entity for transport using the specified encoding constraints. + + The encoding constraint. + The maximum number of octets allowed per line (not counting the CRLF). Must be between 60 and 998 (inclusive). + + is not between 60 and 998 (inclusive). + -or- + is not a valid value. + + + + + Writes the to the specified output stream. + + + Writes the MIME part to the output stream. + + The formatting options. + The output stream. + true if only the content should be written; otherwise, false. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Called when the headers change in some way. + + + Updates the , , + and properties if the corresponding headers have changed. + + The type of change. + The header being added, changed or removed. + + + + A mapping of file name extensions to the corresponding MIME-type. + + + A mapping of file name extensions to the corresponding MIME-type. + + + + + Gets the MIME-type of the file. + + + Gets the MIME-type of the file based on the file extension. + + The MIME-type. + The file name. + + is null. + + + + + Represents a visitor for MIME trees. + + + This class is designed to be inherited to create more specialized classes whose + functionality requires traversing, examining or copying a MIME tree. + + + + + + + + Dispatches the entity to one of the more specialized visit methods in this class. + + + Dispatches the entity to one of the more specialized visit methods in this class. + + The MIME entity. + + + + Dispatches the message to one of the more specialized visit methods in this class. + + + Dispatches the message to one of the more specialized visit methods in this class. + + The MIME message. + + + + Visit the application/pgp-encrypted MIME entity. + + + Visits the application/pgp-encrypted MIME entity. + + + The application/pgp-encrypted MIME entity. + + + + Visit the application/pgp-signature MIME entity. + + + Visits the application/pgp-signature MIME entity. + + + The application/pgp-signature MIME entity. + + + + Visit the application/pkcs7-mime MIME entity. + + + Visits the application/pkcs7-mime MIME entity. + + The application/pkcs7-mime MIME entity. + + + + Visit the application/pkcs7-signature MIME entity. + + + Visits the application/pkcs7-signature MIME entity. + + + The application/pkcs7-signature MIME entity. + + + + Visit the message/disposition-notification MIME entity. + + + Visits the message/disposition-notification MIME entity. + + The message/disposition-notification MIME entity. + + + + Visit the message/delivery-status MIME entity. + + + Visits the message/delivery-status MIME entity. + + The message/delivery-status MIME entity. + + + + Visit the message contained within a message/rfc822 or message/news MIME entity. + + + Visits the message contained within a message/rfc822 or message/news MIME entity. + + The message/rfc822 or message/news MIME entity. + + + + Visit the message/rfc822 or message/news MIME entity. + + + Visits the message/rfc822 or message/news MIME entity. + + + + + The message/rfc822 or message/news MIME entity. + + + + Visit the message/partial MIME entity. + + + Visits the message/partial MIME entity. + + The message/partial MIME entity. + + + + Visit the abstract MIME entity. + + + Visits the abstract MIME entity. + + The MIME entity. + + + + Visit the body of the message. + + + Visits the body of the message. + + The message. + + + + Visit the MIME message. + + + Visits the MIME message. + + The MIME message. + + + + Visit the abstract MIME part entity. + + + Visits the MIME part entity. + + + + + The MIME part entity. + + + + Visit the children of a . + + + Visits the children of a . + + Multipart. + + + + Visit the abstract multipart MIME entity. + + + Visits the abstract multipart MIME entity. + + The multipart MIME entity. + + + + Visit the multipart/alternative MIME entity. + + + Visits the multipart/alternative MIME entity. + + + + + The multipart/alternative MIME entity. + + + + Visit the multipart/encrypted MIME entity. + + + Visits the multipart/encrypted MIME entity. + + The multipart/encrypted MIME entity. + + + + Visit the multipart/related MIME entity. + + + Visits the multipart/related MIME entity. + + + + + The multipart/related MIME entity. + + + + Visit the multipart/report MIME entity. + + + Visits the multipart/report MIME entity. + + + + + The multipart/report MIME entity. + + + + Visit the multipart/signed MIME entity. + + + Visits the multipart/signed MIME entity. + + The multipart/signed MIME entity. + + + + Visit the text-based MIME part entity. + + + Visits the text-based MIME part entity. + + + + + The text-based MIME part entity. + + + + Visit the Microsoft TNEF MIME part entity. + + + Visits the Microsoft TNEF MIME part entity. + + + + + The Microsoft TNEF MIME part entity. + + + + A multipart MIME entity which may contain a collection of MIME entities. + + + All multipart MIME entities will have a Content-Type with a media type of "multipart". + The most common multipart MIME entity used in email is the "multipart/mixed" entity. + Four (4) initial subtypes were defined in the original MIME specifications: mixed, alternative, + digest, and parallel. + The "multipart/mixed" type is a sort of general-purpose container. When used in email, the + first entity is typically the "body" of the message while additional entities are most often + file attachments. + Speaking of message "bodies", the "multipart/alternative" type is used to offer a list of + alternative formats for the main body of the message (usually they will be "text/plain" and + "text/html"). These alternatives are in order of increasing faithfulness to the original document + (in other words, the last entity will be in a format that, when rendered, will most closely match + what the sending client's WYSISYG editor produced). + The "multipart/digest" type will typically contain a digest of MIME messages and is most + commonly used by mailing-list software. + The "multipart/parallel" type contains entities that are all meant to be shown (or heard) + in parallel. + Another commonly used type is the "multipart/related" type which contains, as one might expect, + inter-related MIME parts which typically reference each other via URIs based on the Content-Id and/or + Content-Location headers. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified subtype. + + The multipart media sub-type. + An array of initialization parameters: headers and MIME entities. + + is null. + -or- + is null. + + + contains one or more arguments of an unknown type. + + + + + Initializes a new instance of the class. + + + Creates a new with the specified subtype. + + The multipart media sub-type. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new with a ContentType of multipart/mixed. + + + + + Gets or sets the boundary. + + + Gets or sets the boundary parameter on the Content-Type header. + + The boundary. + + is null. + + + + + Gets or sets the preamble. + + + A multipart preamble appears before the first child entity of the + multipart and is typically used only in the top-level multipart + of the message to specify that the message is in MIME format and + therefore requires a MIME compliant email application to render + it correctly. + + The preamble. + + + + Gets or sets the epilogue. + + + A multipart epiloque is the text that appears after the closing boundary + of the multipart and is typically either empty or a single new line + character sequence. + + The epilogue. + + + + Gets or sets whether the end boundary should be written. + + + Gets or sets whether the end boundary should be written. + + true if the end boundary should be written; otherwise, false. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Prepare the MIME entity for transport using the specified encoding constraints. + + + Prepares the MIME entity for transport using the specified encoding constraints. + + The encoding constraint. + The maximum number of octets allowed per line (not counting the CRLF). Must be between 60 and 998 (inclusive). + + is not between 60 and 998 (inclusive). + -or- + is not a valid value. + + + + + Writes the to the specified output stream. + + + Writes the multipart MIME entity and its subparts to the output stream. + + The formatting options. + The output stream. + true if only the content should be written; otherwise, false. + A cancellation token. + + is null. + -or- + is null. + + + The operation was canceled via the cancellation token. + + + An I/O error occurred. + + + + + Gets the number of parts in the multipart. + + + Indicates the number of parts in the multipart. + + The number of parts in the multipart. + + + + Gets a value indicating whether this instance is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Adds the specified part. + + + Adds the specified part to the multipart. + + The part to add. + + is null. + + + + + Clears the multipart. + + + Removes all of the parts within the multipart. + + + + + Checks if the contains the specified part. + + + Determines whether or not the multipart contains the specified part. + + true if the specified part exists; + otherwise false. + The part to check for. + + is null. + + + + + Copies all of the entities in the to the specified array. + + + Copies all of the entities within the into the array, + starting at the specified array index. + + The array to copy the headers to. + The index into the array. + + is null. + + + is out of range. + + + + + Removes the specified part. + + + Removes the specified part, if it exists within the multipart. + + true if the part was removed; otherwise false. + The part to remove. + + is null. + + + + + Gets the index of the specified part. + + + Finds the index of the specified part, if it exists. + + The index of the specified part if found; otherwise -1. + The part. + + is null. + + + + + Inserts the part at the specified index. + + + Inserts the part into the multipart at the specified index. + + The index. + The part. + + is null. + + + is out of range. + + + + + Removes the part at the specified index. + + + Removes the part at the specified index. + + The index. + + is out of range. + + + + + Gets or sets the at the specified index. + + + Gets or sets the at the specified index. + + The entity at the specified index. + The index. + + is null. + + + is out of range. + + + + + Gets the enumerator for the children of the . + + + Gets the enumerator for the children of the . + + The enumerator. + + + + Gets the enumerator for the children of the . + + + Gets the enumerator for the children of the . + + The enumerator. + + + + A multipart/alternative MIME entity. + + + A multipart/alternative MIME entity contains, as one might expect, is used to offer a list of + alternative formats for the main body of the message (usually they will be "text/plain" and + "text/html"). These alternatives are in order of increasing faithfulness to the original document + (in other words, the last entity will be in a format that, when rendered, will most closely match + what the sending client's WYSISYG editor produced). + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new part. + + An array of initialization parameters: headers and MIME entities. + + is null. + + + contains one or more arguments of an unknown type. + + + + + Initializes a new instance of the class. + + + Creates a new part. + + + + + Get the text of the text/plain alternative. + + + Gets the text of the text/plain alternative, if it exists. + + The text if a text/plain alternative exists; otherwise, null. + + + + Get the HTML-formatted text of the text/html alternative. + + + Gets the HTML-formatted text of the text/html alternative, if it exists. + + The HTML if a text/html alternative exists; otherwise, null. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Get the text body in the specified format. + + + Gets the text body in the specified format, if it exists. + + The text body in the desired format if it exists; otherwise, null. + The desired text format. + + + + A multipart/related MIME entity. + + + A multipart/related MIME entity contains, as one might expect, inter-related MIME parts which + typically reference each other via URIs based on the Content-Id and/or Content-Location headers. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new part. + + An array of initialization parameters: headers and MIME entities. + + is null. + + + contains one or more arguments of an unknown type. + + + + + Initializes a new instance of the class. + + + Creates a new part. + + + + + Gets or sets the root document of the multipart/related part and the appropriate Content-Type parameters. + + + Gets or sets the root document that references the other MIME parts within the multipart/related. + When getting the root document, the "start" parameter of the Content-Type header is used to + determine which of the parts is the root. If the "start" parameter does not exist or does not reference + any of the child parts, then the first child is assumed to be the root. + When setting the root document MIME part, the Content-Type header of the multipart/related part is also + updated with a appropriate "start" and "type" parameters. + + The root MIME part. + + is null. + + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Checks if the contains a part matching the specified URI. + + + Determines whether or not the multipart/related entity contains a part matching the specified URI. + + true if the specified part exists; otherwise false. + The URI of the MIME part. + + is null. + + + + + Gets the index of the part matching the specified URI. + + + Finds the index of the part matching the specified URI, if it exists. + If the URI scheme is "cid", then matching is performed based on the Content-Id header + values, otherwise the Content-Location headers are used. If the provided URI is absolute and a child + part's Content-Location is relative, then then the child part's Content-Location URI will be combined + with the value of its Content-Base header, if available, otherwise it will be combined with the + multipart/related part's Content-Base header in order to produce an absolute URI that can be + compared with the provided absolute URI. + + The index of the part matching the specified URI if found; otherwise -1. + The URI of the MIME part. + + is null. + + + + + Opens a stream for reading the decoded content of the MIME part specified by the provided URI. + + + Opens a stream for reading the decoded content of the MIME part specified by the provided URI. + + A stream for reading the decoded content of the MIME part specified by the provided URI. + The URI. + The mime-type of the content. + The charset of the content (if the content is text-based) + + is null. + + + The MIME part for the specified URI could not be found. + + + + + Opens a stream for reading the decoded content of the MIME part specified by the provided URI. + + + Opens a stream for reading the decoded content of the MIME part specified by the provided URI. + + A stream for reading the decoded content of the MIME part specified by the provided URI. + The URI. + + is null. + + + The MIME part for the specified URI could not be found. + + + + + A multipart/report MIME entity. + + + A multipart/related MIME entity is a general container part for electronic mail + reports of any kind. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the class. + + + Creates a new part. + + The type of the report. + An array of initialization parameters: headers and MIME entities. + + is null. + -or- + is null. + + + contains one or more arguments of an unknown type. + + + + + Initializes a new instance of the class. + + + Creates a new part. + + + is null. + + + + + Gets or sets the type of the report. + + + Gets or sets the type of the report. + The report type should be the subtype of the second + of the multipart/report. + + The type of the report. + + is null. + + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + A header parameter as found in the Content-Type and Content-Disposition headers. + + + Content-Type and Content-Disposition headers often have parameters that specify + further information about how to interpret the content. + + + + + Initializes a new instance of the class. + + + Creates a new parameter with the specified name and value. + + The parameter name. + The parameter value. + + is null. + -or- + is null. + + + contains illegal characters. + + + + + Initializes a new instance of the class. + + + Creates a new parameter with the specified name and value. + + The character encoding. + The parameter name. + The parameter value. + + is null. + -or- + is null. + -or- + is null. + + + contains illegal characters. + + + + + Initializes a new instance of the class. + + + Creates a new parameter with the specified name and value. + + The character encoding. + The parameter name. + The parameter value. + + is null. + -or- + is null. + -or- + is null. + + + contains illegal characters. + + + is not supported. + + + + + Gets the parameter name. + + + Gets the parameter name. + + The parameter name. + + + + Gets or sets the parameter value character encoding. + + + Gets or sets the parameter value character encoding. + + The character encoding. + + + + Gets or sets the parameter encoding method to use. + + + Gets or sets the parameter encoding method to use. + The MIME specifications specify that the proper method for encoding Content-Type + and Content-Disposition parameter values is the method described in + rfc2231. However, it is common for + some older email clients to improperly encode using the method described in + rfc2047 instead. + If set to , the encoding + method used will default to the value set on the . + + The encoding method. + + is not a valid value. + + + + + Gets or sets the parameter value. + + + Gets or sets the parameter value. + + The parameter value. + + is null. + + + + + Returns a string representation of the . + + + Formats the parameter name and value in the form name="value". + + A string representation of the . + + + + The method to use for encoding Content-Type and Content-Disposition parameter values. + + + The MIME specifications specify that the proper method for encoding Content-Type and + Content-Disposition parameter values is the method described in + rfc2231. However, it is common for + some older email clients to improperly encode using the method described in + rfc2047 instead. + + + + + Use the default encoding method set on the . + + + + + Use the encoding method described in rfc2231. + + + + + Use the encoding method described in rfc2047 (for compatibility with older, + non-rfc-compliant email clients). + + + + + A list of parameters, as found in the Content-Type and Content-Disposition headers. + + + Parameters are used by both and . + + + + + Initializes a new instance of the class. + + + Creates a new parameter list. + + + + + Adds a parameter with the specified name and value. + + + Adds a new parameter to the list with the specified name and value. + + The parameter name. + The parameter value. + + is null. + -or- + is null. + + + The contains illegal characters. + + + + + Adds a parameter with the specified name and value. + + + Adds a new parameter to the list with the specified name and value. + + The character encoding. + The parameter name. + The parameter value. + + is null. + -or- + is null. + -or- + is null. + + + contains illegal characters. + + + + + Adds a parameter with the specified name and value. + + + Adds a new parameter to the list with the specified name and value. + + The character encoding. + The parameter name. + The parameter value. + + is null. + -or- + is null. + -or- + is null. + + + cannot be empty. + -or- + contains illegal characters. + + + is not supported. + + + + + Checks if the contains a parameter with the specified name. + + + Determines whether or not the parameter list contains a parameter with the specified name. + + true if the requested parameter exists; + otherwise false. + The parameter name. + + is null. + + + + + Gets the index of the requested parameter, if it exists. + + + Finds the index of the parameter with the specified name, if it exists. + + The index of the requested parameter; otherwise -1. + The parameter name. + + is null. + + + + + Inserts a parameter with the specified name and value at the given index. + + + Inserts a new parameter with the given name and value at the specified index. + + The index to insert the parameter. + The parameter name. + The parameter value. + + is null. + -or- + is null. + + + The contains illegal characters. + + + is out of range. + + + + + Removes the specified parameter. + + + Removes the parameter with the specified name from the list, if it exists. + + true if the specified parameter was removed; + otherwise false. + The parameter name. + + is null. + + + + + Gets or sets the value of a parameter with the specified name. + + + Gets or sets the value of a parameter with the specified name. + + The value of the specified parameter if it exists; otherwise null. + The parameter name. + + is null. + -or- + is null. + + + The contains illegal characters. + + + + + Gets the parameter with the specified name. + + + Gets the parameter with the specified name. + + true if the parameter exists; otherwise, false. + The parameter name. + The parameter. + + is null. + + + + + Gets the value of the parameter with the specified name. + + + Gets the value of the parameter with the specified name. + + true if the parameter exists; otherwise, false. + The parameter name. + The parameter value. + + is null. + + + + + Gets the number of parameters in the . + + + Indicates the number of parameters in the list. + + The number of parameters. + + + + Gets a value indicating whether this instance is read only. + + + A is never read-only. + + true if this instance is read only; otherwise, false. + + + + Adds the specified parameter. + + + Adds the specified parameter to the end of the list. + + The parameter to add. + + The is null. + + + A parameter with the same name as + already exists. + + + + + Clears the parameter list. + + + Removes all of the parameters from the list. + + + + + Checks if the contains the specified parameter. + + + Determines whether or not the parameter list contains the specified parameter. + + true if the specified parameter is contained; + otherwise false. + The parameter. + + The is null. + + + + + Copies all of the contained parameters to the specified array. + + + Copies all of the parameters within the into the array, + starting at the specified array index. + + The array to copy the parameters to. + The index into the array. + + + + Removes the specified parameter. + + + Removes the specified parameter from the list. + + true if the specified parameter was removed; + otherwise false. + The parameter. + + The is null. + + + + + Gets the index of the requested parameter, if it exists. + + + Finds the index of the specified parameter, if it exists. + + The index of the requested parameter; otherwise -1. + The parameter. + + The is null. + + + + + Inserts the specified parameter at the given index. + + + Inserts the parameter at the specified index in the list. + + The index to insert the parameter. + The parameter. + + The is null. + + + The is out of range. + + + A parameter with the same name as + already exists. + + + + + Removes the parameter at the specified index. + + + Removes the parameter at the specified index. + + The index. + + The is out of range. + + + + + Gets or sets the at the specified index. + + + Gets or sets the at the specified index. + + The parameter at the specified index. + The index. + + The is null. + + + The is out of range. + + + A parameter with the same name as + already exists. + + + + + Gets an enumerator for the list of parameters. + + + Gets an enumerator for the list of parameters. + + The enumerator. + + + + Gets an enumerator for the list of parameters. + + + Gets an enumerator for the list of parameters. + + The enumerator. + + + + Returns a string representation of the parameters in the . + + + If there are multiple parameters in the list, they will be separated by a semicolon. + + A string representing the . + + + + A Parse exception as thrown by the various Parse methods in MimeKit. + + + A can be thrown by any of the Parse() methods + in MimeKit. Each exception instance will have a + which marks the byte offset of the token that failed to parse as well + as a which marks the byte offset where the error + occurred. + + + + + Initializes a new instance of the class. + + + Creates a new . + + The serialization info. + The stream context. + + + + Initializes a new instance of the class. + + + Creates a new . + + The error message. + The byte offset of the token. + The byte offset of the error. + The inner exception. + + + + Initializes a new instance of the class. + + + Creates a new . + + The error message. + The byte offset of the token. + The byte offset of the error. + + + + When overridden in a derived class, sets the + with information about the exception. + + + Sets the + with information about the exception. + + The serialization info. + The streaming context. + + is null. + + + + + Gets the byte index of the token that was malformed. + + + The token index is the byte offset at which the token started. + + The byte index of the token. + + + + Gets the index of the byte that caused the error. + + + The error index is the byte offset at which the parser encountered an error. + + The index of the byte that caused error. + + + + Parser options as used by as well as various Parse and TryParse methods in MimeKit. + + + allows you to change and/or override default parsing options used by methods such + as and others. + + + + + The default parser options. + + + If a is not supplied to or other Parse and TryParse + methods throughout MimeKit, will be used. + + + + + Gets or sets the compliance mode that should be used when parsing rfc822 addresses. + + + In general, you'll probably want this value to be + (the default) as it allows maximum interoperability with existing (broken) mail clients + and other mail software such as sloppily written perl scripts (aka spambots). + Even in mode, the address + parser is fairly liberal in what it accepts. Setting it to + just makes it try harder to deal with garbage input. + + The RFC compliance mode. + + + + Gets or sets the compliance mode that should be used when parsing Content-Type and Content-Disposition parameters. + + + In general, you'll probably want this value to be + (the default) as it allows maximum interoperability with existing (broken) mail clients + and other mail software such as sloppily written perl scripts (aka spambots). + Even in mode, the parameter + parser is fairly liberal in what it accepts. Setting it to + just makes it try harder to deal with garbage input. + + The RFC compliance mode. + + + + Gets or sets the compliance mode that should be used when decoding rfc2047 encoded words. + + + In general, you'll probably want this value to be + (the default) as it allows maximum interoperability with existing (broken) mail clients + and other mail software such as sloppily written perl scripts (aka spambots). + + The RFC compliance mode. + + + + Gets or sets a value indicating whether the Content-Length value should be + respected when parsing mbox streams. + + + For more details about why this may be useful, you can find more information + at + http://www.jwz.org/doc/content-length.html. + + true if the Content-Length value should be respected; + otherwise, false. + + + + Gets or sets the charset encoding to use as a fallback for 8bit headers. + + + and + + use this charset encoding as a fallback when decoding 8bit text into unicode. The first + charset encoding attempted is UTF-8, followed by this charset encoding, before finally + falling back to iso-8859-1. + + The charset encoding. + + + + Initializes a new instance of the class. + + + By default, new instances of enable rfc2047 work-arounds + (which are needed for maximum interoperability with mail software used in the wild) + and do not respect the Content-Length header value. + + + + + Clones an instance of . + + + Clones a set of options, allowing you to change a specific option + without requiring you to change the original. + + An identical copy of the current instance. + + + + Registers the subclass for the specified mime-type. + + The MIME type. + A custom subclass of . + + Your custom class should not subclass + directly, but rather it should subclass + , , + , or one of their derivatives. + + + is null. + -or- + is null. + + + is not a subclass of , + , or . + -or- + does not have a constructor that takes + only a argument. + + + + + An RFC compliance mode. + + + An RFC compliance mode. + + + + + Attempt to be much more liberal accepting broken and/or invalid formatting. + + + + + Do not attempt to be overly liberal in accepting broken and/or invalid formatting. + + + + + A Textual MIME part. + + + Unless overridden, all textual parts parsed by the , + such as text/plain or text/html, will be represented by a . + For more information about text media types, see section 4.1 of + rfc2046. + + + + + Initializes a new instance of the class. + + + This constructor is used by . + + Information used by the constructor. + + is null. + + + + + Initializes a new instance of the + class with the specified text subtype. + + + Creates a new with the specified subtype. + + The media subtype. + An array of initialization parameters: headers, charset encoding and text. + + is null. + -or- + is null. + + + contains more than one . + -or- + contains more than one . + -or- + contains one or more arguments of an unknown type. + + + + + Initializes a new instance of the + class with the specified text subtype. + + + Creates a new with the specified subtype. + + The media subtype. + + is null. + + + + + Initializes a new instance of the + class with a Content-Type of text/plain. + + + Creates a default with a mime-type of text/plain. + + + + + Gets whether or not this text part contains enriched text. + + + Checks whether or not the text part's Content-Type is text/enriched or its + predecessor, text/richtext (not to be confused with text/rtf). + + true if the text is enriched; otherwise, false. + + + + Gets whether or not this text part contains flowed text. + + + Checks whether or not the text part's Content-Type is text/plain and + has a format parameter with a value of flowed. + + true if the text is flowed; otherwise, false. + + + + Gets whether or not this text part contains HTML. + + + Checks whether or not the text part's Content-Type is text/html. + + true if the text is html; otherwise, false. + + + + Gets whether or not this text part contains plain text. + + + Checks whether or not the text part's Content-Type is text/plain. + + true if the text is html; otherwise, false. + + + + Gets whether or not this text part contains RTF. + + + Checks whether or not the text part's Content-Type is text/rtf. + + true if the text is RTF; otherwise, false. + + + + Gets the decoded text content. + + + If the charset parameter on the + is set, it will be used in order to convert the raw content into unicode. + If that fails or if the charset parameter is not set, iso-8859-1 will be + used instead. + For more control, use + or . + + The text. + + + + Dispatches to the specific visit method for this MIME entity. + + + This default implementation for nodes + calls . Override this + method to call into a more specific method on a derived visitor class + of the class. However, it should still + support unknown visitors by calling + . + + The visitor. + + is null. + + + + + Determines whether or not the text is in the specified format. + + + Determines whether or not the text is in the specified format. + + true if the text is in the specified format; otherwise, false. + The text format. + + + + Gets the decoded text content using the provided charset encoding to + override the charset specified in the Content-Type parameters. + + + Uses the provided charset encoding to convert the raw text content + into a unicode string, overriding any charset specified in the + Content-Type header. + + The decoded text. + The charset encoding to use. + + is null. + + + + + Gets the decoded text content using the provided charset to override + the charset specified in the Content-Type parameters. + + + Uses the provided charset encoding to convert the raw text content + into a unicode string, overriding any charset specified in the + Content-Type header. + + The decoded text. + The charset encoding to use. + + is null. + + + The is not supported. + + + + + Sets the text content and the charset parameter in the Content-Type header. + + + This method is similar to setting the property, + but allows specifying a charset encoding to use. Also updates the + property. + + The charset encoding. + The text content. + + is null. + -or- + is null. + + + + + Sets the text content and the charset parameter in the Content-Type header. + + + This method is similar to setting the property, + but allows specifying a charset encoding to use. Also updates the + property. + + The charset encoding. + The text content. + + is null. + -or- + is null. + + + The is not supported. + + + + diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU4/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU4/ExchangeDkimSigner.dll index 4d8893c41d510186b68b724c79b092b25a4ef083..b6bf009ab6e14b822a4ca9a2895a5d6f2573a741 100644 GIT binary patch delta 103 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 delta 2165 zcmaKtdr(wW7{JfD++8lP>go?5(2-u_ny9o)xn${nT#SUyz;2(vh4F*eU z+4ulSxUvP#Do^}9vr0RxM3 z&7+XI}pXq4Q{R$M_i-GajotmyS6rq>&&#}QwnFx)&-x-7KOiKpxT?m+zoFD zw18dmz9;&f2UV-)A}V}9z}3=9^Wk*MIlP0N+nyIkDtHtT#Ma{+f7rT}7C^%G7L+?x zd2@Rc>Q%3B$y8~3nd^I0dHdBy%u~DL55eyoS9jLd#pCp~HBdW*+L}-{?b=T5?Au){ zsNeZlpyMd#y&dNcsrMzrb>A}>r?`{b^r`#ZT}OpGJK%*q&1mxVo}2t=V|&l@ zq4N#gB>U;jL&AvjpmtyT1KgVR9&qq;UpQ1jahTtoA2Z?{r-73qD19Q64o?{1oA%t` zyGcTlU43^4Da4lzg%-r+{f4D+jRucPQX(&whY9IgNE}85l22}sW%810PlyLc&WDdo z#eioZ9lk3~g!fOD$;sqejAm1f56exiN19~zuaXy#TY4Sd)1ypAnjGn0Bd3xQUTxT3 z*Q1z^s)-7~HjpQ$le>D7%{umIc&nU3evmXzFGk>bly_9mtia$(IfEz$jS>u?Qq3_P zJcDcHG_plcdsvS<8O9d}9kPwMaGAI8#(ToJ@Km{MC0Y8pJZQqz&R+d?22RziF2)6| zQDP@Gs6O`pd^+2Y>pk}wq54CR=;Bz zXM6}19mbIO@Xj&ev5YIo@}e*aFRVNYTaT;;eR-Q1vlpMIP(wt-d_G-Q6HXvBMZidQ z8QB+6SU)~4i^A%#E-bUMM$%#+KC(!M26F#fNl7C)gpLk832!smIeepR4L!hqMD}|W zb_q*3ej3xyPs#47?-4fZ&`2sz>nh&N?y0IcLK>p5PmuA-;%%m1F=qQ%Ll3Z<$fWT7 z$IeK28=*~ioXLy{=op1Pge-jBGyN9M;-}{4CwycM$C6nbd4BF!I)~pzWGka=)ThOi zRXlyCnce$f#ZX#oW_K4F6+r$_vXI#g=Ai|A$Q?SE-GyFHU_XIXz7TsU*2xW=`*C~` z=aXvn!^WI67|Kb7<3SnPhu6TF+{NmA-tcCqU$#Wm>z7GTJu(jh%WY7*bhXBFi*R&D z@F(HQQY(xG7st#eN$hHHCB^^LxY0iihD=PWfZ=R~kV;|w*+(t-J0aEBH(=)HjO?4AD&AKT=r;B#+q83)bFa#;i4Cf&>Na0-;b&ts zpZvtj0IYVhgtrDG^JYhHUuI5r1_lOZAZFh@-R~eHqxt5@fMy^y`EH;wkRurMo*4k9 C$|8mU delta 103 zcmZoz!`QHfaY6^n_XW?xH}*s*GO}%cs(4>XpqTsb8_wF3j%yqlVti!1EjC|q;b&ts zoBYJf0IYVhgtrDG<7P*1UuI4=1_lOZAZFV<-R~eHquJ)jfMy^y`EH;wkRurMo*4l6 C$RmOP diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU6/ExchangeDkimSigner.pdb b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU6/ExchangeDkimSigner.pdb index 010acbdc4344bf901fbd49f749aa7819cda5613e..b3f8cd1f073251833533201461318b3b61811bc2 100644 GIT binary patch delta 2662 zcmbVOX>3$g6u$S(!W4$BOkbz%Af+9kva~}t2BT$Ki!|M)1Erlpx6r}>O^^l*V8GTT zXn@vs4y_GBsX(+pG|^rXijojDaS3(7B`DM=f{_ILq2d-B$M4R(i7;jQ!;^gX-8tXc z-o5AEdF>-g`cw2+2-p9r(~StO{LRfyvw18l#I-|noBNHH$;m7b z&_fvr(8YZj!eJELZ?XuB@fPo{(CbG%SzMSVR~V_bf3YV3u_AmO9CUzmGyq0m4NwWJ z1*(8*zzfs>lK=}42dF?iUlFZ61ma^C3 z$)D^MUI%`qD1M8Vb9&pgNIa9hm-|%^xr5wqtrfM-Q{113-wzD(A)8kb-aHV=UMkIX zQ0*qG7;rUme+mo=U|_d$x?VM(@>ag%pPxphMQNhqk=OZ*r0*TvtT6WFQTp&q#%G*b z%N)Yx7~#TPeEUCo+pSBphb1kyYK7w?PUhT?l~gW9bM1U6Tjl%)#pmpyuI1bPxtIC3 z;!19-L6o|-aTw9L{6c@;s2DAPt?Nw=`mOvHy<*X8b?jGonYdJROiw#Khla`vU_lSN zckmKA<37(FVpqjRJ&k(vcsC{0_&CwiHNIHVo3ZX_E2DxoNM{RY(%9OU;d!#k$IEF- zbqg<}T^QYTt=flqiPwj@z*rUxfg`{%NI7hk9ZADGFwAa9DUbRg=ou~mv9|W9Vk=d*mljd5l?xxz2$Lw zYCL44Z(LL9r33k@g^fx-NGWn5~QdM?c9zIAjBFNywq5O7#N4jcb$?}enf&h{= zRcfglJMvU3tJTsT4i_J;?9+}+HIWrUEhSv|a44;fvO5dZS+30dIU~-5GapCvpIQLgUZq-QRU5)5uB{7U`h{C-F zPBxsBNWW#s_G*ZV;2i84xHj!rqUr8l?wcT!G{;EJI0Yv(3O5a0c)26}=8X3Xy}#Vw z1rsCP|L8WxTe^5#MoxIc-+}TQ~j{!G<95nNO;9UTJ z3~UAPyh5I|1ZwQD()7hiG<+Di!<$YHM+~c#Wgx3k48Q}i{ D#$DVV delta 2112 zcmaKtdrVtZ7{JfD+|~;eOQF3KigIBL*@l3)F=pJPw2lgFbdDH9rZgLl3Hw8bZe|mT zGGB8bz28*ggG83_SahR3Br-xW|C&oS6`y;Ei4Kj#nQWRFm$+EJ(|e0pEMIaS-}!y7 zbM9B@x+!#>6Z#5Mwh}_dC{8F|mTNpq=|{{WT&180smT=@!1?d!p;0wjnN|9gs**J+ zkA%Y_(r_3)?gg!8^M7NoO zefeC#D}l68Vamh>I#?)K9G6R}Ng(9((M+o~;|ofe#q$?srm5>x?G%~lO`{;M`9f*d)V04C!@RwJ2Q@)>e+$kn2imELeS6?e z8gSiEJKsS3X6MHkr^(N=H2H1tz5gMMvbKwxyc4PQ`9>;S-3zqaEfYTcq%?97-204>#)6*W& z8~?#EbkW7QEUNcI{pSkgAJ8+ zkPGRF+;TIHd*`)7sP)ZjS!hthH9xm(#z~Jw^lI=_%h!f1JED3AdXcS)<98C7 zqA@>zw0XgEauKHz{Unx2SY1^dR)cIa4}cQu*N+FQHAM8U5z#2|6LJor>3<<17m$4x zhYe#S7Kb%rOIYHtHe`7^GhqIC;l=kLEW?{{iMAErb9M^9Q2|#_V%bl~e%H_B>*J_jsNQREF^>DIiSwuIFH9*tK z<&k~UN(t(MW>8l-pnkU>RrGefQu`vFdkZ#kWSLrrBE@&e~*dde;N$Am`DM` zWVK+YP&0Xth5w@JaBRZC|F9UL!{VT|@Q5`7d~OL8cPSjSD)4gtZtz(oTP51uhr@}Z Z3Wp1aJK)?(>lvL2QHjO?4AD&AKTSU%;}oah8A=egoD5-0iHf4upM3qKp9 z`Q#^F24J<5CA>8lnKwIn`!aK~GcYhP12OyN>3#XVA6pDK8I{7JyuK#HGcmtOKI~J7k)NI zv&m1q48Uq9OL%KAGH!PC_GRW|V_;xl24c3&)BO%IGMa6U3}^;YlkWx^137|0@0kII ClO>!0 diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU7/ExchangeDkimSigner.pdb b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU7/ExchangeDkimSigner.pdb index 6b9054eb3a46b41c023059c1729b601387c064e9..efc5e40dd7a82e599d966fed0a3e5910ba7ec05e 100644 GIT binary patch delta 1583 zcmbW1drVtp6u|GfeNeDCgx+$Y;20FF8;|m;orzFLagD&*0)w&@N_dscWP+O+noaSM z#cY7=9%u*|UER>|r}kR{Dv41OH5o2WO-#0$I9Z}*8k31}Mq)i*tsybSKRn6rdz{yI z?!DhV6YJu{mN;Wc4+w&=3N(=PvR&GBQ2(q_tuqjR2fbad->Ux0HbI(AP_%}$0wEq( zlQJI1Yo{uhRm(up8JI!)1Dx}y)iG~1FkPBQi~ew_H%=l``W^~U5j;>sXo+^BgE&BR z5?zFk=q6GK10fMcBAYN1#rRuz4-{eLg&^KF=V2sl$k|W&X2MN)2rtn_6rO8vU(6H@ znY6x4HR$MYJFR(5Xb9WObhPVR#qf@-(GU(Bjk->cCWuS8|T69W* zkNK>$D-;!j4*=hD>|rm}oCL*42HP?yvY+|wOQ7V^{^4ba=J`bCt0O~!4_jMX&!ruUT+3%0l{%=73QkYW193VKlx?qq-e@k+&KfMcyz=CG~< z(?7PkZNA#@TK+0G^G{W8{RB{Ny9)K}hOHQ)HAWDB5>c)l$Cv zM*-^borWf*F2-VwW{5i825w$!IHDG1b+VAtBDAqDU5jcw?wyS8Z{#lMbUz6mTyeh( zR(8TOq{f)94#H^a4nhQ9><(r|)OvdJbg{G|U4(LB_kFl^;B_9l)Hw|8cu&{k(1s^y z?7)q#Ag!ByL0U5!+Y)&?cplQ+?jE25+y{RV(fRb6(!0QuobT-iH^zH|GzJ65z|C$1 z$^cUE=AkUi8*<^`sq;#Ih`Y}Be@Gbv1N^+efP`NUbW*;D2Fm~=_FNdm=MD$uaH3qg zeTj1KQ0e2uyo&uXGy-D#Q#cYlLh+vmH$cXfk&kGkFv|1o;VF?FAMFHs`YU6#(W4>m z&gP$};;-$>*gl{s>sY0VIiFdB==c{JggFW0mh9-Wr6NARP|120EL zGPY*AQOXj`$p`8q55BxRn0O$zJe{E_p?#v|EYf_Ns3nin#0La@U7?@H5|A|V6*_+U1zy%?YK;Eq`%UJezh zGKE5RJyZ^$VyW}LYBWW3^b%^q`_L1%_watih4;xcvK%B15q{$T^hy4d4-owQr{c}9 mDOILb4pD@Q<}RGMpiA~nIlqOpynnV5|I$C3p@%_L9R37QqoF1M delta 1121 zcmYjQZ%k8H6u;;3+PrCrE%ZUPG9D91QB)*~e-a&~Rk~TFo5T-BZKKSp_+f(c54C{e zmSt0B-_gY^j6^gDe9*R+L`RzFC;gx?x|yix5~C&>HIWY*O=i}e`})Yd$vOAj`}>{W zIrqN%x<5$WH>Bg9{B?}6B#@&K;$_zB09Uv}dJU*a_Nhy90Qr9>H?6wW$(_n8&=u#D z&sa7q6PnH9?f86NW96WaDqNWovZlO4Fi;?+T>%>gYV2aE+XFmMdkOH-2yy&&Kv%`{ zL`XqpmBzJ8_h7)IINXnGz$P&^ksL2{7XJyr9f5y<+cIxJ@07V5DgZ26^g{2nq3!FN ze7vp_(#=6RyV4z5v)*th0;h|nzX$e9KV50&8G_4#;u(5tHKVP1|Bq)#Xq-KYO& zl$~3o&S1~Y*Y?5G&_2>Qd2YGtVoSu6qH)mFNDc^%h3Fodug+v|%nHpW%8dM|TFjm* zxx5z27e(p~q(UE_ro~3vj}0EHb=8oz6CzB~MI>8YN5c)^M%rW`5cgW3pwt z+491X2Gz;R%>zYu3&rgnxnetDHERo|RX~ z3ix<>9?&oJ$>=+arHl$`Xc=piT!3GWEpv#A43e!OTT5oexWf&rag(zcBYp)ne+?dS oYWQRME{r%7wVpVilX=M+$b4k}gm)b@amZwW+cOh6mk4S90p^)YOaK4? diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU8/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU8/ExchangeDkimSigner.dll index 260417ed156a97e7772ef4190c4ab4f10afb0b47..4e1bf4f2e0eed69ff84dc5098a2f3c0d6af5cc78 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+#1DapjXe>HjO?4AD&AKTh~|*rW+{Beam^%^&ONb;_cvd0;b&ts zpZvtj0IYVhgtrDG^JYhHUuI5r1_lOZAZFh@-R~eHqxt5@fMy^y`EH;wkRurMo*4i| C&>=bi delta 103 zcmZoz!`QHfaY6^nw*}9`H}*s*GO}%cs(4>Xz8l883#>4IGGDBD<&>R3Y>f(&&rhr2D0V1Q0I~+t>C&c zM>0(@qRg{{!;FTCO0>ceF;Wa`&xc&{Lq*$E#i#01IjAT{RB^5Jq)NMdZ3C-{r45yo zH!E+dG+6!-cZuEJ%_@!f3zgj}IjRE69+eJM1>*OpX6!%8%c!6nve?2n8e8|4^gdq^ zP})>7S8hXWYC+Sk(yhvX9F_S4a&!R=Mlu{m2q&AnRrPW*-u0sjmFyYPHlC2tPHwDM z4yjsg0Ke2&+l)qx)Mj!%g>Gz^MUKs-)UfZQR^Kg+d+IOAxOJOCsp~db=*LYJGN`*D zlT)8NSt(R$|JHzQcWCw~$?;35SZprY@yn!9v(ns{XkQ3U@;hoF5w6nbEGKi9whxkCt)fnPk2^7po9C$Te zN#22EjO}90p=wT!&Hgo{zz@B4VzH<>agGnXZZb`m&VmA zMCO*a9kN%Cawu$)OZK*GtDTMNN!IFg&*@N-fYr)w$*T!zKm-}wAI|U8+Ow<`U^(1N?I4V)8k9O4o4qFn1XG&IcT2AGNoRx4?>#Q@%k` zFwyzpUU(|o!8vqAH220NejVTzP2hKtzBu}PYcndB-Jh$9!ioq-i4B93cU4L>cMaUv zVd`Jp+c*d@0kbG3eo_pXLrEab?Zo(L^$KLiTxe{7uoJ;zd6&8f1-r*CvkL7lF&1WpATHt_(de^ z1G&Q1hlA3W+ADE+>@u{ax>YQ$T_ru2E{AJ@Q@|Y{AMOW%&j7s2Y$#mU>7gFR$56+6M2Q~oJfUJW5`_Us;IUkVc s6H7OG?XfoWl7KWi<*cO6(79{N@gbY)haCljc;S!}6m`S)v!78MzDpdi_|HKXriowjx(haIe z=EPhQiRh3VMncF@}gI*nUf}SO~ zk||`Yn+r66zq zRcSGT@$t*-sw1Cw?bqs9C*(3I_smB2D z3N8yGTtDLHn&(A7*G6zbE$fA-)}}5uUaI98y+`MTpmRKW$zvTnVE3_FVO~_4{5ZqG zrbb-YbWI&Uj2?{kZ;mWw=|FAz=X3z*?r;0YeAw3VB6N3Z{S4Ha%4g@ebVMpur{ z@NXS$yU3T;*Z76l>>KSu$l0z|@PxwcS=T%EXeB02R#9$ae%B_3oa0pK!z!Pe)WenL z!te*FLeOi#B1jP&nF+cc-8!Q%3zUvAF=9HN-zMYhhw+%4Q`Xy zkbPR(Q(D~N*v%#f?Xrcq@R*O-#XDno)6jO=O!Bnv@}UXe&V8(X*T7J&$&Uwwq(x^w zZGj(#EM?FBr&D4hkD>OEc0$Qgb^^~k|7TEq#u8X;;UIOG^B&DYAZ6N)U&TQhkY&YT zZ>`|hfo$Vl{RlY^U!8eA;2>RC%T1b%Zdu+5WX3pb3fb3jSU)}li^FR04NWl?Sd!2$ zHXzK^Aa0YjEf&Eqp2P#Y_JqsXmsq*{IDWq%`y&nue24v(cvrX}{)DVvV+KOB)ci#j z#GMI*)W%_-A>;4O$8x_dnCw#(aTZtMJ97|V7SiXYa9%My}KO$38_!kD228By!n@lC-GM>6Ms{~R4Po8@w zzXSD3lwNG_Y?N}W;tc9RT%SXI4uufdQ?Lfk6=Xn9Scc}|t#H0@ZB$Plu7>>^)^Tl z3XhIGXu@9w@u2KN;eQYe&}_2Mo$!=79egectS%e0nXT}4-XZXrq_lFhc^IVvWjl%! W#TBgBOLsFm9-%B{d`_K$UhBUf#htzY diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU9/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU9/ExchangeDkimSigner.dll index 6c64a3aadc40483cc84221ae0e712766375746f6..e59496f5ba4e2276c03dfd87068f045497746c16 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+_z!`IjXe>HjO?4AD&AKT5b3CE>3CA*y>ME>*-6P!C7Z9f@UtXK&bC=)h@d(-x(9EA0|$_eQNU+7k)NI zv&m1q48Uq9OL%KAGH!PC_GRW|V_;xl24c3&)BO%IGMa6U3}^;YlkWx^137|0@0kIa Cpe6nQ diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU9/ExchangeDkimSigner.pdb b/Src/Exchange.DkimSigner/bin/Exchange 2013 SP1 CU9/ExchangeDkimSigner.pdb index d1272926e6cdda510caefd5a2ae4fe9639b02b9c..5a66c854888ac93cfa22da8d165e4216ad8de558 100644 GIT binary patch delta 1940 zcmbVNYfO_@82--Ji^WxCP(BL94WYV<1u8eI*|3m0iJ)z#LeX-GAQed*Oc&kM$u4mT zinM*DAx0`wv+%#O%HV$c*$&2+#l`PzUIN^}q&T zBTx@C0Dhnmm<5=C3_t-g0V}YOevd6-`Ly&zkbbk~&`8XbwGR4Pzyo*zAMg~A7q0T0 zOp{G%;Lo841ByGri=N07a~2vPJlNEK7C!3^FmgGxT&uX{Q#B?d)ug6!zjc(M&Pkgg zlI!Pw2c$eXV)8Ra@41%nSIYLWhyp{!D2tc_Jm5UdBH55vjIwx+U*`Tw7;^noSK**Q zhnbJKT3I9y4%Kk5ni<`!UqqFw-j6J@QC*FVd!KxhrCPprFrzFh>-{!JcZS%*3S$wLMj*l1_D?XOLmH1?ZmBq^xCf|_AT)u}w%ex~L*W?Sr z(yillt{n_+G+yP7R8I2AYIwWeX2L#RwOuR!q)}TrC^I|1S~IMrUB1Kdb=AU!+@5Dx z0iE|;U=F_9yH!h*{z?`kOJk6A(#ws(v`(!Ndyk`~mvIz|q=JWOYUAr7^mKg(E2M`S zx|p4IV=ST@4MFg={vddc(VomxB=SIWtFa9YcsBhall!^xNb@m~B_7}DWh+#k|A|NC#V$=*SNduwuV{{=g^m~IrLgzm12@6MI5LO z$3?h!x8LWo;83}eC4DdSpeaDGBc1oT3?6zy$&{Sp>Vo#ESwho=O38A#Sg}ZV)FK;H zvunCYhoVR~#XSSHBZEkuI-T4a=`T`pq+IbF2top3&7E05Yk#F;mI7+oqiWuFXF9vw zU!r77Zm0##H13^=E;~}Kq)S$HU9E5t?B$v0(Ichd+7t@y)#}6(vz!*}O-~UX;xT#r zp40~^bWh5L!x|y!gl9X22eR;7bV10WvjdqF8puXFbY`Gn1?(yb*UvE&tFpRJNlDlY z2&ul$Mya7>7JDdq0LigCd8&10ql73T`=Ka7w4euV7tq+EY12P!-@qo$u%HLyuHswG zo;FFkxhf+j6eLgB!X)YnTae(56iMo%o^S^EWr#QYfK50)$|-t}SN7Eq4ZgTMy> zE|9bm7?8jcx{;`feq5Xh z-baZ+FU>ou(79;7CQZuY*P=y?X?V)euR2{mN}ncOY&Cgf&L;8b3lcvgvA|8hW*`9k zpP!Lf{76R3j7was=eDng8M(T5ZbN^eYwf|2_cgd6)q3UGG3u{j#-4e6jZ^yc6$s!{de4H)QnbUm42g| zWKG&YA`ubMNCduVDP#^KquP|jq$H0qSUOAxQ-qMc!UPo#Ge2tP3RY1xO<`daIc_rr z`=+IUM*?ZL%GBxa=wPm7QEoe^Ng(8%&X-fIX<)+#d5lR`n>`is_T z0@I6Mvzx^^G*nY52HjJLqwl~xyR|Eu+st(Ea|$!1yF;($h(eVJm36tybEs3GUF>?@ zCt|>LHp)6$OodDeZeJtqgfD%UumLBJy(R|Bc@z=E#sLn0)_8=TfwfIO+65<3cf*~g zdbIbxRgX49-37{VZnsDEuWuj5Jk=-u5CX2*Xl2d4JWhY}A=&|v=6clir4e(E%n2v5`wN-stt*t_KQq9chvybS_(oR z7YHoRc#VbzBq^Cs#bbo@W|AVK3bvtrvP|C82f~Xx$2~t|a_?{k{NPN6Plrln8@ZJb z<5c2D_OQI49w%{LU9-h#?Sjph!6X_K}QW_aYfV;(t}u$-ogK3ml6rdS>@hOi2c3_ zb{)TVQXG5ap@a=kJ)zJB@J%R*4P;^sA>D9%!iM%XyfKb;8k?KAPjhS|)eGR|OlR=XH}cP@BIgYS-pVP#IhY+7k*? z=at0pf@0h~EAZ#xMxGU>LK_oONea6e+D!2`w`S^3gCPqOsbH8X7wi=F%D!+NwfV_A&5UB%2dC&!Uu~l%cp#+=0^lw3^Y`2xaEk K<(LY1)PDecl!+?< diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2013/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2013/ExchangeDkimSigner.dll index e71dbc399f9d47aabf53d029a5c804047fc99cde..ba93850839ab296b9277ffa06d822fca42f82d9a 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+_z!`IjXe>HjO?4AD&AKTDDywOKGW~F=d|yyI%AF>wA*~eg`bVl zeDV`71F+i365bk&%$ps(eVIAg85kItftY>sbiad)jOLpo1Db)<X;Q6zn%nB)Y-}!~}SU+eV%-(#(g`bVl zZ1NK?1F+i365bk&jGG<3eVIAg7#J9sftYRcbiad)jAol71Db)<cBcA3p9n^tYTq*(^VXjz-Z;&DAG z<8i!vqJ%q)92Ap`p?4e)C2(C4n5afYoy6Kiy7;ZlDOYK1ytu;zDddQ zbH9Uj*^*-M1K@}50)DdmI4D*!IHy3d1$e-99+WiNZ<&HvhF{|TN-|{mvEJ#xK!=S_ zxI>_1lS4H**lmC}8uPGn+q{yOkM(u=-224akd*$t1I!X*SLT*Jo-Vlp*wf(PZpQ*} z^OMVW%@>DnXUqt*_^Y-$J_9s6KbOujzUZ_=tlSFV$CQd=IJmi6abAU5e$Clq;Pvi< zKu$PYRijic^2KWMb-xE>e!uE~UJ8NM$0-Ts`PX&hdOYmwi|wc;4}9En2rlBZ=L2x? zBi{XbT=Z8;D>}?*?hw<-=8ohQotb`lx>!buElo#Dy|oSIFy0!bF&sPubNpJc2w)9f z-@6_&_Sa$ii8qve5%PR(-zCZvY!lUjZ8Cn>)=1eNZ7%|xaHUD}412peYF%k` z-loQn5~Di)=l)KRc0P-p;isw8m*FJ{;dJLE8eiz5;{1oMeu*FMZUk}cg`V=*!HDqZ zqtBFypY7A0TA*qDp;8^Md2SYBN53*4jK~$mJvOZ#BEJWDEXO+s)8?$ zmGYLcNr=5t@y*j!vV|>* zFp_$@K*HmbdptIrsgP6IO`#@PA;i*DbT`MynaAW5<`SPW$#E^mjGChy)B8%~bhfNj z*ri!J)%dV%WjDlEN77F5BD1SNWX@Iki{%WKCEf-h6fTT63s=jA`YUA{3uq;WwWM`g z+h6pT$!V;Hv_k%Fc}laE4^+$RnO!?jh&&@xsAAU7pa32W_0VMO0A4DdHo7ZV%f^yegqDKNUkGHe6Sjjx)oXX}%xd zEzHq$PIdM~QgGYICiFyn7~Ghv>Lwx<{OOStTKh0Q;>C5tR=g0&(IvBNel=1IpyLUn zzZncURQfy`qP6Iax?05j5h7mUwPe{t>?H!k|9OSQDIX@p-IBsvk c!LugqWwvG3lUBUW4aC2^&fB4dLs=aD0!l-;=>Px# delta 1206 zcmY*YZ){Ul6u;;7wRu1n+OBWwR**N@mV$Gu3rr*dR$5t+!k)1BfuL>NSe5Ys7=M!C zwkp#Y9n-#pPMIz;lCdoW*WM-I(nP=U0b}N$M8TO5FcJSGU@{_!#Cq;~kBB!p=iGCD zzxzA)ynA2fzLfb=dN)+Ei!nA0H*~pgs3$?PO1135`Tz~Nm2}bz$9Usft z=%C5k*95Q$qg~zbAztkIocceuf3KWt5h60mheioKdngSfxTL#_{4vwt>=rBA4hzo@ zr=<}YmmTaBVc=jVt^Izao$9n6y(?v-1@mM*LnJiP(+`9YPAMb`?{^Rk-AsfAC z^u15;aNlLxo9q{LlKm=P?|+U|p3Df!N9Ji?+YQp~qxjN^eWdX1iJPF~#evJBz09kf zB=^hfC#76;(E3CT@t#RNX#(U>Br~$T4JTMxs*c#I&V+{r; z8q{TM!LHC|qZt!TtL5xx#oE_F`$dsY%+u8vllAIyra3K;(RKl*?6RrJjcNtkW0yQ- zi!!^hxyeQ~$YQiA#)Bj4Ho9hNv+8Hnc0(y*m}MmxR3L02hj5K1&0?EjcT zMK)WIiJ|9wr4#{PcYe@OJ4C?KWMd?-f~=XyHz?0ie3|k)WQ^gnp$hyo6u{AZ8TL+Z zz|ZPdn)%Y{HcYOrG3UwE3MO(((ReI~t*f50@VX|7`a}3uyt>MdGx?Q{Qs(2=^7TOf z<)WFtoX#pLq@i=RMG62uGrQg^?ju3Aoool03wymm*oM#h%P|#GP>Y3ez^~z()%!8! hRn%tUY$A)0iH4(Ov20`)v~nmEfqM#fESJ@_e*q0(UlRZT diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2016 CU1/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2016 CU1/ExchangeDkimSigner.dll index fd7ef26bcf5e07dbf5441a5d2fc4ee2000210976..1c49b27956fbccffe053361feee16658ad48e0db 100644 GIT binary patch delta 103 zcmZoz!`QHfaY6@+*bjk-jXe>HjO?4AD&AKTm^6be=1*F=Q}^<^${X+AZ`^#vg`bVl zeDV`71F+i365bk&%$ps(eVIAg85kItftY>sbiad)jOLpo1Db)<XAoNa-@OFn|zCAM8v!-y*mEL^Cg`bVl zZ1NK?1F+i365bk&jGG<3eVIAg7#J9sftYRcbiad)jAol71Db)<$*_{M&H)aO~zKB!Wad%QcN7(7_zuQTY;^EZe2E@0}|W-!!+RL zj}QY4;T={Nlrn*k{h^8Wk}#EM)F2S15j4?YO+-jEK@y`FQ6}}faEYWk7y_Zy9gz&tL@nSK+6V#R?Z#D?^Z2rvLLFbyyP%YhZZ zN}vv?2ZBHYkPcV@703p100%IYevi%MMKtGdgl;VGQ5dtUl%v&F3ssLFFM^H%jygx2 zX00G7f-cMo70nvtoIdc*6fcx+=UO%h_W;*yArbN%;dz-md2!~2IIBcA*)=i`G#UE|$r^ z5?+7k+x%;dln9pd(`0Xm@U!%MLnQ00(SkRRgJn{15K7pL2{gR&I6{xsMYxg1 z)NkYpZNt+@SL!1e*90SUyU9d@!4}MrC^dVrp(Uk%YG^_izE!^}RQ1#;t?3{#z0%aG z+%jn4b;=(GY71|M5{Ymz=jn8L^+d{BTTN?rysEWC;rnvS8DtH&%Bta3mA-AQL%#WI zW^wBGOj5QRseAo8+v!x(ID@ICf5rkjfj)z{y|#@j%b%pS$Oa_%JaUDfqmylC@a$TT z=Ee8xdla#?y^iA@obM=$Z;DEH(f7n$`SQ+pEa6ZSx6Cn!s;5u!c;^>s#CugrI&aL}#%G!0$W@!0cw{1B` z;XV2Ejdv`)wyQ$5vV;tS)Z+L^58Kwe9#eLgsk!V2X@(2~ayZz2*Q0m$BWe!w$PXE^ zUC+^(s!~e!J+oCiyP;QDp|jPg_=uX#uIejUgZNZ;n`P#yT2G0Z#|q@1K?=ep=}D3K z)ZA09+E_?0c|cF<)Y;E^=Bkre6|7Q5TK-CJxpZ%(I*~c_1vSG%4*TxJih;eyl`h6E zqpJ-tOOb!35s|Jn8H}~)hI_d;!0oyZH$RiH*YCq!0XMRx>8Ss=$b#2E+I5Tk8;ywM zOk@5LI6^>6?g4NUblbgglShf`nm$UPXOuwiC~*OBCHHBj>)$!)ymoz>bd`6(A>bNN zh867uJ_7K;v4y}(3I&|G)ZA;Mam98TJg@-z0eZW*NVmCD+852C#l7>$7Y$H&#?+Lp zKWe4x59MGSpk%L~#vRC}6VW0=7Aq8&q9vRgL`L6lX=z0$eT>p#OUNJdG|G!YioC$E zDQp$68VCXZ=K_!IqGTOVY7az+45^)l^5Gm;6E<58r~@Q H+$8@C7qh%M delta 1528 zcmaJ>eN0#CbPkPKrfoJh7|cbfj${Z$ zna0cw?K|@$I!VS72E=W&mqa9u?7x|?nE8>Y3z|7hB%;|&W?bT8J@@r3K_cAboO|y1 z{m#dI=jQd@7Wys;Z@Y4L5JJW&DqKNUVxFP&0<#L&DX4-a$DIaH|8vJ_*35Qhmwuy~ zWY4~bq*5ZHsT6$KQ^l&yjA|1Sld^;6xMze8*@T3{FN43@!jGE8&-^u$6t0dT$7iA7 zD4UN3C6KnNOr89W4!I<&^IA2P1wy75eze&OzoL{`{eM#?CvQ@%S7c()MxmhgSFKkD z`H3&smAZ18Xby;R-vr|5+j*JIZZ73ElXsn?Fy+~rc(z;=rZXVW;$p$wuM1RW-?n@t z#=OULR(l<#QSf#|giH}8J3hk?&~;$17;oTNL=Za%5kB47O7kEm(m`eDLY)V5kyf-D zUu>oMz);KJe1Y5jx?Xr`50+^<^rsN>CiTV+4`7-P5AP97qSn1n5JhO~?!=AFc304t z_mwpcH*5HPeAFCoY-bo1Tiq z2R6ahrH_0sc@l@3O0CJN`U79ZEKLkbQZ9cdcM~#DOlr(3D8t*70`k1hCnStJ$6f6g zAT&}0Kh)>KsbPtF9Y-DU$h#n+A zVOQ?iB*-SBTq=SmiR!ME{!;X3qUyK7iauP=;_i z#VGYS&TDv%;l3ZwH~7>DY!afO9Uo{-DtMEqY0SH?qr5-sCqj*rZpmHjO?4AD&AKTu++|4vRR?mWg-7sss6Cz|2JQ85oBXD zpZv^A53F{wgtrDG^JYhHUuI5r1_lOZAZFh@-R~eHqxt5@fMy^y`EH;wkRurMo*4jf CZXw$M delta 103 zcmZoz!`QHfaY6^nmj%zmH}*s*GO}%cs(4>Xpy*uV#$zcjd>Xzw6^ke6g>Js$BFM&Q zHu;&C9$4*U32zNX#?6l2zRa9#3=9m+K+Lvzy5B)YMzhV40nI>a^4&mVAV)ChJu?7y CY$Zkj diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2016 CU2/ExchangeDkimSigner.pdb b/Src/Exchange.DkimSigner/bin/Exchange 2016 CU2/ExchangeDkimSigner.pdb index 92b87f2ce0295e9d556d99bedf829d2c008b712c..946eb52fc7f6b09fd8689616d58436f1edd2e58a 100644 GIT binary patch delta 1565 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 delta 2008 zcmaKte@t6d6vxkfl=6V$TGj__9a6>*VIWi-j2SoiQ3vv~a|GftrQ^q#us9$ ze9rgWAMd<&;J!5QjWnDUw*>&E7!A}MJXL>zv2)xc-C<~zjIqT5K;yqbr{1GCbF=&h z^T_6y)!_H*i2D8bZC^gO={fUE%Uq6e=)I-mY&2f-B~==*(qkFk{p1HzCvt*OyhK(5{0D0#N@#e(u7~`hOe;7B+-eaDA9oISH8736| z?&&w6;rWaFT2UtRHPq<5_G#ke+d9XuZ%h|9H*EWY;Y{f!-%FV~33OP~mc<<{Z%M3? zUvB$I=Pp02Ms*f3=~F;^S2uIu>8>y70`~1{*Lf>M79HxkM+E+?dk1U6*q$!di2G=4 z!iAm=va4V1Ae+8k!s^i9+retFV}B2G z@SpZS&fMjHd-~rO{8<0jl&RSz)@gPrIPYqtJnIHT%yD(UZ)|1KoxQkou#@)t{on!v zJbmE2IN-qRJ1F08Zyu4n<%a{;b;u)v`LTBj#IY|NsbKV2{_YbI-tt-I8KVn5Iv0tT z`f`0A)SS(cLQTP!i!+IiPDJy;x-U2cgUGOynuaV2unwAi01}RhEp-iH*t%*rqLcR7?7? zDow_@i2}s}cJhiA-12}%*G`rxW=Pi#wy^ME>CrY$a`>D#%<9CAC2t!6*$%VACwIZ5wnETNQ#G45J$&mh->5 zc4$3I(5k@*SgToL!FISxEI$O3>Bh@KuqtA8q!o>F@|=@t%w@d&3%&i$fEV=ibEKKH zl<{_TG(bxT_Bkk3J#)Nuty6MXUl_I1TC5;Y6;WFE)p(b zj}SA3(4~aYxgHB6EDj?q38ULgEHA`nTo31TEjoQ693&VlGnw9WurVlvA!1Kzj-~7? zV)_v5e3+aUW8(lSHDNSt$EH);GlyvYEcH<;l@#hFR5mwg?xyFHjO?4AD&AKT*t_$=tHnVlyc?(fu9@&wXVAikQznB`9I?dzx9Q-c2IcxJ37k)NI zv&m1q48Uq9OL%KAGH!PC_GRW|V_;xl24c3&)BO%IGMa6U3}^;YlkWx^137|0@0kIw Cz9uFB diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2016 Preview/ExchangeDkimSigner.pdb b/Src/Exchange.DkimSigner/bin/Exchange 2016 Preview/ExchangeDkimSigner.pdb index 01b84a7186013b46e93dbbb6e35cecde3940a683..10a9d4f447f9206c26eb07f364543a6fe1535d34 100644 GIT binary patch delta 2384 zcmb7G4@{J07=PdQyE_kersDB&z*z_~ zA|^COB5+}EhV)n@*Q|DFx7^@|{U*~`Sr(Vpxqb@-!|7!a6bGiS!T<$9fo6mSu@SKe zu^Ca0s6Ye|m54bAJ0cFDBH|G)#8S8&Ud~ft<%veP<#NJ6*q*Qf?duSw2tT3>@gySU zaAE1mSYeOF`59b;6^nauPHO^t*!!>*mFbJRXW{pJK@J5TlQgM5ajMvEgW?4XWWY7Z zvCc`iRZ9-YfCse{q1gkR!^Z{7<-Y7aTvL(A9psuLD1+Y9TuVg#(Lp}s3M0k3MUyyXw!)=1G^LeeGy`S+d zht~BTS>PGv(zbT|Kl;^nt8a@>20J6YMVQ9NJK%hxtl( ziJJ-xmww1S@>%~j6O0A&xqzg~Ms9|eD;s0YCL5kUHkUa3N+R1!a}E=ZM|N)w%!gu)|XRKZ$mnV z0dJ!CT!D`5A&1acj}57>{&(C-8=_y4|7>gGV&gN=)TpPp*m#wWYPjhf4H!wuu5a%Y za(7EP#{>DYHD_pNABD*Nr!w`k9Bp00$<6+>N0GkgNBB_NMKkc;IEc98hhB&ki5{%Q zmMD&SCDJ2Hc0x{IVn_dT?}J&hG9DQ4sz6R zB-6P^u-e;Eia03`n?)Mw^gsDH;%7t-R@jgD6oGdgTZK3zpv;{BwY?6QpPmH6NAhsI z56-5i8n#@0EbWVj)xB9z+E)fO%a-c4fj&F@@=!d^%OKM0hxtcTIMbJ^#Ih85xo-vM zij3+1%WO`?(x<^3eggbqZx!8gB=jLcN3;d86%j3+bv=UIPo`hG&l6vYpUkLMe|rt}MLW_KyrS>~ga8o=*g@kOI*v~Y`j zhpMtAZ3Br$C8W_PeAijZ9Y#*oX_?DuK4Z9gf{tdfh}B~Pk0Vo?VM?UK0U%c7uc z`&I2Sf$7C>_^pZ}8mae6VfQq0Tx(e1OFIjM&P@kDp)gxr8#!Dgu|pDgn~S-x>0QQ# zB)-@@EQMUXF}KzV$_gpC+uGSB31-?p!&`Xc*egQ)IK8kN9_SNEP?4nD+Ykm zIH7g>L_k>HlL2;Fg6We1Is~@kN9kqgIet_u-Fdx996? zI|2+OXz6Iji7$1O(2(oC+Vz3(80@+(V*7)!g#MrfehR)Mf>m}4x8c~~-)^An?kQ;L zi8vHT=K`aDY;}tZ^;LGl$J!7OXE8fE2$KX zhw`Q#<$&h$B-kcOl{~VlC#l!5tl@x?LvCX=LYgsx$a7jl1?uEh<#A#+#2_IUK+yZ~ z)c(nx$~tmTPdlK;Jr~CdlTO7(+_)?xe(gNOKV3BRXUxF`>X7Zly+TCLxKL6~2JuD9^#$pn zCT_Hx%%@;}Qxdp{8^2A$#<3rG64rpNWL}fujUwBiGehh!di@kneF32pD-ohWO&9EQ ze4`@G{15vD+3!i%57_l-YqCc2GqTphIy91he)cJ8B)d}yX-dMbA`=ZK@jCdl*a{;N1v;m8z_pT%F*{?b z9*%4-jOj-<%is-XfV#y7`!;RYcu57$z6Aa}+}vb=>Bz>E$4C~x71>Jh|4Hif9|l7{ zrnQ4%b{Df!sGEJ-EPgS(IQHNWe_=-GG~4KIIAqBIzgq^o+W}`Sb~smX4E$y}y9#}t e#Zir;28RoWJ5;@&?&EYWN_pnoJ?#_n+5ZMIo_H(( diff --git a/Src/Exchange.DkimSigner/bin/Exchange 2016 RTM/ExchangeDkimSigner.dll b/Src/Exchange.DkimSigner/bin/Exchange 2016 RTM/ExchangeDkimSigner.dll index 891247100aa582075d074291446ead6704fa4d32..324da353687a4997ae6e6fcf4e7ae566c91bcd94 100644 GIT binary patch delta 102 zcmZoz!`QHfaY6@+=nsL2jXe>HjO?4ADn3x+pTCeN-rn1>ZO+^b|H_}yo3FU=voV@a ze&S^SRytY2TZ55#v!k~!GbcL(0|PSJV1dO4?p_uaTZC1qqAag5rb|yZ6lb z<~(M0=Im`5QCh~8&eWJ1#@GK^;)gtSz)dPmWNz3+oF1YDXzy@F= zun8yw$^k!60Ym^czz(QD9N+@x(;t0{c?xBm4AAecMC$Le#jl5bEl>=U0HwflKyp`J z@u^tF77P6xYOo-=7rLy8Y<=D(77V5q^`D79EU4t7w= zO_dD}(eJC}S~4c&V}i@U>0a3a%3bw|wjh;?3R6YNvuF7%=eKTdRj_%%&P(UhKj+l6 z&MkcI5iYE29{x+OFb_M2BrSicmF}yYte$JiNhU@;E?fXcY#BknDqjJ@tmvUI)QQ~Id2_x+*Z5v#lAMz?F-os6F zzW5?{i~S|rj5O-c<#uvb1h|9Vs0hS5j8^PDj+R-$QCP|r&8G29@5+Q{${M(pqRV&j zDB6#wmF|`Yps)1@cnk?Vqe5|FWE@!TSJa_^;?2J*RPge!R((tcIbOY$8!1>F;06lR z?BxdWbEd)ZVR^5wWID=Buf*)1A69#9LOsgj2saLAhn1 zmK_Zad#GLn__at3$zNC(mTVy4`=D^068UUT+l7(~G$X>SDoyko@Ap= zvv7n4Rb}_&MT68Mf((8=?CH|lm#T>@N%jLN2q4+B6AP$q&s80)QcrtSkL#PL?0S2q zn!pNRmNHTJgCxE1?2deO4s+@2s>PJhx+a!B(2>==P&!KC%pK}9%fmyAvvn=Z$qut( z8m<-g&S|&=q+Bx%SI?WnZBFval!UwBn5a8W<=z4(yOflvTnD(tVd@d?0=OidGst|% z9}>CxuRx|xCMR(gY;pcH+!}D};VUH+G^}C=_uzW4f0kur`*cR`=pHr#u37c~DO1T? zAU_LJk8tndIEZPu%{WQ3AIo{zE^x^@XA1od=P5J=4cs zPCQ4uoQh(m3@yQ|%!tM^X)MILHK$owIAKr}Z+MDt!UETR4X(|wJL#6Tdv+GP2C`7E zERtnYIXxd*;6~U^0QZ3${HBM2PXY8iwi0+-q0-cNs_k~r%rqwr9bJz147!k(qT4*7 zcX3Y~t?JIA;+|5fSu{Un>+iAAPfx``FQs623C%pJ(z%`#Lo7=cw|kaybm++5-%O?y zq&`EYzSUIH=dF@|)KcUJgxt!_z!snq_&*;Ia+UJV%XSn=V|~s@2efz~g-*E2sq>^o Z|EO@xErL~E`*px$J}lPqD#0^@{BI!1;-~-s delta 1845 zcmaKt4NO~A6oBu2yw(R4q0l}$ic&U)Wy8VP#+Y#vXdM;UsE%kPQ|d&RgG2|qB}^#F zbPJB3zB371kSH3)^qz_31QZgoO|y% z-?``9d*5l=aZl)&6Z-54y9gnZ6bBSH%hX?>^c*t^w<*|!r1&Bg;P_9(saNzSW|DrR zie!pgNkSnJX($9=x8<>XJ)_E$#H2X4K2S17hm(b%#bp3jeiAp8Bo}iPOjDm*gg(%* zSZ5*y%j%mxw*=C58?#Mcro(p0XuY0K4FVzaKYU>{rG7&xGrIn!%rJYGD(xZ@-N_W> zO}{Gb1~5ExkzFm!rork;G2om+j=q{p?Ao?0zGjBqehM=s+k-D=i^B6FRMy#y)Q zH~=?V8gO0lMgu(o499-3?&s^y@ObOZm$6ROfjW!U)*hZ`uyqgZgHUS&?S+Oz zEwqW_j5kbejYQ`dU>5%uNi*yK8txackr0O@Oj^@OeIUyj_pMzr5Qm1RTfI_v%u3G#hxofZzK0rJsH+V8vU^)7E8XS_O1l}1B6Vj7G3iLKGkL-|T^19X(9-KKZa$s4{SUP-PoB$t> zl*ndsEk=#0#IMLh?9L@2nWLNJG;&jGx_ep{%hD_#jBb@Jq=>f`%3E5NvC?ps4PYJ1 zlhesvtw?nQs~PI$RPvLg?ySQMyv~;@%2LMH$qx~mPNf7BaC$US+B3dQUO{$iWshrl zr3k(>ULaeE6Wv@Q2j3gH+s0F+vWaAA_wry!xO4=Mo!a25h{eVib!KE+AQMtzdBjfC z#}}cA$Kh~n4 zpIpHqPxCBi5}vL!3M)splP5q~zHa~>8&yQKuMoB<@e(qJ(D0v-kju!vio!-Q6N|!X zuoa9^SR=BP8q;C@Md63h--`_uH~!FaqScR;=$`6CgN z7OA{A;((9*R)KiA7Z&`l;mce^)JIER0a}3S!;!=oGmKPEyUTqgg*sW za!fE4Tosc-lG)YZI*R`Zu~UEQbeUMl2D+It!9t;Y<}oAhs7llwsQibehc=^?R=^9U yRPZ<@usQSLu*n8TvzowTl+48#^8{)MYALD%)#)qQMXMN{4N;afdq*97Zri`tl#KNN

    72WgkSIV(Gc_udbGq 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