diff --git a/doc/sigplanconf.cls b/doc/sigplanconf.cls
deleted file mode 100644
index d26f89f..0000000
--- a/doc/sigplanconf.cls
+++ /dev/null
@@ -1,1175 +0,0 @@
-%-----------------------------------------------------------------------------
-%
-%               LaTeX Class/Style File
-%
-% Name:         sigplanconf.cls
-% Purpose:      A LaTeX 2e class file for SIGPLAN conference proceedings.
-%               This class file supercedes acm_proc_article-sp,
-%               sig-alternate, and sigplan-proc.
-%
-% Author:       Paul C. Anagnostopoulos
-%               Windfall Software
-%               978 371-2316
-%               paul@windfall.com
-%
-% Created:      12 September 2004
-%
-% Revisions:    See end of file.
-%
-%-----------------------------------------------------------------------------
-
-
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesClass{sigplanconf}[2007/03/13 v1.5 ACM SIGPLAN Proceedings]
-
-% The following few pages contain LaTeX programming extensions adapted
-% from the ZzTeX macro package.
-
-%                       Token Hackery
-%                       ----- -------
-
-
-\def \@expandaftertwice {\expandafter\expandafter\expandafter}
-\def \@expandafterthrice {\expandafter\expandafter\expandafter\expandafter
-                          \expandafter\expandafter\expandafter}
-
-% This macro discards the next token.
-
-\def \@discardtok #1{}%                                  token
-
-% This macro removes the `pt' following a dimension.
-
-{\catcode `\p = 12 \catcode `\t = 12
-
-\gdef \@remover #1pt{#1}
-
-} % \catcode
-
-% This macro extracts the contents of a macro and returns it as plain text.
-% Usage: \expandafter\@defof \meaning\macro\@mark
-
-\def \@defof #1:->#2\@mark{#2}
-
-%                       Control Sequence Names
-%                       ------- -------- -----
-
-
-\def \@name #1{%                                        {\tokens}
-  \csname \expandafter\@discardtok \string#1\endcsname}
-
-\def \@withname #1#2{%                                  {\command}{\tokens}
-  \expandafter#1\csname \expandafter\@discardtok \string#2\endcsname}
-
-%                       Flags (Booleans)
-%                       ----- ----------
-
-% The boolean literals \@true and \@false are appropriate for use with
-% the \if command, which tests the codes of the next two characters.
-
-\def \@true {TT}
-\def \@false {FL}
-
-\def \@setflag #1=#2{\edef #1{#2}}%              \flag = boolean
-
-%                       IF and Predicates
-%                       -- --- ----------
-
-% A "predicate" is a macro that returns \@true or \@false as its value.
-% Such values are suitable for use with the \if conditional.  For example:
-%
-%   \if \@oddp{\x} <then-clause> \else <else-clause> \fi
-
-% A predicate can be used with \@setflag as follows:
-%
-%   \@setflag \flag = {<predicate>}
-
-% Here are the predicates for TeX's repertoire of conditional
-% commands.  These might be more appropriately interspersed with
-% other definitions in this module, but what the heck.
-% Some additional "obvious" predicates are defined.
-
-\def \@eqlp   #1#2{\ifnum #1 = #2\@true \else \@false \fi}
-\def \@neqlp  #1#2{\ifnum #1 = #2\@false \else \@true \fi}
-\def \@lssp   #1#2{\ifnum #1 < #2\@true \else \@false \fi}
-\def \@gtrp   #1#2{\ifnum #1 > #2\@true \else \@false \fi}
-\def \@zerop  #1{\ifnum #1 = 0\@true \else \@false \fi}
-\def \@onep   #1{\ifnum #1 = 1\@true \else \@false \fi}
-\def \@posp   #1{\ifnum #1 > 0\@true \else \@false \fi}
-\def \@negp   #1{\ifnum #1 < 0\@true \else \@false \fi}
-\def \@oddp   #1{\ifodd #1\@true \else \@false \fi}
-\def \@evenp  #1{\ifodd #1\@false \else \@true \fi}
-\def \@rangep #1#2#3{\if \@orp{\@lssp{#1}{#2}}{\@gtrp{#1}{#3}}\@false \else
-                                                          \@true \fi}
-\def \@tensp  #1{\@rangep{#1}{10}{19}}
-
-\def \@dimeqlp   #1#2{\ifdim #1 = #2\@true \else \@false \fi}
-\def \@dimneqlp  #1#2{\ifdim #1 = #2\@false \else \@true \fi}
-\def \@dimlssp   #1#2{\ifdim #1 < #2\@true \else \@false \fi}
-\def \@dimgtrp   #1#2{\ifdim #1 > #2\@true \else \@false \fi}
-\def \@dimzerop  #1{\ifdim #1 = 0pt\@true \else \@false \fi}
-\def \@dimposp   #1{\ifdim #1 > 0pt\@true \else \@false \fi}
-\def \@dimnegp   #1{\ifdim #1 < 0pt\@true \else \@false \fi}
-
-\def \@vmodep     {\ifvmode \@true \else \@false \fi}
-\def \@hmodep     {\ifhmode \@true \else \@false \fi}
-\def \@mathmodep  {\ifmmode \@true \else \@false \fi}
-\def \@textmodep  {\ifmmode \@false \else \@true \fi}
-\def \@innermodep {\ifinner \@true \else \@false \fi}
-
-\long\def \@codeeqlp #1#2{\if #1#2\@true \else \@false \fi}
-
-\long\def \@cateqlp #1#2{\ifcat #1#2\@true \else \@false \fi}
-
-\long\def \@tokeqlp  #1#2{\ifx #1#2\@true \else \@false \fi}
-\long\def \@xtokeqlp #1#2{\expandafter\ifx #1#2\@true \else \@false \fi}
-
-\long\def \@definedp #1{%
-  \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname
-                   \relax \@false \else \@true \fi}
-
-\long\def \@undefinedp #1{%
-  \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname
-                   \relax \@true \else \@false \fi}
-
-\def \@emptydefp #1{\ifx #1\@empty \@true \else \@false \fi}%       {\name}
-
-\let \@emptylistp = \@emptydefp
-
-\long\def \@emptyargp #1{%                               {#n}
-  \@empargp #1\@empargq\@mark}
-\long\def \@empargp #1#2\@mark{%
-  \ifx #1\@empargq \@true \else \@false \fi}
-\def \@empargq {\@empargq}
-
-\def \@emptytoksp #1{%                                   {\tokenreg}
-  \expandafter\@emptoksp \the#1\@mark}
-
-\long\def \@emptoksp #1\@mark{\@emptyargp{#1}}
-
-\def \@voidboxp #1{\ifvoid #1\@true \else \@false \fi}
-\def \@hboxp #1{\ifhbox #1\@true \else \@false \fi}
-\def \@vboxp #1{\ifvbox #1\@true \else \@false \fi}
-
-\def \@eofp #1{\ifeof #1\@true \else \@false \fi}
-
-
-% Flags can also be used as predicates, as in:
-%
-%   \if \flaga <then-clause> \else <else-clause> \fi
-
-
-% Now here we have predicates for the common logical operators.
-
-\def \@notp #1{\if #1\@false \else \@true \fi}
-
-\def \@andp #1#2{\if #1%
-                  \if #2\@true \else \@false \fi
-                \else
-                  \@false
-                \fi}
-
-\def \@orp #1#2{\if #1%
-                 \@true
-               \else
-                 \if #2\@true \else \@false \fi
-               \fi}
-
-\def \@xorp #1#2{\if #1%
-                  \if #2\@false \else \@true \fi
-                \else
-                  \if #2\@true \else \@false \fi
-                \fi}
-
-%                       Arithmetic
-%                       ----------
-
-\def \@increment #1{\advance #1 by 1\relax}%             {\count}
-
-\def \@decrement #1{\advance #1 by -1\relax}%            {\count}
-
-%                       Options
-%                       -------
-
-
-\@setflag \@blockstyle = \@false
-\@setflag \@copyrightwanted = \@true
-\@setflag \@explicitsize = \@false
-\@setflag \@mathtime = \@false
-\@setflag \@ninepoint = \@true
-\newcount{\@numheaddepth} \@numheaddepth = 3
-\@setflag \@onecolumn = \@false
-\@setflag \@preprint = \@false
-\@setflag \@reprint = \@false
-\@setflag \@times = \@false
-
-% Note that all the dangerous article class options are trapped.
-
-\DeclareOption{9pt}{\@setflag \@ninepoint = \@true
-                    \@setflag \@explicitsize = \@true}
-
-\DeclareOption{10pt}{\PassOptionsToClass{10pt}{article}%
-                     \@setflag \@ninepoint = \@false
-                     \@setflag \@explicitsize = \@true}
-
-\DeclareOption{11pt}{\PassOptionsToClass{11pt}{article}%
-                     \@setflag \@ninepoint = \@false
-                     \@setflag \@explicitsize = \@true}
-
-\DeclareOption{12pt}{\@unsupportedoption{12pt}}
-
-\DeclareOption{a4paper}{\@unsupportedoption{a4paper}}
-
-\DeclareOption{a5paper}{\@unsupportedoption{a5paper}}
-
-\DeclareOption{b5paper}{\@unsupportedoption{b5paper}}
-
-\DeclareOption{blockstyle}{\@setflag \@blockstyle = \@true}
-
-\DeclareOption{cm}{\@setflag \@times = \@false}
-
-\DeclareOption{computermodern}{\@setflag \@times = \@false}
-
-\DeclareOption{executivepaper}{\@unsupportedoption{executivepaper}}
-
-\DeclareOption{indentedstyle}{\@setflag \@blockstyle = \@false}
-
-\DeclareOption{landscape}{\@unsupportedoption{landscape}}
-
-\DeclareOption{legalpaper}{\@unsupportedoption{legalpaper}}
-
-\DeclareOption{letterpaper}{\@unsupportedoption{letterpaper}}
-
-\DeclareOption{mathtime}{\@setflag \@mathtime = \@true}
-
-\DeclareOption{nocopyrightspace}{\@setflag \@copyrightwanted = \@false}
-
-\DeclareOption{notitlepage}{\@unsupportedoption{notitlepage}}
-
-\DeclareOption{numberedpars}{\@numheaddepth = 4}
-
-%%%\DeclareOption{onecolumn}{\@setflag \@onecolumn = \@true}
-
-\DeclareOption{preprint}{\@setflag \@preprint = \@true}
-
-\DeclareOption{reprint}{\@setflag \@reprint = \@true}
-
-\DeclareOption{times}{\@setflag \@times = \@true}
-
-\DeclareOption{titlepage}{\@unsupportedoption{titlepage}}
-
-\DeclareOption{twocolumn}{\@setflag \@onecolumn = \@false}
-
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
-
-\ExecuteOptions{9pt,indentedstyle,times}
-\@setflag \@explicitsize = \@false
-\ProcessOptions
-
-\if \@onecolumn
-  \if \@notp{\@explicitsize}%
-    \@setflag \@ninepoint = \@false
-    \PassOptionsToClass{11pt}{article}%
-  \fi
-  \PassOptionsToClass{twoside,onecolumn}{article}
-\else
-  \PassOptionsToClass{twoside,twocolumn}{article}
-\fi
-\LoadClass{article}
-
-\def \@unsupportedoption #1{%
-  \ClassError{proc}{The standard '#1' option is not supported.}}
-
-% This can be used with the 'reprint' option to get the final folios.
-
-\def \setpagenumber #1{%
-  \setcounter{page}{#1}}
-
-\AtEndDocument{\label{sigplanconf@finalpage}}
-
-%                       Utilities
-%                       ---------
-
-
-\newcommand{\setvspace}[2]{%
-  #1 = #2
-  \advance #1 by -1\parskip}
-
-%                       Document Parameters
-%                       -------- ----------
-
-
-% Page:
-
-\setlength{\hoffset}{-1in}
-\setlength{\voffset}{-1in}
-
-\setlength{\topmargin}{1in}
-\setlength{\headheight}{0pt}
-\setlength{\headsep}{0pt}
-
-\if \@onecolumn
-  \setlength{\evensidemargin}{.75in}
-  \setlength{\oddsidemargin}{.75in}
-\else
-  \setlength{\evensidemargin}{.75in}
-  \setlength{\oddsidemargin}{.75in}
-\fi
-
-% Text area:
-
-\newdimen{\standardtextwidth}
-\setlength{\standardtextwidth}{42pc}
-
-\if \@onecolumn
-  \setlength{\textwidth}{40.5pc}
-\else
-  \setlength{\textwidth}{\standardtextwidth}
-\fi
-
-\setlength{\topskip}{8pt}
-\setlength{\columnsep}{2pc}
-\setlength{\textheight}{54.5pc}
-
-% Running foot:
-
-\setlength{\footskip}{30pt}
-
-% Paragraphs:
-
-\if \@blockstyle
-  \setlength{\parskip}{5pt plus .1pt minus .5pt}
-  \setlength{\parindent}{0pt}
-\else
-  \setlength{\parskip}{0pt}
-  \setlength{\parindent}{12pt}
-\fi
-
-\setlength{\lineskip}{.5pt}
-\setlength{\lineskiplimit}{\lineskip}
-
-\frenchspacing
-\pretolerance = 400
-\tolerance = \pretolerance
-\setlength{\emergencystretch}{5pt}
-\clubpenalty = 10000
-\widowpenalty = 10000
-\setlength{\hfuzz}{.5pt}
-
-% Standard vertical spaces:
-
-\newskip{\standardvspace}
-\setvspace{\standardvspace}{5pt plus 1pt minus .5pt}
-
-% Margin paragraphs:
-
-\setlength{\marginparwidth}{36pt}
-\setlength{\marginparsep}{2pt}
-\setlength{\marginparpush}{8pt}
-
-
-\setlength{\skip\footins}{8pt plus 3pt minus 1pt}
-\setlength{\footnotesep}{9pt}
-
-\renewcommand{\footnoterule}{%
-  \hrule width .5\columnwidth height .33pt depth 0pt}
-
-\renewcommand{\@makefntext}[1]{%
-  \noindent \@makefnmark \hspace{1pt}#1}
-
-% Floats:
-
-\setcounter{topnumber}{4}
-\setcounter{bottomnumber}{1}
-\setcounter{totalnumber}{4}
-
-\renewcommand{\fps@figure}{tp}
-\renewcommand{\fps@table}{tp}
-\renewcommand{\topfraction}{0.90}
-\renewcommand{\bottomfraction}{0.30}
-\renewcommand{\textfraction}{0.10}
-\renewcommand{\floatpagefraction}{0.75}
-
-\setcounter{dbltopnumber}{4}
-
-\renewcommand{\dbltopfraction}{\topfraction}
-\renewcommand{\dblfloatpagefraction}{\floatpagefraction}
-
-\setlength{\floatsep}{18pt plus 4pt minus 2pt}
-\setlength{\textfloatsep}{18pt plus 4pt minus 3pt}
-\setlength{\intextsep}{10pt plus 4pt minus 3pt}
-
-\setlength{\dblfloatsep}{18pt plus 4pt minus 2pt}
-\setlength{\dbltextfloatsep}{20pt plus 4pt minus 3pt}
-
-% Miscellaneous:
-
-\errorcontextlines = 5
-
-%                       Fonts
-%                       -----
-
-
-\if \@times
-  \renewcommand{\rmdefault}{ptm}%
-  \if \@mathtime
-    \usepackage[mtbold,noTS1]{mathtime}%
-  \else
-%%%    \usepackage{mathptm}%
-  \fi
-\else
-  \relax
-\fi
-
-\if \@ninepoint
-
-\renewcommand{\normalsize}{%
-  \@setfontsize{\normalsize}{9pt}{10pt}%
-  \setlength{\abovedisplayskip}{5pt plus 1pt minus .5pt}%
-  \setlength{\belowdisplayskip}{\abovedisplayskip}%
-  \setlength{\abovedisplayshortskip}{3pt plus 1pt minus 2pt}%
-  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
-
-\renewcommand{\tiny}{\@setfontsize{\tiny}{5pt}{6pt}}
-
-\renewcommand{\scriptsize}{\@setfontsize{\scriptsize}{7pt}{8pt}}
-
-\renewcommand{\small}{%
-  \@setfontsize{\small}{8pt}{9pt}%
-  \setlength{\abovedisplayskip}{4pt plus 1pt minus 1pt}%
-  \setlength{\belowdisplayskip}{\abovedisplayskip}%
-  \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
-  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
-
-\renewcommand{\footnotesize}{%
-  \@setfontsize{\footnotesize}{8pt}{9pt}%
-  \setlength{\abovedisplayskip}{4pt plus 1pt minus .5pt}%
-  \setlength{\belowdisplayskip}{\abovedisplayskip}%
-  \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
-  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
-
-\renewcommand{\large}{\@setfontsize{\large}{11pt}{13pt}}
-
-\renewcommand{\Large}{\@setfontsize{\Large}{14pt}{18pt}}
-
-\renewcommand{\LARGE}{\@setfontsize{\LARGE}{18pt}{20pt}}
-
-\renewcommand{\huge}{\@setfontsize{\huge}{20pt}{25pt}}
-
-\renewcommand{\Huge}{\@setfontsize{\Huge}{25pt}{30pt}}
-
-\fi
-
-%                       Abstract
-%                       --------
-
-
-\renewenvironment{abstract}{%
-  \section*{Abstract}%
-  \normalsize}{%
-  }
-
-%                       Bibliography
-%                       ------------
-
-
-\renewenvironment{thebibliography}[1]
-     {\section*{\refname
-        \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
-      \list{\@biblabel{\@arabic\c@enumiv}}%
-           {\settowidth\labelwidth{\@biblabel{#1}}%
-            \leftmargin\labelwidth
-            \advance\leftmargin\labelsep
-            \@openbib@code
-            \usecounter{enumiv}%
-            \let\p@enumiv\@empty
-            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
-      \small
-      \softraggedright%%%\sloppy
-      \clubpenalty4000
-      \@clubpenalty \clubpenalty
-      \widowpenalty4000%
-      \sfcode`\.\@m}
-     {\def\@noitemerr
-       {\@latex@warning{Empty `thebibliography' environment}}%
-      \endlist}
-
-%                       Categories
-%                       ----------
-
-
-\@setflag \@firstcategory = \@true
-
-\newcommand{\category}[3]{%
-  \if \@firstcategory
-    \paragraph*{Categories and Subject Descriptors}%
-    \@setflag \@firstcategory = \@false
-  \else
-    \unskip ;\hspace{.75em}%
-  \fi
-  \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}}
-
-\def \@category #1#2#3[#4]{%
-  {\let \and = \relax
-   #1 [\textit{#2}]%
-   \if \@emptyargp{#4}%
-     \if \@notp{\@emptyargp{#3}}: #3\fi
-   \else
-     :\space
-     \if \@notp{\@emptyargp{#3}}#3---\fi
-     \textrm{#4}%
-   \fi}}
-
-%                       Copyright Notice
-%                       --------- ------
-
-
-\def \ftype@copyrightbox {8}
-\def \@toappear {}
-\def \@permission {}
-
-
-\def \@copyrightspace {%
-  \@float{copyrightbox}[b]%
-  \vbox to 1in{%
-    \vfill
-    \parbox[b]{20pc}{%
-      \scriptsize
-      \if \@preprint
-        [Copyright notice will appear here
-         once 'preprint' option is removed.]\par
-      \else
-        \@toappear
-      \fi
-      \if \@reprint
-        \noindent Reprinted from \@conferencename,
-        \@proceedings,
-        \@conferenceinfo,
-        pp.~\number\thepage--\pageref{sigplanconf@finalpage}.\par
-      \fi}}%
-  \end@float}
-
-\long\def \toappear #1{%
-  \def \@toappear {#1}}
-
-\toappear{%
-  \noindent \@permission \par
-  \vspace{2pt}
-  \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
-  \noindent Copyright \copyright\ \@copyrightyear\ ACM \@copyrightdata
-    \dots \$5.00\par}
-
-\newcommand{\permission}[1]{%
-  \gdef \@permission {#1}}
-
-\permission{%
-  Permission to make digital or hard copies of all or
-  part of this work for personal or classroom use is granted without
-  fee provided that copies are not made or distributed for profit or
-  commercial advantage and that copies bear this notice and the full
-  citation on the first page.  To copy otherwise, to republish, to
-  post on servers or to redistribute to lists, requires prior specific
-  permission and/or a fee.}
-
-% Here we have some alternate permission statements and copyright lines:
-
-\newcommand{\ACMCanadapermission}{%
-  \permission{%
-    Copyright \@copyrightyear\ Association for Computing Machinery.
-    ACM acknowledges that
-    this contribution was authored or co-authored by an affiliate of the
-    National Research Council of Canada (NRC).
-    As such, the Crown in Right of
-    Canada retains an equal interest in the copyright, however granting
-    nonexclusive, royalty-free right to publish or reproduce this article,
-    or to allow others to do so, provided that clear attribution
-    is also given to the authors and the NRC.}}
-
-\newcommand{\ACMUSpermission}{%
-  \permission{%
-    Copyright \@copyrightyear\ Association for
-    Computing Machinery. ACM acknowledges that
-    this contribution was authored or co-authored
-    by a contractor or affiliate
-    of the U.S. Government. As such, the Government retains a nonexclusive,
-    royalty-free right to publish or reproduce this article,
-    or to allow others to do so, for Government purposes only.}}
-
-\newcommand{\authorpermission}{%
-  \permission{%
-    Copyright is held by the author/owner(s).}
-  \toappear{%
-    \noindent \@permission \par
-    \vspace{2pt}
-    \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
-    ACM \@copyrightdata.}}
-
-\newcommand{\Sunpermission}{%
-  \permission{%
-    Copyright is held by Sun Microsystems, Inc.}%
-  \toappear{%
-    \noindent \@permission \par
-    \vspace{2pt}
-    \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
-    ACM \@copyrightdata.}}
-
-\newcommand{\USpublicpermission}{%
-  \permission{%
-    This paper is authored by an employee(s) of the United States
-    Government and is in the public domain.}%
-  \toappear{%
-    \noindent \@permission \par
-    \vspace{2pt}
-    \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
-    ACM \@copyrightdata.}}
-
-%                       Enunciations
-%                       ------------
-
-
-\def \@begintheorem #1#2{%                      {name}{number}
-  \trivlist
-  \item[\hskip \labelsep \textsc{#1 #2.}]%
-  \itshape\selectfont
-  \ignorespaces}
-
-\def \@opargbegintheorem #1#2#3{%               {name}{number}{title}
-  \trivlist
-  \item[%
-    \hskip\labelsep \textsc{#1\ #2}%
-    \if \@notp{\@emptyargp{#3}}\nut (#3).\fi]%
-  \itshape\selectfont
-  \ignorespaces}
-
-%                       Figures
-%                       -------
-
-
-\@setflag \@caprule = \@true
-
-\long\def \@makecaption #1#2{%
-  \addvspace{4pt}
-  \if \@caprule
-    \hrule width \hsize height .33pt
-    \vspace{4pt}
-  \fi
-  \setbox \@tempboxa = \hbox{\@setfigurenumber{#1.}\nut #2}%
-  \if \@dimgtrp{\wd\@tempboxa}{\hsize}%
-    \noindent \@setfigurenumber{#1.}\nut #2\par
-  \else
-    \centerline{\box\@tempboxa}%
-  \fi}
-
-\newcommand{\nocaptionrule}{%
-  \@setflag \@caprule = \@false}
-
-\def \@setfigurenumber #1{%
-  {\rmfamily \bfseries \selectfont #1}}
-
-%                       Hierarchy
-%                       ---------
-
-
-\setcounter{secnumdepth}{\@numheaddepth}
-
-\newskip{\@sectionaboveskip}
-\setvspace{\@sectionaboveskip}{10pt plus 3pt minus 2pt}
-
-\newskip{\@sectionbelowskip}
-\if \@blockstyle
-  \setlength{\@sectionbelowskip}{0.1pt}%
-\else
-  \setlength{\@sectionbelowskip}{4pt}%
-\fi
-
-\renewcommand{\section}{%
-  \@startsection
-    {section}%
-    {1}%
-    {0pt}%
-    {-\@sectionaboveskip}%
-    {\@sectionbelowskip}%
-    {\large \bfseries \raggedright}}
-
-\newskip{\@subsectionaboveskip}
-\setvspace{\@subsectionaboveskip}{8pt plus 2pt minus 2pt}
-
-\newskip{\@subsectionbelowskip}
-\if \@blockstyle
-  \setlength{\@subsectionbelowskip}{0.1pt}%
-\else
-  \setlength{\@subsectionbelowskip}{4pt}%
-\fi
-
-\renewcommand{\subsection}{%
-  \@startsection%
-    {subsection}%
-    {2}%
-    {0pt}%
-    {-\@subsectionaboveskip}%
-    {\@subsectionbelowskip}%
-    {\normalsize \bfseries \raggedright}}
-
-\renewcommand{\subsubsection}{%
-  \@startsection%
-    {subsubsection}%
-    {3}%
-    {0pt}%
-    {-\@subsectionaboveskip}
-    {\@subsectionbelowskip}%
-    {\normalsize \bfseries \raggedright}}
-
-\newskip{\@paragraphaboveskip}
-\setvspace{\@paragraphaboveskip}{6pt plus 2pt minus 2pt}
-
-\renewcommand{\paragraph}{%
-  \@startsection%
-    {paragraph}%
-    {4}%
-    {0pt}%
-    {\@paragraphaboveskip}
-    {-1em}%
-    {\normalsize \bfseries \if \@times \itshape \fi}}
-
-\renewcommand{\subparagraph}{%
-  \@startsection%
-    {subparagraph}%
-    {4}%
-    {0pt}%
-    {\@paragraphaboveskip}
-    {-1em}%
-    {\normalsize \itshape}}
-
-% Standard headings:
-
-\newcommand{\acks}{\section*{Acknowledgments}}
-
-\newcommand{\keywords}{\paragraph*{Keywords}}
-
-\newcommand{\terms}{\paragraph*{General Terms}}
-
-%                       Identification
-%                       --------------
-
-
-\def \@conferencename {}
-\def \@conferenceinfo {}
-\def \@copyrightyear {}
-\def \@copyrightdata {[to be supplied]}
-\def \@proceedings {[Unknown Proceedings]}
-
-
-\newcommand{\conferenceinfo}[2]{%
-  \gdef \@conferencename {#1}%
-  \gdef \@conferenceinfo {#2}}
-
-\newcommand{\copyrightyear}[1]{%
-  \gdef \@copyrightyear {#1}}
-
-\let \CopyrightYear = \copyrightyear
-
-\newcommand{\copyrightdata}[1]{%
-  \gdef \@copyrightdata {#1}}
-
-\let \crdata = \copyrightdata
-
-\newcommand{\proceedings}[1]{%
-  \gdef \@proceedings {#1}}
-
-%                       Lists
-%                       -----
-
-
-\setlength{\leftmargini}{13pt}
-\setlength\leftmarginii{13pt}
-\setlength\leftmarginiii{13pt}
-\setlength\leftmarginiv{13pt}
-\setlength{\labelsep}{3.5pt}
-
-\setlength{\topsep}{\standardvspace}
-\if \@blockstyle
-  \setlength{\itemsep}{1pt}
-  \setlength{\parsep}{3pt}
-\else
-  \setlength{\itemsep}{1pt}
-  \setlength{\parsep}{3pt}
-\fi
-
-\renewcommand{\labelitemi}{{\small \centeroncapheight{\textbullet}}}
-\renewcommand{\labelitemii}{\centeroncapheight{\rule{2.5pt}{2.5pt}}}
-\renewcommand{\labelitemiii}{$-$}
-\renewcommand{\labelitemiv}{{\Large \textperiodcentered}}
-
-\renewcommand{\@listi}{%
-  \leftmargin = \leftmargini
-  \listparindent = 0pt}
-%%%  \itemsep = 1pt
-%%%  \parsep = 3pt}
-%%%  \listparindent = \parindent}
-
-\let \@listI = \@listi
-
-\renewcommand{\@listii}{%
-  \leftmargin = \leftmarginii
-  \topsep = 1pt
-  \labelwidth = \leftmarginii
-  \advance \labelwidth by -\labelsep
-  \listparindent = \parindent}
-
-\renewcommand{\@listiii}{%
-  \leftmargin = \leftmarginiii
-  \labelwidth = \leftmarginiii
-  \advance \labelwidth by -\labelsep
-  \listparindent = \parindent}
-
-\renewcommand{\@listiv}{%
-  \leftmargin = \leftmarginiv
-  \labelwidth = \leftmarginiv
-  \advance \labelwidth by -\labelsep
-  \listparindent = \parindent}
-
-%                       Mathematics
-%                       -----------
-
-
-\def \theequation {\arabic{equation}}
-
-%                       Miscellaneous
-%                       -------------
-
-
-\newcommand{\balancecolumns}{%
-  \vfill\eject
-  \global\@colht = \textheight
-  \global\ht\@cclv = \textheight}
-
-\newcommand{\nut}{\hspace{.5em}}
-
-\newcommand{\softraggedright}{%
-  \let \\ = \@centercr
-  \leftskip = 0pt
-  \rightskip = 0pt plus 10pt}
-
-%                       Program Code
-%                       ------- ----
-
-
-\newcommand{\mono}[1]{%
-  {\@tempdima = \fontdimen2\font
-   \texttt{\spaceskip = 1.1\@tempdima #1}}}
-
-%                       Running Heads and Feet
-%                       ------- ----- --- ----
-
-
-\def \@preprintfooter {}
-
-\newcommand{\preprintfooter}[1]{%
-  \gdef \@preprintfooter {#1}}
-
-\if \@preprint
-
-\def \ps@plain {%
-  \let \@mkboth = \@gobbletwo
-  \let \@evenhead = \@empty
-  \def \@evenfoot {\scriptsize \textit{\@preprintfooter}\hfil \thepage \hfil
-                   \textit{\@formatyear}}%
-  \let \@oddhead = \@empty
-  \let \@oddfoot = \@evenfoot}
-
-\else\if \@reprint
-
-\def \ps@plain {%
-  \let \@mkboth = \@gobbletwo
-  \let \@evenhead = \@empty
-  \def \@evenfoot {\scriptsize \hfil \thepage \hfil}%
-  \let \@oddhead = \@empty
-  \let \@oddfoot = \@evenfoot}
-
-\else
-
-\let \ps@plain = \ps@empty
-\let \ps@headings = \ps@empty
-\let \ps@myheadings = \ps@empty
-
-\fi\fi
-
-\def \@formatyear {%
-  \number\year/\number\month/\number\day}
-
-%                       Special Characters
-%                       ------- ----------
-
-
-\DeclareRobustCommand{\euro}{%
-  \protect{\rlap{=}}{\sf \kern .1em C}}
-
-%                       Title Page
-%                       ----- ----
-
-
-\@setflag \@addauthorsdone = \@false
-
-\def \@titletext {\@latex@error{No title was provided}{}}
-\def \@subtitletext {}
-
-\newcount{\@authorcount}
-
-\newcount{\@titlenotecount}
-\newtoks{\@titlenotetext}
-
-\def \@titlebanner {}
-
-\renewcommand{\title}[1]{%
-  \gdef \@titletext {#1}}
-
-\newcommand{\subtitle}[1]{%
-  \gdef \@subtitletext {#1}}
-
-\newcommand{\authorinfo}[3]{%           {names}{affiliation}{email/URL}
-  \global\@increment \@authorcount
-  \@withname\gdef {\@authorname\romannumeral\@authorcount}{#1}%
-  \@withname\gdef {\@authoraffil\romannumeral\@authorcount}{#2}%
-  \@withname\gdef {\@authoremail\romannumeral\@authorcount}{#3}}
-
-\renewcommand{\author}[1]{%
-  \@latex@error{The \string\author\space command is obsolete;
-                use \string\authorinfo}{}}
-
-\newcommand{\titlebanner}[1]{%
-  \gdef \@titlebanner {#1}}
-
-\renewcommand{\maketitle}{%
-  \pagestyle{plain}%
-  \if \@onecolumn
-    {\hsize = \standardtextwidth
-     \@maketitle}%
-  \else
-    \twocolumn[\@maketitle]%
-  \fi
-  \@placetitlenotes
-  \if \@copyrightwanted \@copyrightspace \fi}
-
-\def \@maketitle {%
-  \begin{center}
-  \@settitlebanner
-  \let \thanks = \titlenote
-  \noindent \LARGE \bfseries \@titletext \par
-  \vskip 6pt
-  \noindent \Large \@subtitletext \par
-  \vskip 12pt
-  \ifcase \@authorcount
-    \@latex@error{No authors were specified for this paper}{}\or
-    \@titleauthors{i}{}{}\or
-    \@titleauthors{i}{ii}{}\or
-    \@titleauthors{i}{ii}{iii}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{}{}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
-                  \@titleauthors{vii}{}{}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
-                  \@titleauthors{vii}{viii}{}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
-                  \@titleauthors{vii}{viii}{ix}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
-                  \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{}{}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
-                  \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{}\or
-    \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
-                  \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{xii}%
-  \else
-    \@latex@error{Cannot handle more than 12 authors}{}%
-  \fi
-  \vspace{1.75pc}
-  \end{center}}
-
-\def \@settitlebanner {%
-  \if \@andp{\@preprint}{\@notp{\@emptydefp{\@titlebanner}}}%
-    \vbox to 0pt{%
-      \vskip -32pt
-      \noindent \textbf{\@titlebanner}\par
-      \vss}%
-    \nointerlineskip
-  \fi}
-
-\def \@titleauthors #1#2#3{%
-  \if \@andp{\@emptyargp{#2}}{\@emptyargp{#3}}%
-    \noindent \@setauthor{40pc}{#1}{\@false}\par
-  \else\if \@emptyargp{#3}%
-    \noindent \@setauthor{17pc}{#1}{\@false}\hspace{3pc}%
-              \@setauthor{17pc}{#2}{\@false}\par
-  \else
-    \noindent \@setauthor{12.5pc}{#1}{\@false}\hspace{2pc}%
-              \@setauthor{12.5pc}{#2}{\@false}\hspace{2pc}%
-              \@setauthor{12.5pc}{#3}{\@true}\par
-    \relax
-  \fi\fi
-  \vspace{20pt}}
-
-\def \@setauthor #1#2#3{%                       {width}{text}{unused}
-  \vtop{%
-    \def \and {%
-      \hspace{16pt}}
-    \hsize = #1
-    \normalfont
-    \centering
-    \large \@name{\@authorname#2}\par
-    \vspace{5pt}
-    \normalsize \@name{\@authoraffil#2}\par
-    \vspace{4pt}
-    \normalsize{\@name{\@authoremail#2}}\par}}
-
-\def \@maybetitlenote #1{%
-  \if \@andp{#1}{\@gtrp{\@authorcount}{3}}%
-    \titlenote{See page~\pageref{@addauthors} for additional authors.}%
-  \fi}
-
-\newtoks{\@fnmark}
-
-\newcommand{\titlenote}[1]{%
-  \global\@increment \@titlenotecount
-  \ifcase \@titlenotecount \relax \or
-    \@fnmark = {\ast}\or
-    \@fnmark = {\dagger}\or
-    \@fnmark = {\ddagger}\or
-    \@fnmark = {\S}\or
-    \@fnmark = {\P}\or
-    \@fnmark = {\ast\ast}%
-  \fi
-  \,$^{\the\@fnmark}$%
-  \edef \reserved@a {\noexpand\@appendtotext{%
-                       \noexpand\@titlefootnote{\the\@fnmark}}}%
-  \reserved@a{#1}}
-
-\def \@appendtotext #1#2{%
-  \global\@titlenotetext = \expandafter{\the\@titlenotetext #1{#2}}}
-
-\newcount{\@authori}
-
-\iffalse
-\def \additionalauthors {%
-  \if \@gtrp{\@authorcount}{3}%
-    \section{Additional Authors}%
-    \label{@addauthors}%
-    \noindent
-    \@authori = 4
-    {\let \\ = ,%
-     \loop 
-       \textbf{\@name{\@authorname\romannumeral\@authori}},
-       \@name{\@authoraffil\romannumeral\@authori},
-       email: \@name{\@authoremail\romannumeral\@authori}.%
-       \@increment \@authori
-     \if \@notp{\@gtrp{\@authori}{\@authorcount}} \repeat}%
-    \par
-  \fi
-  \global\@setflag \@addauthorsdone = \@true}
-\fi
-
-\let \addauthorsection = \additionalauthors
-
-\def \@placetitlenotes {
-  \the\@titlenotetext}
-
-%                       Utilities
-%                       ---------
-
-
-\newcommand{\centeroncapheight}[1]{%
-  {\setbox\@tempboxa = \hbox{#1}%
-   \@measurecapheight{\@tempdima}%         % Calculate ht(CAP) - ht(text)
-   \advance \@tempdima by -\ht\@tempboxa   %           ------------------
-   \divide \@tempdima by 2                 %                   2
-   \raise \@tempdima \box\@tempboxa}}
-
-\newbox{\@measbox}
-
-\def \@measurecapheight #1{%                            {\dimen}
-  \setbox\@measbox = \hbox{ABCDEFGHIJKLMNOPQRSTUVWXYZ}%
-  #1 = \ht\@measbox}
-
-\long\def \@titlefootnote #1#2{%
-  \insert\footins{%
-    \reset@font\footnotesize
-    \interlinepenalty\interfootnotelinepenalty
-    \splittopskip\footnotesep
-    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-    \hsize\columnwidth \@parboxrestore
-%%%    \protected@edef\@currentlabel{%
-%%%       \csname p@footnote\endcsname\@thefnmark}%
-    \color@begingroup
-      \def \@makefnmark {$^{#1}$}%
-      \@makefntext{%
-        \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox}%
-    \color@endgroup}}
-
-%                       LaTeX Modifications
-%                       ----- -------------
-
-\def \@seccntformat #1{%
-  \@name{\the#1}%
-  \@expandaftertwice\@seccntformata \csname the#1\endcsname.\@mark
-  \quad}
-
-\def \@seccntformata #1.#2\@mark{%
-  \if \@emptyargp{#2}.\fi}
-
-%                       Revision History
-%                       -------- -------
-
-
-%  Date         Person  Ver.    Change
-%  ----         ------  ----    ------
-
-%  2004.09.12   PCA     0.1--5  Preliminary development.
-
-%  2004.11.18   PCA     0.5     Start beta testing.
-
-%  2004.11.19   PCA     0.6     Obsolete \author and replace with
-%                               \authorinfo.
-%                               Add 'nocopyrightspace' option.
-%                               Compress article opener spacing.
-%                               Add 'mathtime' option.
-%                               Increase text height by 6 points.
-
-%  2004.11.28   PCA     0.7     Add 'cm/computermodern' options.
-%                               Change default to Times text.
-
-%  2004.12.14   PCA     0.8     Remove use of mathptm.sty; it cannot
-%                               coexist with latexsym or amssymb.
-
-%  2005.01.20   PCA     0.9     Rename class file to sigplanconf.cls.
-
-%  2005.03.05   PCA     0.91    Change default copyright data.
-
-%  2005.03.06   PCA     0.92    Add at-signs to some macro names.
-
-%  2005.03.07   PCA     0.93    The 'onecolumn' option defaults to '11pt',
-%                               and it uses the full type width.
-
-%  2005.03.15   PCA     0.94    Add at-signs to more macro names.
-%                               Allow margin paragraphs during review.
-
-%  2005.03.22   PCA     0.95    Implement \euro.
-%                               Remove proof and newdef environments.
-
-%  2005.05.06   PCA     1.0     Eliminate 'onecolumn' option.
-%                               Change footer to small italic and eliminate
-%                               left portion if no \preprintfooter.
-%                               Eliminate copyright notice if preprint.
-%                               Clean up and shrink copyright box.
-
-%  2005.05.30   PCA     1.1     Add alternate permission statements.
-
-%  2005.06.29   PCA     1.1     Publish final first edition of guide.
-
-%  2005.07.14   PCA     1.2     Add \subparagraph.
-%                               Use block paragraphs in lists, and adjust
-%                               spacing between items and paragraphs.
-
-%  2006.06.22   PCA     1.3     Add 'reprint' option and associated
-%                               commands.
-
-%  2006.08.24   PCA     1.4     Fix bug in \maketitle case command.
-
-%  2007.03.13   PCA     1.5     The title banner only display with the
-%                               'preprint' option.
\ No newline at end of file
diff --git a/doc/thrift.pdf b/doc/thrift.pdf
deleted file mode 100644
index a9eb35a..0000000
--- a/doc/thrift.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/thrift.tex b/doc/thrift.tex
index 17766b5..082be62 100644
--- a/doc/thrift.tex
+++ b/doc/thrift.tex
@@ -8,6 +8,9 @@
 %
 % Created:      05 March 2007
 %
+% You will need a copy of sigplanconf.cls to format this document.
+% It is available at <http://www.sigplan.org/authorInformation.htm>.
+%
 %-----------------------------------------------------------------------------
 
 
