[Spice-devel] [PATCH v2] converts Spice_style.odt to asciidoc spice_style.txt

Pavel Grunt pgrunt at redhat.com
Tue May 10 12:27:42 UTC 2016


Hi Frediano,

Thanks! You can add
Related: https://bugs.freedesktop.org/show_bug.cgi?id=95258

And the generated file should be removed on clean. Also make distcheck is
failing for me:

No rule to make target 'spice_style.txt', needed by 'spice_style.html'.  Stop.

Thanks,
Pavel

On Tue, 2016-05-10 at 13:16 +0100, Frediano Ziglio wrote:
> The conversion try keeps the content as is no matter if updated or not.
> Asciidoc format is already used for manual.
> Using a text format make easier to see git diff and send patches.
> Also it's easier to convert to different format and copy to web pages.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  docs/Makefile.am     |   7 +
>  docs/Spice_style.odt | Bin 19045 -> 0 bytes
>  docs/spice_style.txt | 450
> +++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 457 insertions(+)
>  delete mode 100644 docs/Spice_style.odt
>  create mode 100644 docs/spice_style.txt
> 
> Changes since v1:
> - use different format for sections;
> - use link instead of section number.
> 
> diff --git a/docs/Makefile.am b/docs/Makefile.am
> index 18e785f..f1759f8 100644
> --- a/docs/Makefile.am
> +++ b/docs/Makefile.am
> @@ -1,3 +1,10 @@
> +ASCIIDOC_FLAGS = -a icons -a toc
> +
>  if BUILD_MANUAL
>  SUBDIRS = manual
> +
> +all-local: spice_style.html
> +
> +spice_style.html: spice_style.txt
> +	$(AM_V_GEN) $(ASCIIDOC) -n $(ASCIIDOC_FLAGS) -o $@ $<
>  endif
> diff --git a/docs/Spice_style.odt b/docs/Spice_style.odt
> deleted file mode 100644
> index
> efdcd1a62ba0c4995e470b6a5ec22301f24ab340..000000000000000000000000000000000000
> 0000
> GIT binary patch
> literal 0
> HcmV?d00001
> 
> literal 19045
> zcmbTe1z225vo?wa32wn1g1fuBYj79_8{A!k1$TD{?(P!Y2_d+<dvLoXd+&3<^ZnoX
> zpL6d#(>=Z3s_LrlwN`hnUR|Rk3kih*_UGfr#H&BRf<XCp at H@f2C2NqiiIcmX3Bb<I
> z3Iqf=foyFUU2KdQYyplSM+RFv6B}b&ptH4!jT3{DiJOzspUPl=i at sI%r_#SO__tr6
> zt&P)fPB&|-6YrI%Eh&f7j%-prNQBlR*@U~I?86fl3yW4WJe}u&$}~Ml0T{$Exx{Aq
> zSnasd?1s4%PA)8%YTM&<M|(d<!ro{W#mz5rad~1Y<l at p8Wn4EC#Y4u%reem%+sU!9
> zU5_Clsp6-_N2yWIyJ8p~l!1$_z?7Sl^mqfCRp(&JSGyP2F2|4PszqkO`HZGNZ+KgQ
> zkLLyu21~0rzK^@c8;fR9yQ!<G730OOyGLdd8H*dA%r1VIl{38bT at h9EWY_gvRCzzF
> zV?AS!R(h31hR=<?AME1LJ?Y#Z)clZw`|7oc at qG8Kjt3p4Ss>lAvt>36X0*PmgFE%%
> z<*9tBqpJ(+)a0AJZQG_f+hJ{!a=>-*ve$-oc|xvhiFgf5743T?PCDNFPK|nRO^#J^
> zPi8#TCMHWZ16iq=wl?~5RM#e)@~NUU9ZgQn4fTr=3H!J7w3NE5$ZE`T?BkbwY(P|*
> z)Ve+qHXCH}Nwc7Bx807@{ow94YD-MMANdZ<WIWM>zhLw=DzS4-^J$gc`*0xa2rv97
> ztw0jr)f6Nb;9!I$<Frpu3i^6C1k1PuSu$!M8N^Q(|4Y!PxplV4sgNE%{XU4d at Z>(N
> zV>=>TWazkL(fMH6{`m`Y{3bN|R|@e4Y;^ikXc-TP{O{k8we;-Y>*1&BJ#Dw4qhYV6
> zG$bobh)z$;^c+bbe>B|WMVBuk2slh~ec=@l%O4DUjYRZybU3j*z234q)}(|A25MTE
> zYDZf#CX3m%yJKkHe80F`I^C72lw+b{8X`#7wQNjQnZ8|IzR<5q+(N$k;tNq}azlK>
> z5;9g$XD5G%RwF5p-YGC{we9gOC(#~y{Ng at 6KJ;EFvfaZs&v*8vnfQ~SL9IYMa at 2|O
> zY^DZRfzONbUee-Eb^yvGen9KZtb9cHJ6MH25s1FHcZ<6`tn>{a*EGw`cD+Vtb=)GH
> zD9bvW>+#{}C=>k39pZ5#E4`?2dF!iF`N^^$jqLKYrLp2^H~aTaNpp=hNzCwBmheRL
> zXXzdxQ=#SfkGC?40^!Pf!lQd>Wh<?VUbvlpF#C9Qf;_Q$^@!u_3L-sIl9?^=!Hd`O
> zhq0l(_|s9QsZEB-ukGhvj+fYRh%d)(>jDrPo`XTDR(V?b5s$}L*!|d_YN3f7C}$TC
> z`IC`m9SMqaj;iOPfCc4#W-plUzx1|rdATT#FHw(4Z(RezgLs*yEL`rSk11YhyfR<t
> zJ&Heg554fvbayf`5Z;5rB}2n0HL24C>ZKHA#-XDX>uPrj%k8rq$=&eK#uF?*To)Km
> zA4s0nS$+wFa>hvR{9#^~V3!=`s=HFSm8}<61~GnHa-n|c-Qf>?Y7L8VEcLq28^<u#
> zV85s{_k7na>)nFSdDqI-3k?IDmvgk0Z`<O%;-uuC76|3X<L!(to5>=MdZ1~iU47Zm
> z53%|#5U%hfmak{?vA1X`@^oKznj<F>ocjgmK{YcmImAg#VvrMkGX$7yvBm at ZDHvwm
> zYE3x=sSsmS6{i6uPB*PXZ%0AcaYTMC<JtJ5HJ4#$!PL8>!i-i!$B|vr=_F at jD#F6@
> z2LWgR at Zs>DjLR%WgCJ<;L(2HBbJ)!uQuN`Xp0)BERaEl&hz4z^SEbbW?uf?dpjYM4
> z?}BBYS0&Z>u1rIs*~d>mO&tpsYnkI|pCuf{7pH4M->oW-LE<bH9G`A>B5%{ilf1bn
> z#&5R1nr*LCG9DGk6T2Ud?y%_4yo;0dyiCID-KnJ-=D8isBgR>??RuYZv%Nr61~r)W
> zax&}up%GlJ4*zyM^vt4h at KH0^*7NeYAE=9Vl3?$tO~@v>(U~siajuAybppDmmdwIL
> zq~#9tjwdjOR6^)q0={NosK-R4rmKT#i|UQmgT72GMakEhWiA62Gu)*G!t_!pE3k73
> zEMipn5)o5LWnvL7SG6f!j4^2FF}Eq(zNwP5%dJk+IM16G9$PAFy%Ne{R`M+bX_w|M
> z%{YjzT4dgMmTqjQA#9B9DK2O>LyFhWguEZtp})8pxyp|gELYanp=Y?Is7N%_6h5vi
> zp8NS_epN{WnZf937q8%IqT at i3mxC9hQtNgxzsc8%8Py at +r%0w$mjB{NiDDI*O2x8v
> z81E~^RzO09-{+Jh2Fh2NOE~@`bG=0P*V^6ffeR~5HD-vT at WRZ>vV at 8cOC@9UrVvmj
> z<RvF^_gV`U!jJVh27qGg1l1k;=7mlIqZFHlz)mO4515PwdZf}8z?}6lbmSfx{K;Pn
> z8!w$qF~OHA(ocijKZn?8wC(+BRX7t0H`b?88eI9B!cexv%HOTXpU{sqS0pXi4_M#W
> zHv;e at L=Wb1T;o%)p6>h$cZD(|`?_t>;(IR~vL7QKH@#Q2_EsL!IN?|yb?@~9CMfBy
> zbKSD-5lrKy_y$=bBS>!x{aaGMTaHknvSp}`_z?9JR=5fCawW!Zy*t at Zn~;Yfs4OSp
> zT?V-ys;WQ)t`0px0BhW4;E0<nW*X=pZP4!a^;>`Zny*iXV!Ho1Zw$IQ5owF;$oz4h
> zi8RpTN|ao+YH*U&HcU1O1325w;FR2f`KSnemMA)<TdQLTq+QN~iXW*^8DT1!*ox&G
> zhAesapzb1+Y_0$rbh|2EIs&bxZ&Qyr$kaRw+{<4U8<9x73t;RA=;0Wop3Uj4q9HQu
> z&EpTQQ|*2Gnb^1Y(fzPeju&|k<>TbHod!qA3)DHaTlBgN802q+k~1*A$ri#wak!>2
> z&uM2L0?9YR`^S)y&Cct3$H<sY$#0G|;8jS)(-CT9#&NJ0H6_s_>3ReD$Tj?6+D-u*
> zQ8_$)r0yC#y_ at by@8~=vD^O-k?`z?FLnpO#=Cg&tB{s-tKO8e&c-2oyFvj?~OohVH
> zC~P8k^at`|Y$ChU(3Mjd%aqGAOH^`l1`hM$e!;<zDIyqq|G3-tW8gf^`WJ9>nyuDS
> z9Afc!qpyZ;FAF!5c?e4oyd|@b2D#>H0<G{2&SJ4qvxu_%EHCKMvP`;F<q_VN6OKyO
> zYb(e^*;m|4CG5_}xL?C~aO8YaOJJLmvg`T57nd$xSSuIdy>vm2Et)Lb$~Xqao(r7v
> zh)($B+UqBvICWB7zS}PmwJ^Av9C`{x>+LYvZyyr4e0`QhKI!Dze(=yrCF&Y_tQg`9
> zZ{J3s=Kur~){Cr>JC!8#735>xR%6~u*e7R>7JMAr$=BFV57O7z9b|M^hPE{6l-{MF
> zbSxPd=DTTy)%a*)WC99P(NHu>nV(h(?aebPkaQAOD=*G at d4A>4RPy{hf)wF_i8<5t
> z{5lY3fvluyT|67l?&S$tZPA;TRerF9eyoP~`Ii&oT4#6OqFpwn<;xA&#n0ebKCRv+
> zPQyZuh at IiIPX2Gy*Cb?$bC)OZPz&@~Bu#D-;bwdrEfxK&xMZatCe1&`X!GTB=UH4t
> z1jClTfu#Q(ER-rmbqoHni9?@t5xCd*CJ<5lCIBb$Cb0YEk3jJo_~pNYX{03*>o^wS
> zX7z3Z=vhl|0?fZPe1t9OXHEN~_DjwiNb+xB*jHSCvtK%V`TeX}=gYI3IFYF8;bv^Y
> zQuJ9<_{t4#5~5Hun>dL72C9<J!14jV|Nk<vSB@{g1O9GEIqHUC{q1|1XLSZ4fJ at To
> z3O)y!`IF|?8^$A)qAk9<`c4-)L$&PtQkx$#BEk&K=^Mp^xKKOjHw8vhy=>@>V)?n_
> zhU7X<bD=o$ncGLL{4EzKe#=2%7_$Q}Y|z~nKwn%4-i8{%NbvB*`D|z*KI>yepkFG-
> zO%aKm4Bq23K8kUZ8?;pUJ2q{htpf!c`kX0j<pw_q^uV7GxZ|km at aAk{N^c;_zk%W^
> z<6vxkH*Bh^fT*|JGp(eZYH3<dlI%CeKQCP&VynnH<KOd>=JGe-rtk+Kz{M$5Up at g9
> zdNBQNNtS6TWJRg^_8X99SLH3$L8tlg1dq<rzNTZ#h&oQDw?C`mD-zzTs<sBGdyX}6
> zW&^@cMwS|J!J|@z#|}yfq*VZ}GO3{vf&flKU&4leupo0-%`8-4k_i3Er>aH309#z2
> z at IxtmkEQ@p5<D?U9e4iH%EWnyDd$I=OutlCMKKZ{495F1x_Xi(dm%;iGxIIKMXnqU
> zr2XQc`2p~mfSk88!huwbL{+E}`^Ir?$kXt?BNCE_jZ3Ypd5J5>L+N)j-Z;TO&Cp!F
> z$w?1_I}^l&D@@i0osF at r{k(@S7Ib5Fi5T2Re#)o=ZcIh($>mrt(tmd?xf%C#+-!sQ
> zKueVH8YR0s!@dvAXUy3atK;)PYtNXh7>p9;kC7slcxlDkFOht$&EXiD&uQH$;NOm9
> zk+Zb{MH859=oHHH`o9ms9mBa<t^JU7W<k~Y3s(lEZE8S6f_GHOKRYq>Y1`tq(7WyD
> zXSK at l_<;L5jG4$ZVM5c{RFK^>)}yFB7j7gpNcOgDhBZ;O6bF?rSp)fFVry1_DT>m*
> zpy~=`D^MuDMFkyuWCL=g=FAYoKd?QA^-A6;m*D$jsNz?X1DjgFsN_PQA=g6iE-tF<
> zjplA0?&V~7py1rG at i#nsY+Cn&F(SPym&5qi2Vb$nYl&@m_MtQO*M#;aXOaW~B_77^
> zb|10SuAitJCs_vmDOSk)4Bc5RVr0ooeco45ak6F{kS#IrYp&xLpS3nDnYI#iHFr5>
> zjB}g38 at lETkrN?qy_j5t$%f#ge?YJ$ACK*9$`sJz0|nVH!5~kTQeU}3kog at sLX-*l
> z(tCd0>>3|FUe(!rLT=7;EQF2nTxxJD>o~ou*#haUOS*12(|eR@<*e2Vku_0fk$Ta0
> zbtao6nxcGKe%iboP-Y5SeK42jo%jm5wH95tn+SNPLAIO#PPW;b{S$UKGf?m21XO*Z
> z at +GNigFeid5j>V0nrDltVY1e_ordrJT_N(?1IADAU#ttQ)htdCKFAU<;}`CE)Zo28
> zq)Z!7U-kql)!SERF(3(Sqnj5o6;PL}S`=4oMrgfa9{BA1Aru3nQB0#mTqlioIqXgX
> z<Jm~ZK<i7~u at E~>tq_(!8vQrRW3w3F3hHl#?6(467MEqh-e?+|l;8yJ^?mI}#D}Q5
> z!dEY?cxaSCEmpVAa%o7_t#TXzgW0dbQTDSDZ_+BcEtuI=b8frF7+VUDG8Fj5+O8GT
> z$tWrlM*i++BxfqKbOrd&un}L_EqfiLl#Rk^m79&5hjz+7WlY63I!*3C&{km@#o3L|
> z at tnzpdzerU(<X>*knvSXiJ?^rWe#_M?xrmgjKP}?YS_chi%Q@`Bfkw}f=YTMJrt{5
> z)uBGZCr?;a0;&O+EMaz6JIPH&+bjJu*E)p?M7}Mpr6S6hD7nne-=znG0P=E6zvRbR
> zUPlaPut5cM2c72=UMco$-(3-k-dFhB*?T|VjLKu;ihg5#l>w-IB4I)6wsZHvL^D!s
> zc7BpMMiJkj<N;S+Xfn^|GpO at +DAEeYv}RP)Ks&{sCQkEg>qbn(rf*=Q*J{q<sZ{(3
> zud{b&i)j&d9`pb|_c2O-OqxQ)qGvs^XbMYU+}kk;pW^w)SLh!0loIt`rK}MpH>~s2
> zcC$x~89WX&A18L5?7X<t5;mBEy^1V5NWu`TA}pe)-XBon8_~_#g_ar;c%$(NfynTq
> zoNzqm#)Su!@xmTzY4!M&6)lxF&8$Ddz_P@(-e1zZQ@(>bx%}XGsPUB?P7u^7VT$1`
> zRz=FJb;o9!F2|6mgvHrIgBA#4vy(03kjEVQ^R)ch{o4DH_vOmdn!|V8cYp>p+^VE}
> z?gthF{rDA&lL>7cr2jbHsYr;sV0d-&yNz5X7yL4sMAZ3DhZgf3dr_ at Py?j at tYJlAi
> z&ASOK9)Ls7TDEr++f1T83=+l?><qo5^T2Xm5KTn)*;pv}$)lIE{nhDoGO{|HOb;U=
> zVaA4M%5sJ~j at XtZUMIAyL7jE64|WAs5vWa)#4cg}0(Pk#H{?6NfdT6Uw0yv3sJx9d
> z{zyk>Uf>r-j`@154I at l7bCZygA0O@<s`#(jhc<d@?NARCsW&#LxZ*c&Xo97?6N19W
> z;LPvlFN(zW+IFk-GtnM$rduZU-4iAc;$%*X3I!+%LrkQ|jqZ>e_^C)Sl#rD5!|8^X
> z6&a~J5@*b#BKnjKpy49L4wOU|8+*f2Rsjdw8J;oj`~)-(zD)R1&m;UnGsko{uG}B}
> zIz-6)E|eIi*rOST`Q9HXLw!9Zm^&Zp5j`<xhR8bgi|fqksj!pzNIYF7CH-9yu1Yqg
> zlkTha$N(y-xSPR%&y63aPWGf0nbg-qE8}%4SPriXYll6-^wLj-Oj|P;i!tS$RH;pM
> z_i9&ijEwqVVuU>=)NObD+HIfoVU0~#q~m3%&<EHH=?l^f3Yj#{O!|1Y5$@+L1!}_<
> zAgQMb`@UE4<r5?R%;m#JkZiyUibhJ^kP3kt`Dj!niE=gLL{tv-MU~7PRj6lv=7DSU
> zdpBQJDOmv{qNh<uu!f48;{v`dufUWW!XY*GCz%AWC at 8a~D}Oa_Iz4d7D?S>#B9D$v
> zzQdWy%JfLev5%bgI_nmNL9C13<#k7&OBA6{3p09s8mex-0=inu)MD at PC@;Ia?)o{1
> zK7%O*+bX4t`*qIKaWZWe3Vj;8qi*rIb$~$%?ztbst&^u+^=b8xHibtSPQj6e2)E0|
> zk;d*_t}vKrY*WhnsbHh8jL7PJxf3iJ6@^G4P8hNM?Hugo&NMVA%c8y&fES-h9ZhMv
> za$#s{w07JL*?+hyV2+J;m>J9N5h0&`ue|t~KFNFZyXf`yQ$NA}Tso)mIZI{aM!9g_
> zbNI3p at GHBJjF4TT2J<YYmCctkV4FeQneFr3_g`$1m7ZD0y#s~5w%`?*m$WPMrt67t
> z#FKa)`D3}st<uS??_s<_#APzh$flnHP<U%*Lz>aTjzP%uB;`cROJSm83(L- at R0A)n
> zn<B#22=UdgRDGeTgz2C4-aqwNml?7<hb7pl2Wf{iI=3^?^972cD3W6r6JsRZxsW2>
> zyt+qNOXpZzF<6|Y2 at ynkg#8diI#@H7Mf*nGS1GsVq3aTt7s`w}c`4+Srij23vOx3+
> z6*|)#e$)U6OPBaWeNXG0S=mutzS-y{OH~wOJm*s8Xk1v_ at gfCYLJ%}`P6Y#9YIl>L
> zK00}-98mYrWbg|7yz+Q5_X-v3)@u1#Hvb!T+m69}f>G1d6u<y(+sr~0>&Y0U<sc-0
> z<2=2FoX~{nqSv#MT=fL0qr**{$2OrGDJ`Wl`YgYNSRbW0B!K`A1704&8*FtQ>$^mB
> z{LlfhjCFx;d=Pwa9|d~pJ$$l9QD3O_B3eD~{H4$w&b=zbE4BBw&`E6<5Z4JuvB5kk
> zKo-6nTVCCGG-lPF$`OSj*31o>r94B@;T0C_%5V`pGp#v6n+bF-5JTOt>oyirCc2L-
> zCj6cdUF#S2Hp0z7uQ}|rp`+qg2iji<VUh|W?|^Kz5riSK&*m&T4+ew8pcm&C?jj7-
> z&L;1}#iu*Qq%kdEZ)>9D_pfe%Merq(O2{B(^vj=msP?7m5->`)6z$&FNlxfi^Iwxf
> zY*y~yWg+NCsUV^IX(5W#>i?`#IXZgv(6-n1MNff=awzGdR(O_AX?K&-bNPU4syOy=
> z^?lHqu4)lxlom;>hP at qzqumM~b4Q|cN^<#-;<kAO9bQ<9VVR!w^nQPRrFHoN6atO}
> z`JtmN at s*@x-4g+N1UzT9mnO~WsTWMoJ3+U8vE0`t)FtOI;{?@Z3$p8FV7;g7MMG&W
> z$Ys3}@|5`fHh+rjV=NbfoZ$s)wNwWuJ-jfuUDBcL1 at k_ts14g0>~;}>FkU<NjQsd}
> zqkE$Z_X5hv{ByIcvE at v6E7SCQFJkIVC4!qB7aqZ1PCig%8JoM%#kGS?)te7$zDH4p
> zDkIpcFqsKTEME4izQCkh>_M0e!df_H<BpesYD@<4?1 at xE^JwpMLe<tS(^wA=PrwEi
> z9cHRC)R^Fh>Z at 6Yf%USPWn2 at oZWpCOv88(*&k6_IEgOT}xkpzXbO65i0{-^()wqrx
> z*8GKPCdD-?eh1#VRTk5=*{rKu4$m5WzY5-V7DXu`E>kCR8k$|=vvOLLiAT$GCl!(e
> z{{h&ZGkL>eY%B at aUDP<T-h&uxgj at 5-$dpSUf6q#BPdQ#9HzT+;02Ly~bF{-E_YN-P
> zW%xdPQzTJ^quQZ3+aW4Y*D%CO|Et8QNgNaZ<pDC|G=f=&-MPoEKOZ6y&8E<4_#i5{
> z=axWirm~VQp>ofQ_Q at 3W9o+*PLhHr{8jrFIsS46q_pxVtklBX#6k at iPE+VqcLb+ox
> zSYtzk(cZTLOZtAM^c^BPkG-tc1XpAr=(~7y6ReNtyJ*%^y=V;wh3$bK>(X#q8pt0|
> zHNNg02*>0`wY2;0T1g<PUVWq9_7-1B)j1x5ichHo7)I87Kakml9w>H}rofp#q7KVL
> zD$OQd5H$E~cV0)j*yK)}oiVA^`gtS)<CK67GFLvO!>2kNKgLh-wMDbWFb4*rCn0sk
> zQ7Hh+*S3pXC$2kxUAIf$b}hKe`n7}@qlV<%K9<KJh`=4SBBu$RE%!rt9}Qb>bvy0;
> zf=5jP6qL6#PS~ZP9SRVu-6Rzs33Ar==X(M#EKG4inN8)?r~3UleOux(2ko1FT2KK2
> z-o#|TegTJ)o>oFN`VICd4{(^ci0%cO at 8kF^4s?(Ks`num;gaXmf<3~`7#Zsc-m4$C
> z{qZ(Kvy2tt-r&uJuFLxOnv%4TkFO?xo;9yZQ(`P1#3QvvV!&0i&`Tf*380|8Rkdf2
> zu}37+Os!Whez at m7Zh)2+#HTZbHa(>qu4g}q%j%_p<bzrjbuATfP>NmUxk>QsOo0af
> zJAA^DIa%3CFN!mniicF<0V2p>!3QD<A0kFi-bP8zfc8dN=ndwxeM?y68j7vaXE;6l
> zVw$H{^8{Et9T{&u=0mjB;u{mxa%pXdby|~8B1GMbNfg$bdpJ%>AHsy^4Yh!zE>>ai
> zjHcu%QUUMC;K3k8Hy*tFn^Go4*<r;ZpkESnS%t4k1x~ewi22nCZsI9HMxvg2s1|XT
> zN{7_7R0TVWT`H~=TYzd=d0<?>ZTlUHL<@7x1vp-m0U5JXhg3Bd(duVIMggx*kH_nx
> zrn6OFuSd-66Xz!+NyvB5<~_(?LS6KpLQqc{UnXT12l+Uql6E!>$q}QrBIb#xGOM!u
> zASMByB^UQ_Kj!q*$s#;|OVvwPVq;Wu>?L5?H6LTsOfbi08K`ni3k)g7mP5%vbNt+U
> zK?2HM_uujk_$-_@&Q~J6X$a*bc4jznBvDcm!P~wQv6N22ea^u3v#D_*gD*};lRUM`
> zBo*ekgJ~G=ho`)pkD*Rrc9ni=e^PvHMknD_2F`OBJb>@U`~6p6zt;{@!7=Z<a1#yV
> z$@>FTAGY?PP4qI_`sKA(z;wM;Mazv?qL}h2@=U(I#<jQ>4nnX+>EqJc3>~-8efZ~g
> z2H at eEYU}dUMj2K0CpTp>oVK)=$cJ<d%7ViV-R4=K6#IE$^#t+U(8QrT*0)^%T3m}M
> z_D1L at p7h7)auH-pGifOP>6}pGYu=1WOf6g_$wT7UHX4rXD%yjr6CghLf;sMtvm2tT
> ztN3ynx}uf`IGnF+&6>kOW<>!v5Rt|Ve1Xz<1$P9z9`nc)l-I`YPHi`-bkMtK7UN<v
> zF=Hr6Mwl^lb<1H;#)Y0IzJ<t1n-t<7`;!{r+GCW$F%OniJb0b7RE<|FeQcf~#jjZw
> z5vL<uV_z$f<ie)FVdwm;&Y-21KgL|Qb3BoTi)W)gJmmHDgM{E!f2s*cpyF%?KVpVF
> z(LkN2b%iS#Q%k+yKhEWKdd4o?UO!8o`tI3B4M0mS`oRQ59vbR)ephY4is;M at IutsV
> z<!8sFB{&%|4zEG5ayyn8>_vHUAV{Z((PCZpWE<|j@#p#6fA^8fNZtp}xNgwPqeeI6
> zU<0(%=y{piaDw~s+2c#QxSTE1apZ&1cnc3aVkZ4BIkd-f-^-k27xjagOWdkbGFcw(
> zE+&M|7m~$3Gfv*<RH3|pPAlFo9Y(yu$9V^Ol|j|0)RrWSP=0*6fi*Rgm+lt>7o at yp
> zudEU!DEzDM8Mi}BHcAlIoatC<GCY06AW^NO{g9U2P!<aiP<vCT{g>sK+dP~A?$wdI
> z at 93jd`o(a*AULuxJCE7C)BiY0NfvXPLNV+(Z<859NHxP34+8-3<?Sr5rdf%OUl|&D
> z_G#vf^zI2gx=@J5nQbN!t5lDrg6cf$V`Bl8AIY(plAPOMzmio at imip(_lFuoO$d|v
> zFqrDhg*?AlA62ffBE<V;;e4c#WOpmmEQb&+bJG>ebS5gU4d80j at pz@>X at GV?49=sY
> zM2*#(F!gjOEO;3Sds~&3lnD-AG?Sjnlky{8#5j%`mjC$8={l;cC3-3poDiF-S0`#0
> zK)Q~R*00KKV_VjEfz}^OE*qD23O377MLOq-pI|_yu3qp>N*W(g6ZhpB++mE2IEu<z
> zW6>(CcbOl(euryT^A{9cW$0&LRBY~O1I{jz*GtAANd<6VCK5NzK6$s_?goMQ$!l2X
> zvK9R3#QxqCruw&=M&C0OUw3Aqe))2Gs9G;<EUA(Md(EI>?xTSSM+tu2x^E&5CT2_&
> zxuobM5#WXPE##^a?<;=+-t~y>h$Ul(_C_r6IC!*kiZOO(L_O1eRU3}xwBlP<yeLgz
> zL#}+9=qU|o0O5}o;8$Z8kUqZS9%+`CvXg0zZ97Gk{*trqV;`y at k-mXEWqL>U<Z)eE
> z-rFf?ui*stqc at KeropUj0vnh+G8{7z03lrC-vIvm6|F&b92T-pXxu#(mf5w1Fb&1*
> zbY3hv?G{Lu;YoAbd>r7e1j#u%K_vX)x~_sU68Ga50+Mn}WH+;OjA*S&1F`m=<rKS1
> zFzW)!aDMw at eB!1Z+|~wJ&c}6XuQ<9&+AVMdrYQKiHKbaE76oTi*R04AH&V#4%#<~M
> zKF40yhMM-fhmspbqv!av)vjPpL9<3ni>8-Zu?C)9D+lp}mzc<JSA^G1o1h5+EF7Go
> zw3RZVY~w11VLZ~CEaN#J3y-SC?7;2uCNO^6>8|Rz<lKrA+fRg(wmTPUdakwe+AJnh
> z^_fJPk7Uj`oFjc6M$HxTN64jngR7p!dxcdCIC6Z-llk=4ows8>v>Ug2L)b36<n#)L
> z$h at 1FJb_9KOY?}F*<E4lAjB{mh!nbh=ktO<0o*4b=CcRDvzuH_ at -w|*+dl31{_Uf<
> zbd6_oJce5qX5_1xq^H-DVek+d3#jM`+Rj`1uJ6F2h*E_x(_2gl%9N(2Ke3V3O*7{O
> zav<!YIz6?pO`*i_GM5KGEI&*4jBvB_^RT#boacyPO6-&bO%XK9n8eye!u57<|4y<Z
> z-E%LzQXlg^sg0FQihoVWYyOu`N!3;DC}y>L<_N{ecG8EV=B3QrI)?@irIWjynW&n@
> z3t>-Q_gsG}b^`L!u4UPZ{(Pr8=<;F&CQUC at iI{6)J?}xQ>?q|iA5di(e^QM>Y2Mol
> z%vwm8lEd75bBSkv=gsUFN~$x#<fUzcnf^7OXJj@<gZ{JETDzyYB6V|nw1|v)9R~+#
> z2VYNb{1!O|gN~6*JWo-rli~b;<rCfY;LA@{pLGm2*c%X|b>n2S#De)5%rsT*ZnO>x
> z>fj5975Cd2ca=G24+;lNCFu~mZLWjKDEQ&kH^yx4Jud>{ui$r`ph<4&qLZVgA2O;b
> z`EIfF6*&5raEAMwO^<9B&?v(CIZ<KLs=aWS6x}+ at 4g?r)<4ls^j<l1^5}27cqI$0D
> zb^~L-j&vB0jLj!hSB?%cQAnj8-o)=(8cWzG?Cg!;{}L}i_R+uo%HSywk4p|c2y}Lw
> z`!;Qpkj<RYwo9;!#AdXD^kcN21=a>ihN(uc<msAgQA5e;GI4Hft0buU>_(f-z=grn
> zM|9hZxlzu$fp#M(_WR0t94~Qg`$8nKfSs&25&V@^*i#e8Q-G<{>gSa(X;E#%?eyIw
> zu};s#lM?pRJ2toCsNj48-P1NRL?0|uTF9~x&c#}}lnHIurtd#hKYug+mI^-ZjU$^q
> zF`1I4Y{OP4g^htcn}p`+A219^N(Ct>y{Eg2FdH<JUZi&sM$Nk3j-<DV3O|~UN-U;Y
> zZjD!}#d{xk;dT7ciCxt<B#(+VkE<N3fG^CFFuKrrk5hF-axZXyoqLubErj#X`e%)3
> zBUA+xAsq6t=riK`)w#}~uw<mmG9^0%OT*aZ6Wi)AJ&yVldSy?%qK13u>talpE8q23
> zz!mu`4*pPYwvLvMG{N;lUis<uxr+cp+dV^lZ<_u&dyH479mfc{I4=8QU`}LFN|g@)
> zCq-(CN$)(rI~gW+$%~@*1KmDwX4z14p4dI>xW#AJ+81(tcS!;1RJmO5M0H1^m(2AP
> zEtLV_eF4dQA;FZ*sFGAfR5xE8AQg}w);E+b<;th3&jMCCre9e8%kzifcgq`Y(#F{C
> zhY7B8)U2$a;t_U{_~Q%E-9Ev`T`wZicpb9<d?DW+8LF&{NU2SR0qp}#q_6E^T;mRA
> zA3ky7kutPX;WNfa>`pj62bsqD(koWY!|l!-&Li~kzOuIxs~B at r<Mb#O(3aE}SR7M(
> zg)v9tpw?=M at 3x1K6!0 at MNx!(c4V|wO*u_jOV7<<MAws;RNzb?ggBP;5{{+dALrDNr
> z=E9-b#Sk(*!IkvYolbXY{QL<QDOb<IDrggM*T6Skjn~zL+ZYFy&d^()sEqbi<aFDP
> z_*!yAsnQ2^gOJlC=24dO!s=kjn7m8h)O~eUHK9*v0fRgrqeYih_S=Nf%Q5__nw2qT
> zT+tLmp_G0(MO~$koKYW*bK{*kk6Y`I{0LS%ztzC at F^PZ+J}p*4LZY%S6%rcvbrfhl
> zSovZr2qY}-_WT9-4wjgM0UTa|Z4^EmdTFz{30=6I)4<1lG)z))RZmy1Yh{6bT at ecH
> z6$)CiHx+E!N*l>?Rpa}uIWe-No3ditfje6TyiuoHm?&j}(=&=)WhFr^GhJ`v!Mj*4
> zVa=#r0`T;8_vc7W2 at 3Vz7E9J5Ecms15lSnD?zQaa>zr|nZKrvn(o&}<5+^Q`LMJBJ
> z2t?9YrVpwCSghw)*CuXg at DM$ktV!yQhhn+1gn&h31;XSOzKdN6PiABr6h!CGavO^9
> zXNdwyAm?f8$d4ayn&dRk%c;8?ORqDznf)%Zs~Buny&o<~K2=DR&L^9c>~h!UXur$s
> zEsw`8f{<Z*e3|tn(5wHvaLeb^ay|<Y;dFJu0HMU>lIbtJNB40F;BR?si9m1qEh|be
> zvNDVVA&<8X2O~T$wD-|ue7<NpS?;29BQk$A<8T*>=KUI)>0{o~;1&_|V{OzUwo*q3
> zW|iYv$Fd37W#eJ5&1N6(Ec at KL<cvdrXTg*?m(mWP1DE_(aiU7#`RV$3&^0?u4ovt$
> zP|xdLGw*JR(LlhPTJvS|;o&4X{d16 at ftQ!BR`s!>;EQhc_V`(s*Mn+m?fkbDbHLm;
> zPtkoG0qqy|x7Tnx2EqAt#$yC(ICp3FzK}|?FtA7t9E#agU|{?d5MclFzD9(%eT`NC
> zcUxyCdLRI3ZUQtmG^YAuW at rezZft0{5yX6K7y*Tyk2Ik99+(lt?9+pN7 at -u*8KDek
> z4E9zn46J`B1|j|L&5>{Ee^&GUjq2#+Ze`;5d-vpyu1?ibGpf&76;r#pzraw^@s_1y
> zZFgbQySP(`;TvaR*@TKn^7k0dR(o@<QekNH at wHx|M;Y5B-5UrYz4xZUz2Q&0gL-JU
> z`b^_waRRp;{!3>YKPiP1DzhKEydR2K&tC6t6m6xjB?R=L`xwzOSSZaNvG at 4*Gj?UA
> zy-u;%^w1I{?^(p*CX&Yt;t+~Tr&ad!!*Y$oQDz(33}-!A+ktw#j;jHk<}=>L-^y>1
> zs1{vL#@xRZdfdi1owSbvDaoT0;}B|!bNd;heoRh2BLWv3xR!020#4k7_C5CLKZNJz
> zXuN;KG|>32Y4`30WiSOf3Aw|cQ>`7&w7ASC<I^W<`Z&zOO!)w89uan5E!Ueb$qoH%
> zFVIsHog^v98w4;bZ^>f~swVPX{QWs3O204B+t at 7>UkS8dg;c#~8{tt at bvSy4BS|c6
> z4?s}LJson+4!*RF^jsS0EI{p51K#Q^cw;;!_DdVF;GVmSuG^i%yQ=of-+!%$qZAEe
> z711h?n&%hxcb1r;68=&O at M9%{g+n@{8u&qh;7*R<o=o)6!7>FJcK+#G#sZQe4i6q0
> zRPcM|@_m$$5Sm$z_jTmYek8)lBf1?9>w6}2Yul8`b6X>x6=~+(!=|fubdV-!M7|XG
> zoDzgh3OXZ`aqN}y6~-BUon4QQEDC&ukf at yyBFjR#io#&)so!hqFd*BtEtlcIk)?Nr
> zG--csA(G(5&%nJsyF>o9mUsJNaMqXMNhBpx4opu$+!|Gwz%5FVKp}&JW0GgoP!4$q
> z6|7GQ#%%_(LM0ue+<+xU)=8IDw!%J=>-SxaPIK}(TMB<!(NU-_UF)dXe42hu!rdp*
> z22t_oFjh}(X%B(2$O&&TPHTaoOpHAQETs6$=%TVT!?mtzf;DMZmD^}nW`u}G0o`Zq
> z_)kisUXc5?1Tn}h;|u(^EB<@q9dCo__uD}ysiZOgG+18uV6Wn#48+_itQ4>?il*D2
> z1J6AT7l`fEuue&yeU@?BxKzOhR%DI##+i6|TysyPq8M;G2T5_{6K6S}Q3YVRWHAg$
> zwUjfgV{nD`Yx1y#5mQ;gvZ>!247E7$G4tO7536VVMa4jV_ltwKkPlV~aWay{>EMoW
> zJIlahi%-Y8XZZ^l+|aCF at pW6;V^f5JhRwkfrKP?~xc_>`b}fN}Zp|z+_fA_BT|qoR
> zF)Ts(JZw!sV|oyw6myUDtA1`PM)7#usFPv8WJ#Q^3tbTHV)BYY><9pZf}%v2yh;<;
> zUI$xI3|)gM4_g`OfnuQdxl$x|?NGt6d0b#=U5%WRQUaV#E$Vyl5!gJXGJ8Ojelljs
> z<a=s6c;n(~!$ZGrP?Or}HWX@~*$9k1jAHoISEMx2$?@(S=RVzaeO#v`l><v2Vj`86
> zAND=3rBO7&mCGmF>rD=zm96TLkMf*fxrCKzMs#<=^T`U!hd2?FXg9_2!S+G)1Fe+9
> zSN at o}e0<GE!aOj7VaiF4gPkshA#v6~J97}!p;-iLNG!W4UMKjTzng`jceh1bEcBPz
> zpc&;(rSpEO5YmW{pTih&#P2Uo`nZfex at R$PD>yUM8pF6E`wmq&WbVCWCctZI$T=W&
> z`*%N#f~(96<o9;Ok<S1Of!~+as(&W&1Ezd|80N#{7E0#D3Um0Z*woos6X$TaK13~D
> zRZ`Vm5ZFV-c at HTHc+KUoKre$+q~&|fsle>eT5?PixUeSk?Cg=+8;nDOo$p0FLAqJc
> zks=Jz=DJE|_3~f3jS~CKs{pgp!*gzZ{f61yEmvM^y&_)2V%mJ1yQCpEBx|`5j}wUF
> zFs({Xrq$-)0K^aW+jPic;)xlb;L~!x at JMDRw-(iD=J&){x5Ff8SI_v-t0kx9oE8>0
> zP7JW?9qCWWf at fy#nhmYC;ca5UxmVm}B8oSqKFKf(#)&HpzFW?0(Mj*s-#b3A;!JrB
> zrnr#rF_7>XWU~>#w&W^X;!iA#XAg(Rqgc3X5!X1GI^~w`(Cy*wRy1{zjar?iDCVFE
> zto!6%psckK`x(wP>H?loH2VRIer$)^Nas{peWuhM#r34IUnwPZu-U=asQj!?D!Dm$
> z?i6=*t0magbZ1q&-at)uge-td8?w(AgFC#(0(U1HX-(*xS5tM<kK2H~Q&b!M7JYQ$
> zIj)zEW%r+_6ZwOVdsACBVpZ2)YsXZVrjZ^OPj}WR(l at UTd#kF;d|*WG*imkif<F;F
> zlo=iC)gaqCo#;DfB at 0g~fDFuhnfV2S<f~)=Nvl|eOe?H(vJN}wSQW!CZOM`sLHY2>
> zrU7Zl!(<<`$mL*So+TQL8z&7NL?R!&a4)XLSni<$&-8HF+*#SbuTQa=cU*9L3a8aG
> zO2rTA#C)9n at yN8j8!woRW1lxz0B&~R72sC)6G6RQPmOJvW)*rhPb>a~=(7z+T69-#
> zPI at EE%CC#hHjB*rrf*~1aavBDQ)j0_b^{rkCtslH8ji at 7OW<yF$oD5+QS;@f?{^m{
> zxUOPS`T?1r#yM>#Cdzi{JE~wnQ%FBHFNCzc%mCXhlu<$}gT1g$4 at g1}IPdM!i~yAP
> z>R;d}`)8)LN<*j~2<pD6?bMYJ>E3a=;@Rf(wGlm|CcLal!P4f`7G6^4mU}s(N%{ww
> z;JtgogTLtOA5*qa72GeC*$>YW)4S$6gW`BarDQXK9d0^r!O0G*n=?ELjNO%M3|VO6
> z|J**z9ux74Hj2j9MVXxaJ}o3o5YwIxSU-bEzGUsSzP^RP>SRqfqlVnIwa>BQOTG~7
> ztLSJ`$bEe-e2Y!{yg3M;&4f+Vcrv%}yzPChg|$O)+7rD?8TDnx$c=B at fV^PM5Tnd=
> zm;pI;Mm_II)gWaFO-GyDkO*HQ$5zpHEL at 2V>6gU4gGg8Pc66YONm>=3lZyNKW)2&Q
> z;?Ek7sVEJh4_MJpmT2+w(6ZDzY{BGF!yjNKEEuzCnd=WN13pbA90d@$GNq;{q~g0W
> z3Gl_M6sgDex at r!<LCyp#NG?mb_Q*%&U8Z33&DkDz^79pO at MVv=DV%-YyPI`;nF*wP
> z2)0jOuuD&|PhWZ0L>Zsj1)x==m&nroyhX^7)y{%9Nym|;g at 6Bc(D`;i&ykgG&DRwY
> zX;w8h03RNSWs1jm3fQ_YtF1AsuQsc#az#F3&`)-T`S6G|_JMG at f8ZK$M9X|RWV9W-
> zFqBUl=_U1pJ{v9gZ4IypP|q*|Ss%8ZAUR1w67jmyND#M{(v{P^PE?x|SqiL_*Y_GI
> zy_Hs%KC^Q_q?EezYP0+ at -CbyCtf3UT_o0NH2@&WW|FLUg&Hy++t}0V9-knPiQa)6@
> z7!_|XpZ19ok}C5J^2<gE7#niM5JnnAe2>%$<A$ujFJK({Le*+yks$;p;||MT#etOP
> zteO?#k>%`A;KW4e2pegLRvehBB%$1ga8_b=r3Ez5>M9Z_RHs-&74L8>ky1&WJ$o(?
> z<bhjMuiJ`#TktNT!f_}kY)>e(hpFV9KF;Y}bkTUy!JZOkio|k+M1OxjI3+=daXz<!
> z=5v5in<;Xa1dKj>M1MBznGrl?hAiK0m?GRnxE{8M9Q<tYiSMQ(E+(fvPB~J8!$BH`
> zaN%iNa!%_?iyjJhGh}zo*7H&Dx3{YkE at ja8=FGmz|KshxIkta-g`TD<^-Z9_z<#Gc
> zkw+#@fZx6 at pWs_Y>|)~J_!fJ_Ps+@|L`rO81GF^;*_iQ at s;f!RbCC)PyyvquH3b1p
> zc>W1TqJN890uaB6+Bow3MdBxQcCg|36S%}<1F$x6<Z%M>{A&ag&%bi>{8985;${W1
> zvE(N;cXG1hVPtf5b!Bj6Ww3QHV`S#$=4SjuCH-5KG4Q|m?3^8}{%{!s8BMHAe#b~T
> zGBPtTGycQ-+rs~?QNMZr)g)V6+y7GZyA6Le at sBzdCMGt<zm7?X|L&E4={^=xfq(ky
> zcclV+f2s!AfSf=8D|(=V3BbwLK|l*&19Bmj1y}>z`56Br$6s=P_}@+py)nSaMBq&|
> zH$4*<JrkQ6Gt1j%NFFAZzoq{>AD=Oh=U)W4>6tmyn7MhFnBKm8jQ<e-(qLlzW|@r{
> zy|J^ypYSsQB{dcfDOL`7Ru<L2EB`-O{<|d59r*U#B*4PV at o)Tp6aL~hGqEvw)9}`I
> z#kc-c{Bt$^=}%S$CUSKfkQ?!T#|`WpY%NTHPK>NfOxDco<RZ=>D`R?YR!;7}wfw&o
> z{%-Dn?AU+7|1#pgu3kr{x5hd;fq=w+I^PLkWMx7Rv~{*|;wOE(0scB8)&R5r1GF{z
> zZPdTB+WiYBGxOi_b^r%}nFGMi{2y)>Zq~m^uC at -w|Deq59Gri{K=U^dpp%KiKQwMu
> zW;RmBzpo)@$2Wqpi7Cj&#P}}@f8S>Oq|!E~w#3Z;J2sa89UJTaj_r?af8Pr{zxzyp
> z at 1LXp>ghl5|NP*M{WdzOnLAq>*#JORj*L$K6dCMn%uW)H6t!W%`t1wx7VB5oG!FAC
> z*)oqB6KI4X)hijW2Ut!PvE`1+?u?YbgO$}%H_ub(u?D6wl$60rgMNJVQ#%mSsSj)k
> zFWVnSORW4vJbq$IxlWL$dx)9h`z`5sDbD*o^Xh_pZ(H}VKFph#oi<U37=PWXkEg4M
> z*gr;$xU+Llf3_$A751^xPIG5Q#o5le6P=ng;W_TQR*<#v{=V<Pb5J3Zk2^~tneKCf
> zrK>i7U3jt!Gj=fEi8)_q&16<=9G~5T^=4O4{`H`=qS at TmjJT;WTf2q)*h#%*E}E3d
> zmwt{(?j}s7s6;^u;u)h<Va2}AYJh`wxdM(`KJ{f93VTrV3p3B_yh`Xx-H;5)@`~Qz
> zHERiC7IW&4cipk at MYX~Qer13gx2qpaYxi_*g1wZQbV`R{+Vb<&4utykU}&OvMiF49
> zO2#^!Zoit~veFnv&{yV$j)go_kNq>Q6ZC#mPA$=3AEEOFB<D6u&x{J4pdrHd6^S3A
> zJJgOGGG>LBCRVOu at rn*{xwz31n*e`_eAhMj%2evmIlbXMDlJ5kFy&h%thR9X6u3n@
> z%^PN$z4^F7qMO!RmL9&Um+7;NL1Qn6bc7~%dELNP-Gic-KM-xXHj_c2Jn|*dOxo5b
> zQ|-kSmVyMEX`fYa-rbg*EsFJ4yC+-jp?$o*0nGb*X0eOd**Z19PN-rMSHGdA{{&NC
> z(^PiPy{*43)g`*<fk6&E(}YrbI(yAE*}FFNucEh}LuN1Le!EpsK$dtM84h68dP at ID
> zGVIhq(1R%;nRg^>At6Vja!ghb9Tj#V&D~#VO`T__*xT(2<wuLW#whW}<<RJJQr23V
> zS~TIvr(QwHKDVEqWr!?Vm$OpZO@;yXD2@;L&Rr7*{K<2hSO!_AKYi9jb+pXfEiPO%
> zDVepw_(o<cr9ImWotjhvtuK$&NL4x&p4}GNpfL{u42RG-Sni=e_P;}duX$o)((`A?
> znXeW16 at 3}PN+BRP_9d}Du<q;=4*AuJbS=~<w?3LurXz at 1C+1B<`Xdr}8bv^bjeh&i
> z$e!kuy#yut>I?hQ*ElEc?8t^2frsbM)rI+Azf&hxjDQ3f1I{pR7ZPl22Q?})#6^~<
> zj1<WTv90|BG{g=XNg-t9Uj|^HpGY;o>sxdl at AAn-dgb?GrTr{8y*0o*w<2rtWjJFr
> z`~dp;kmEa;-jBF9``FQ_ at 5^Tw4sQ)3!eQ`=+)3wG{(Vn_^SD4xK>I#g_KxV4pARNj
> zq5i|;j$-9;2aCU|azF0l`Hyac- at eI=&uQW)Bp6uxyMKI>{}jmlJ2G0-*2WZM_V<M3
> z$ifH!0^er%KeGoT(AmM^?;vN$KMQ=n{Tqni+1ux at apq6)-{Pb3- at t#b_HBkSb1-pq
> zGy*s<{?C%XN2q_7G_|sQn~(o*Qn>#?%Ffo#+3w9xasL0P?YGGPcN?8-ZLR+AQbhm3
> zM$qp`&yi6C<YW!7bNs&;`kxy3dscP+m+t&e=lA!5uA_<5Z=d7OTI-DVn&ToDiceP;
> z>DDa<+I|B7jVCyP5Ro1s#<<e9M_&j_>nL^`?A7}d$M8<K!j~Gt)6j28E}tHc9yRRl
> zO$b8cC6&_h+b<^ses-Y8fCuX`RJJdH&VJS17CaA9OziRbX?zhz^Jgo<jmV{V2yB#H
> z8PPXz4~?TYPCH66M%_<>)5Z?)TAcN0X-%XV%_ at JFjQnZ!M at qALS%pR!a at hckTKM8Z
> zf4?}r_hUVq5cgiVsJcm+L8(ZenYfFnsa)xCyT0vg?b+(^>=0HZ_wAyhj~kEAqeB_-
> zBi9Zz=}~(83D9yeQIbX{8ed~l|LXGQ*>#ej;uf=-dSG=LuP*c;QmEy8aW9+U&@8#Z
> zn>i$$uzPuXq>_m8HY>z5)z)cC_4(>;sR^P}b2r`lrslpyS>eGrw2V10!R)&pOAA;>
> zJ|LLNPrAxl?JXMNmx<(tOfND*uGB*YoOkuz^q2l3-QenAyEUzQ>7>)#OQrN)-Bn~)
> zxfu!jBdheuy&X}l6wk<q!SG9?@X`YNRV%j9uo<t9IS)qC{XEoXYM0H`3RajtJTfjY
> zk>993xz$Zk=>&G6<Wq+(jyF@#h?4M;F3dxtPm9NjIs9Jbh&C at s{e`qCYLeJ-mP`nb
> zPzte>PC;8(MM+G|gmQzyPX+Lp=uIXl+`n!F?JyF@@ZoFJ!GszG3qA1P@#JxsO3*>i
> zsA9`^leYzFitj%$IiA=FP%ga}-ho9t;I?waWu`1n93cuQ5Uvh?m$)Ek@>2~TTab9w
> z4KHMD+yB&)whP<Fv)GgmK^V<dNv(LhEdQIU5FL4L%x<ski8Z*MTzTP-$Fr18xl_`i
> zjYr<<^*9Kn7bpXhyTcdGv}oDaCgG&fp-=fgIx`ajb6-8nSE0fJ7NxMHao>N^Ls4Up
> zV?y-h;MHY$e*~U&$Vg6;6IJAm;{p|roc0jnte+f8j7lBXVo`69KW~LkBJNU6_-S!|
> z`WLm+k6$~J<Y~fb&@<TwEo&~!VVLH;C0MLOadQ05%YjJ5>%0 at XhHlWxNg;A1VbqZC
> zOEmBIQP6Q>>pn8W?^CJDku<^gh&RMkR#}FH85 at Doc~RW#I9nB6$BKv|ByIXYw&`7W
> zBpwXb%r9Fg&5czb(q~mmHjmoG2iMXnwWVNMiDL^gr|cx8t9qex0XIE7r%k1kSWS;)
> zLqA%F_9Ijp>mkPk0c8{uj2InDzXYz=RAuufFhbUT=<yVnRadn7(b65X=7BG^&+ at J{
> zR0YFThoZ6Xcn=C4Gr<hm+go&{XHLvWA{0Sx^F5UJH>^1AwLU{Wk#Pf6)m34TEy30y
> zba%f}>IaGF3g6So<B+xtt6$SC%)OvI;tzx$!un-bC>e at f7mP8JZm<2u*IOL9zS~6#
> zPC02=p}m_6s|c?1{iPIj6Y6E+59X|f4{JMgi&{)wKF;4F=pvS=WI^~+W=b{8t_H!d
> z9}%1j+ca?xz8%($BY^U9lmhEVdw)P*I$D-!+qkK3ujGC)nQF3dmvr0GvRRu+cH*u>
> z-<gV?M}qXF0Hs-GMMAE9)EF$!g8~GP695gI+`-E~_LBh0A+I!)pM`RGb=KtmxLv06
> zWlCk5Qtl?iFRq{7!#*y)hgBUz=>|Zk6y>6M_vmnfnyoo+=x#n4j>=AZ-hWO{qL{g+
> zmXDx9vs9%J`x5;9%P^A}7{#>A^w0A2){H#WIcF$%LaSh2VW^fuIoNe9s;|T6k-6vQ
> zayc$5xzltQA8XGiT3KG&5IsTAG1Ec>fJh3lgGsW)aH5X`3R{qFP!~;^g1?yIbneQO
> ztk2G{8uA1S>;HPkCOqDQru8=6E|UH;H~yy~8S`yOmKRqOrk7TbV6=XFGBq`E{PQm&
> z4T<tLJxnM;w;80D0`{Y&VX#saKheKKB218LIt(Q7OKjiBEBV)ps|#ODG!CqJZe^#=
> z?9Qhi`w5uKCb}`aZNm6!RZ&vWH+aMEi<*9IGy{GB4Vk<r%yFD=m#RVPK|>EkAoCeX
> zbhxx0sicv{MM~Evno+XgnzZdRo;4E at gm<=HfAwsP<5 at M@ddAdyw{vP_H7v>sBN}BU
> zLM>fa#aeBJq;zw+Q@`897?IT-07i@`X%lD!Et+G%@3DD$*(I&}wh0sA7l%Wo(22dq
> zk-ula2Kb&Ykk{A^%mc4+Wza at 4M?S`j at I%yM%SPS#Djj=k<cm`gfLfTEjZ3Z~na1OF
> zp0~w-Hq`H`@fy1a2 at Q^I00KyJJ1frlGdu-aFfN_|LB}%gn==eO^nGayWb!_d7l<4H
> z105C3H<DdJA%-hxhU%PKi2GW{YzvUs&BZj3xsrJ~>^oBY?GTY9pacJ(M$Q<AfG7yV
> zZzW5szzqbwMnNT-ZS>CI0y?F{J={X&8m^%>|H|Z_dGAf)R|)^0-F at r%b|#rqlhSL1
> z)oBKk6c37#B{I^nG3wG)wLMi#grTG!Waq==M%yLDKQuL8`37w6v=t|GQK`E)*;7?t
> z|GB_fUXP;hvX;3x at -T_&l)Cf;Ekgp#sCE-SNaiVUDKdgLsoA!Ky?{P7v^Q61lcDEI
> zsAo^V_H?G?Px4VoB8$c;fHmq}NwI7i=lG+U?#hcrR{b}ntE7-!;}p;<b*-cnEE|XU
> z3-qjnS+ at P<=sjsSS^wMlNRDM)y=ByCHvnwH)NLPZ$;Yl8;%j4hEv1yZIN;qEV9`mU
> 
> diff --git a/docs/spice_style.txt b/docs/spice_style.txt
> new file mode 100644
> index 0000000..895126a
> --- /dev/null
> +++ b/docs/spice_style.txt
> @@ -0,0 +1,450 @@
> +Spice project coding style and coding conventions
> +=================================================
> +
> +Draft 2
> +
> +Copyright (C) 2009 Red Hat, Inc.
> +Licensed under a Creative Commons Attribution-Share Alike 3.0
> +United States License (see http://creativecommons.org/licenses/by-sa/3.0/us/l
> egalcode).
> +
> +
> +C and C++ style
> +---------------
> +
> +All of the following are applicable for both c and c+\+, except for <<cpp,
> C++ section>>.
> +
> +Source Files
> +------------
> +
> +Names
> +~~~~~
> +
> +Use lower case and separate words using underscore (e.g., file_name.c,
> header.h).
> +
> +Use cpp file extension for c\++ source files and hpp extension for c++
> template files. Use standard file extension for c source and header files.
> +
> +Line width
> +~~~~~~~~~~
> +
> +No more then 100 character on a single line
> +
> +Tabs
> +~~~~
> +
> +Tabs are not allowed, use 4 spaces instead
> +
> +White spaces
> +~~~~~~~~~~~~
> +
> +Trailing white spaces are not allowed
> +
> +New Line
> +~~~~~~~~
> +
> +Use Unix style line ending (i.e., LF)
> +
> +New line (i.e., EOL) must be the last char in the file
> +
> +Comparing
> +---------
> +
> +Use  right-hand comparison style.
> +
> +Examples: +
> +  use `(var == 7)` instead of  `(7 == var)` +
> +  use `(function(var) > 7)` instead of `(7 < function(var))`
> +
> +TRUE, FALSE and NULL
> +--------------------
> +
> +Use TRUE FALSE and NULL instead of 1 and 0 in order to improve code
> readability. TRUE FALSE is not relevant for c++, in c++ use the built-in bool
> type.
> +
> +Static storage initialization
> +-----------------------------
> +
> +To improve code readability, explicitly initialize variables that depend on
> default initialization with zero/null.
> +
> +Fixme and todo
> +--------------
> +
> +Comments that are prefixed with `fixme` describe a bug that need to be fixed.
> Generally, it is not allowed to commit new code having `fixme` comment.
> Committing  `fixme` is allowed only for existing bugs. Comments that are
> prefixed with `todo` describe further features, optimization or code
> improvements, and they are allowed to be committed along with the relevant
> code.
> +
> +ASSERT
> +------
> +
> +Use it freely. ASSERT helps testing function arguments and function results
> validity.  ASSERT helps detecting bugs and improve code readability and
> stability.
> +
> +sizeof
> +------
> +
> +Apply function style to `sizeof` (i.e., use `sizeof(x)`)
> +
> +const
> +-----
> +
> +Use const keyword when applicable to improve code reliability and celerity.
> +
> +goto
> +----
> +
> +Using goto is allowed in c code for error handling. In any other case it will
> be used only as a special exception.
> +
> +Defining Constant values
> +------------------------
> +
> +Use defines for constant values for improving readability and ease of
> changes. Alternatively, use global `const` variables.
> +
> +void argument
> +-------------
> +
> +Don't add explicitly void argument in functions without arguments. (i.e.,
> void function_name() is OK)
> +
> +Short functions
> +---------------
> +
> +Try to split code to short functions, each having simple functionality, in
> order to improve code readability and re-usability. Prefix with inline short
> functions or functions that were splitted for readability reason.
> +
> +Return on if
> +------------
> +
> +Try to return immediately on if in places that can reduce indentation level.
> +
> +Example:
> +
> +prefer
> +[source,c]
> +----
> +void function(int *n)
> +{
> +    if (!n) {
> +        return;
> +    }
> +    ...
> +}
> +----
> +on
> +[source,c]
> +----
> +void function(int *n)
> +{
> +    if (!n) {
> +        return;
> +    } else {
> +        ...
> +    }
> +}
> +----
> +
> +Names
> +-----
> +
> +* Don't underestimate the importance of name choosing. Good names make the
> code more easy to understand and reduce the required level of code
> documentation. When choosing names, prefer long meaningful names over short
> vague name.
> +* Variable and Function names - use lower case and separate words using
> underscore (e.g., sample_variable_name)
> +* Structures, class and enum names - one or more words, each word start with
> upper case (e.g., Name, SampleStructName)
> +* Defines and enum items names - uppercase words separated using underscores
> (e.g., NAME, SAMPLE_DEFINE_NAME)
> +
> +Optimization
> +------------
> +
> +Keep optimization to fast path code. Prefer safe, clear and easy to maintain
> coding for code that is not on the fast path.
> +
> +Spacing
> +-------
> +
> +Use spacing for improving code readability.
> +
> +[source,c]
> +for (i = 0; i < 10; ++i) {
> +    some_func(var, i * i + *ptr, &var, sizeof(var));
> +}
> +
> +Function Indentation
> +--------------------
> +
> +* No spaces between function name to left bracket.
> +* Curly bracket start on new line.
> +* Functions must be padded with empty lines on both sides
> ++
> +[source,c]
> +void function(type1 arg1, type2 arg2, type2 arg3)
> +{
> +  ...
> +}
> ++
> +* In case of a new line in arguments list, align it to the first argument
> type.
> ++
> +[source,c]
> +----
> +void function(type1 arg1,
> +              type2 arg2,
> +              type3 arg3)
> +----
> ++
> +Or
> ++
> +[source,c]
> +----
> +void function(type1 arg1, type2 arg2,
> +              type3 arg3)
> +----
> ++
> +* New line is acceptable only in arguments list
> +
> +Branching indentation
> +---------------------
> +
> +* Add space after a branch keyword and after the right bracket.
> +* Curly bracket starts on the same line the branch starts.
> +* Place curly brackets after all control flow constructs even where optional.
> This convention reduces branching bugs that are difficult to detect. It also
> makes it easier to add logging messages during debugging  since it eliminates
> the need to add the brackets.
> ++
> +[source,c]
> +----
> +if (condition) {
> +    ...
> +} else if (condition) {
> +    ...
> +} else {
> +    ...
> +}
> +----
> ++
> +In case of long condition statement, prefer having additional temporary
> variable over multiple line condition statement.
> ++
> +In case of new line in condition statement.
> ++
> +[source,c]
> +----
> +if (long_name && very_long_name && very_long ||
> +                                               var_name) {
> +----
> ++
> +or indent using two tabs
> ++
> +[source,c]
> +----
> +if (long_name && very_long_name && long_name ||
> +        var_name) {
> +----
> ++
> +Break function arguments list in long condition statement according to
> section 18.
> ++
> +[source,c]
> +----
> +while (condition) {
> +        ...
> +}
> +
> +do {
> +    ...
> +} while (condition);
> +
> +for (i = x; i < y; i++) {
> +    ...
> +}
> +
> +
> +switch (x) {
> +case A: {
> +    ...
> +    break;
> +}
> +case B:
> +    ...
> +    ...
> +    break;
> +default:
> +    ...
> +}
> +----
> +
> +Types indentation
> +-----------------
> +
> +[source,c]
> +----
> +struct StructName {
> +    type1 name1;
> +    type2 name2;
> +
> +    ...
> +};
> +
> +enum {
> +    A,
> +    B,
> +    C = 10,
> +    D,
> +};
> +
> +union {
> +    type1 name1;
> +    type2 name2;
> +    ...
> +} u;
> +----
> +
> +Vertical indentation
> +--------------------
> +
> +Use one space no tabs and no vertical alignment.
> +[source,c]
> +----
> +long var_name_1 = 7;
> +int var_name_2 = 1111l;
> +unsigned long long_var_name_1 = 666;
> +char long_var_name_1 = 'a';
> +
> +void f1(int a, char ch);
> +unsigned long f2(int a, char ch);
> +----
> +
> +Multi line macro indentation
> +----------------------------
> +
> +[source,c]
> +#define MACRO_NAME(a, b, c) {        \
> +    int ab = a + c;             \
> +    int ac = a + b;             \
> +    int bc = b + c;             \
> +    f(ab, ac, bc);              \
> +}
> +
> +Multi line array indentation
> +----------------------------
> +
> +[source,c]
> +char *array[] = {
> +    "item_1",
> +    "item_2",
> +    "item_3",
> +};
> +
> +[[cpp]]
> +C++
> +---
> +
> +C++ style extends C Coding style
> +
> +One super
> +~~~~~~~~~
> +
> +Avoid having more then one super class. Inherit from one super class and
> multiple interfaces (abstract class) for having multiple inheritance.
> +
> +Data members
> +~~~~~~~~~~~~
> +
> +Prefix all protected and private data members with underscore (i.e.,
> _member_name).
> +
> +Using public data members is allowed only as an exception. Use getters and
> setters instead.
> +
> +Object reference
> +~~~~~~~~~~~~~~~~
> +
> +For code clarity use object reference (i.e., Type& var) in places where it is
> not allow to have null pointer and is not permitted to release the object.
> +
> +Templates
> +~~~~~~~~~
> +
> +The use of c++ templates is limited to  simple containers.
> +
> +'*' and '&'
> +~~~~~~~~~~~
> +
> +'\*' and '&' , should be directly connected with the *type names*.
> +
> +Example:
> +
> +[source,c]
> +void function(int* i, int& n);
> +
> +Class indentation
> +~~~~~~~~~~~~~~~~~
> +
> +[source,c]
> +----
> +class ClassName: public SuperClass, public FirstInterface,
> +                 public SecondInterface {
> +public:
> +    ClassName();
> +    virtual ~ClassName();
> +
> +    type public_function_1(type var);
> +    type public_function_2();
> +    ...
> +
> +protected:
> +    type protected_function_1(type var);
> +    type protected_function_2();
> +    ...
> +
> +private:
> +    type private_function_1(type var);
> +    type private_function_2();
> +    ...
> +
> +public:
> +    type public_member_1;
> +    type public_member_2;
> +    ...
> +
> +protected:
> +    type _protected_member_1;
> +    type _protected_member_2;
> +    ...
> +
> +private:
> +    type _private_member_1;
> +    type _private_member_2;
> +    ...
> +};
> +----
> +
> +Constructor indentation
> +~~~~~~~~~~~~~~~~~~~~~~~
> +
> +[source,c]
> +----
> +ClassName::ClassName(type1 arg1, type2 arg2,type3 arg3,
> +                     type4 arg4)
> +    : SuperClass(arg1, arg2)
> +    , _member_1 (arg3)
> +    , _member_2 (arg4)
> +    ...
> +{
> +    ...
> +}
> +----
> +
> +bool
> +~~~~
> +
> +Use built-in bool `true` and `false` instead of `TRUE` and `FALSE`.
> +
> +Operator overloading
> +~~~~~~~~~~~~~~~~~~~~
> +
> +Avoid using operator overloading. It is only allowed as an exception.
> +
> +AutoRef and AutoPtr
> +~~~~~~~~~~~~~~~~~~~
> +
> +Use `AutoRef` and `AutoPtr` style object for automatic object release. Using
> those objects simplify function cleanups and exception handling.
> +
> +Spice client
> +------------
> +
> +#ifdef PLATFORM
> +~~~~~~~~~~~~~~~
> +
> +Use #ifdef <platform> only in cases of different logic that depends on
> platform. In all other case add common interface (e.g., in platform.h) and
> keep specific platform implementation in platform directory (e.g.,windows).
> +
> +Use standard macros
> +~~~~~~~~~~~~~~~~~~~
> + LOG_INFO
> + LOG_WARN
> + LOG_ERROR
> + ASSERT
> + PANIC
> + DBG
> + THROW
> + THROW_ERR


More information about the Spice-devel mailing list