Browse Source

moved papers out

Juan Batiz-Benet 10 years ago
parent
commit
208df8daa4

+ 3 - 0
papers/README.md

@@ -0,0 +1,3 @@
+# papers
+
+These papers have moved to: https://github.com/ipfs/papers

+ 0 - 25
papers/ipfs-cap2pfs/Makefile

@@ -1,25 +0,0 @@
-
-SHORT=ipfs-cap2pfs
-LONG=ipfs-p2p-file-system
-
-all: $(LONG).pdf
-
-$(LONG).pdf: $(SHORT).tex sig-alternate.cls $(SHORT).bib
-	pdflatex $(SHORT).tex
-	bibtex $(SHORT)
-	pdflatex $(SHORT).tex
-	pdflatex $(SHORT).tex
-	mv $(SHORT).pdf $(LONG).pdf
-
-clean:
-	rm *.bbl *.aux *.dvi *.blg *.log *.gnuplot *.table
-
-watch:
-	-make
-	@echo "[watching *.tex for recompilation]"
-	# for portability, use watchmedo -- pip install watchmedo
-	@watchmedo shell-command --patterns="*.tex;" --recursive \
-		--command='make' .
-
-publish: $(LONG).pdf
-	scp $(LONG).pdf benet.ai:/var/static/t/$(LONG).pdf

+ 0 - 1670
papers/ipfs-cap2pfs/acm-article.cls

@@ -1,1670 +0,0 @@
-% ACM_PROC_ARTICLE-SP.CLS - VERSION 3.2SP
-% COMPATIBLE WITH THE "SIG-ALTERNATE" V2.4
-% Gerald Murray - April 22nd. 2009
-%
-% ---- Start of 'updates'  ----
-%
-% April 22nd. 2009 - Fixed 'Natbib' incompatibility problem - Gerry
-% April 22nd. 2009 - Fixed 'Babel' incompatibility problem - Gerry
-% April 22nd. 2009 - Inserted various bug-fixes and improvements - Gerry
-%
-% To produce Type 1 fonts in the document plus allow for 'normal LaTeX accenting' in the critical areas;
-% title, author block, section-heads, etc. etc. 
-% i.e. the whole purpose of this version update is to NOT resort to 'inelegant accent patches'.
-% After much research, three extra .sty packages were added to the the tail (ae, aecompl, aeguill) to solve,
-% in particular, the accenting problem(s). We _could_ ask authors (via instructions/sample file) to 'include' these in
-% the source .tex file - in the preamble - but if everything is already provided ('behind the scenes' - embedded IN the .cls)
-% then this is less work for authors and also makes everything appear 'vanilla'.
-% NOTE: all 'patchwork accenting" has been commented out (here) and is no longer 'used' in the sample .tex file (either).
-% Gerry June 2007
-%
-% Rule widths changed to .5, author count (>6) fixed, roll-back for Type 3 problem. Gerry March 20th. 2007
-% Changes made to 'modernize' the fontnames but esp. for MikTeX users V2.4/2.5 - Nov. 30th. 2006
-% Updated the \email definition to allow for its use inside of 'shared affiliations' - Nov. 30th. 2006
-% Fixed the 'section number depth value' - Nov. 30th. 2006
-%
-% Footnotes inside table cells using \minipage (Oct. 2002)
-% Georgia fixed bug in sub-sub-section numbering in paragraphs (July 29th. 2002)
-% JS/GM fix to vertical spacing before Proofs (July 30th. 2002)
-%
-% Allowance made to switch default fonts between those systems using
-% normal/modern font names and those using 'Type 1' or 'Truetype' fonts.
-% See LINE NUMBER 269 for details.
-% Also provided for enumerated/annotated Corollaries 'surrounded' by
-% enumerated Theorems (line 844).
-% Gerry November 11th. 1999
-%
-% This 'sp' version does NOT produce the permission block.
-%
-% Major change in January 2000 was to include a "blank line" in between
-% new paragraphs. This involved major changes to the, then, acmproc-sp.cls  1.0SP
-% file, precipitating a 'new' name: "acm_proc_article-sp.cls" V2.01SP.
-%
-% ---- End of 'updates' ----
-%
-\def\fileversion{V3.2SP}         % for ACM's tracking purposes
-\def\filedate{April 22, 2009}    % Gerry Murray's tracking data
-\def\docdate {Wednesday 22nd. April 2009} % Gerry Murray (with deltas to doc}
-\usepackage{epsfig}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{amsfonts}
-% Need this for accents in Arial/Helvetica
-%\usepackage[T1]{fontenc}  % Gerry March 12, 2007 - causes Type 3 problems (body text)
-%\usepackage{textcomp}
-%
-% ACM_PROC_ARTICLE-SP  DOCUMENT STYLE
-% G.K.M. Tobin August-October 1999
-%    adapted from ARTICLE document style by Ken Traub, Olin Shivers
-%    also using elements of esub2acm.cls
-% LATEST REVISION V3.2SP - APRIL 2009
-% ARTICLE DOCUMENT STYLE -- Released 16 March 1988
-%    for LaTeX version 2.09
-% Copyright (C) 1988 by Leslie Lamport
-%
-%
-%%% ACM_PROC_ARTICLE-SP is a document style for producing two-column camera-ready pages for
-%%% ACM conferences, according to ACM specifications.  The main features of
-%%% this style are:
-%%%
-%%% 1)  Two columns.
-%%% 2)  Side and top margins of 4.5pc, bottom margin of 6pc, column gutter of
-%%%     2pc, hence columns are 20pc wide and 55.5pc tall.  (6pc =3D 1in, approx)
-%%% 3)  First page has title information, and an extra 6pc of space at the
-%%%     bottom of the first column for the ACM copyright notice.
-%%% 4)  Text is 9pt on 10pt baselines; titles (except main) are 9pt bold.
-%%%
-%%%
-%%% There are a few restrictions you must observe:
-%%%
-%%% 1)  You cannot change the font size; ACM wants you to use 9pt.
-%%% 3)  You must start your paper with the \maketitle command.  Prior to the
-%%%     \maketitle you must have \title and \author commands.  If you have a
-%%%     \date command it will be ignored; no date appears on the paper, since
-%%%     the proceedings will have a date on the front cover.
-%%% 4)  Marginal paragraphs, tables of contents, lists of figures and tables,
-%%%     and page headings are all forbidden.
-%%% 5)  The `figure' environment will produce a figure one column wide; if you
-%%%     want one that is two columns wide, use `figure*'.
-%%%
-%
-%%% Copyright Space:
-%%% This style automatically leaves 1" blank space at the bottom of page 1/
-%%% column 1.  This space can optionally be filled with some text using the
-%%% \toappear{...} command.  If used, this command must be BEFORE the \maketitle
-%%% command.  If this command is defined AND [preprint] is on, then the
-%%% space is filled with the {...} text (at the bottom); otherwise, it is
-%%% blank.  If you use \toappearbox{...} instead of \toappear{...} then a
-%%% box will be drawn around the text (if [preprint] is on).
-%%%
-%%% A typical usage looks like this:
-%%%     \toappear{To appear in the Ninth AES Conference on Medievil Lithuanian
-%%%               Embalming Technique, June 1991, Alfaretta, Georgia.}
-%%% This will be included in the preprint, and left out of the conference
-%%% version.
-%%%
-%%% WARNING:
-%%% Some dvi-ps converters heuristically allow chars to drift from their
-%%% true positions a few pixels. This may be noticeable with the 9pt sans-serif
-%%% bold font used for section headers.
-%%% You may turn this hackery off via the -e option:
-%%%     dvips -e 0 foo.dvi >foo.ps
-%%%
-\typeout{Document Class 'acm_proc_article-sp' <22nd. April '09>.  Modified by G.K.M. Tobin}
-\typeout{Based in part upon document Style `acmconf' <22 May 89>. Hacked 4/91 by}
-\typeout{shivers@cs.cmu.edu, 4/93 by theobald@cs.mcgill.ca}
-\typeout{Excerpts were taken from (Journal Style) 'esub2acm.cls'.}
-\typeout{****** Bugs/comments/suggestions  to Gerry Murray -- murray@hq.acm.org ******}
-
-\oddsidemargin 4.5pc
-\evensidemargin 4.5pc
-\advance\oddsidemargin by -1in  % Correct for LaTeX gratuitousness
-\advance\evensidemargin by -1in % Correct for LaTeX gratuitousness
-\marginparwidth 0pt             % Margin pars are not allowed.
-\marginparsep 11pt              % Horizontal space between outer margin and
-                                % marginal note
-
-                                % Top of page:
-\topmargin 4.5pc                % Nominal distance from top of page to top of
-                                % box containing running head.
-\advance\topmargin by -1in      % Correct for LaTeX gratuitousness
-\headheight 0pt                 % Height of box containing running head.
-\headsep 0pt                    % Space between running head and text.
-                                % Bottom of page:
-\footskip 30pt                  % Distance from baseline of box containing foot
-                                % to baseline of last line of text.
-\@ifundefined{footheight}{\newdimen\footheight}{}% this is for LaTeX2e
-\footheight 12pt                % Height of box containing running foot.
-
-
-%% Must redefine the top margin so there's room for headers and
-%% page numbers if you are using the preprint option. Footers
-%% are OK as is. Olin.
-\advance\topmargin by -37pt     % Leave 37pt above text for headers
-\headheight 12pt                % Height of box containing running head.
-\headsep 25pt                   % Space between running head and text.
-
-\textheight 666pt       % 9 1/4 column height
-\textwidth 42pc         % Width of text line.
-                        % For two-column mode:
-\columnsep 2pc          %    Space between columns
-\columnseprule 0pt      %    Width of rule between columns.
-\hfuzz 1pt              % Allow some variation in column width, otherwise it's
-                        % too hard to typeset in narrow columns.
-
-\footnotesep 5.6pt      % Height of strut placed at the beginning of every
-                        % footnote =3D height of normal \footnotesize strut,
-                        % so no extra space between footnotes.
-
-\skip\footins 8.1pt plus 4pt minus 2pt  % Space between last line of text and
-                                        % top of first footnote.
-\floatsep 11pt plus 2pt minus 2pt       % Space between adjacent floats moved
-                                        % to top or bottom of text page.
-\textfloatsep 18pt plus 2pt minus 4pt   % Space between main text and floats
-                                        % at top or bottom of page.
-\intextsep 11pt plus 2pt minus 2pt      % Space between in-text figures and
-                                        % text.
-\@ifundefined{@maxsep}{\newdimen\@maxsep}{}% this is for LaTeX2e
-\@maxsep 18pt                           % The maximum of \floatsep,
-                                        % \textfloatsep and \intextsep (minus
-                                        % the stretch and shrink).
-\dblfloatsep 11pt plus 2pt minus 2pt    % Same as \floatsep for double-column
-                                        % figures in two-column mode.
-\dbltextfloatsep 18pt plus 2pt minus 4pt% \textfloatsep for double-column
-                                        % floats.
-\@ifundefined{@dblmaxsep}{\newdimen\@dblmaxsep}{}% this is for LaTeX2e
-\@dblmaxsep 18pt                        % The maximum of \dblfloatsep and
-                                        % \dbltexfloatsep.
-\@fptop 0pt plus 1fil    % Stretch at top of float page/column. (Must be
-                         % 0pt plus ...)
-\@fpsep 8pt plus 2fil    % Space between floats on float page/column.
-\@fpbot 0pt plus 1fil    % Stretch at bottom of float page/column. (Must be
-                         % 0pt plus ... )
-\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
-\@dblfpsep 8pt plus 2fil % Space between floats on float page.
-\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
-                         % 0pt plus ... )
-\marginparpush 5pt       % Minimum vertical separation between two marginal
-                         % notes.
-
-\parskip 0pt                % Extra vertical space between paragraphs.
-                    % Set to 0pt outside sections, to keep section heads
-                    % uniformly spaced.  The value of parskip is set
-                    % to leading value _within_ sections.
-                    % 12 Jan 2000 gkmt
-\parindent 0pt                % Width of paragraph indentation.
-\partopsep 2pt plus 1pt minus 1pt% Extra vertical space, in addition to
-                                 % \parskip and \topsep, added when user
-                                 % leaves blank line before environment.
-
-\@lowpenalty   51       % Produced by \nopagebreak[1] or \nolinebreak[1]
-\@medpenalty  151       % Produced by \nopagebreak[2] or \nolinebreak[2]
-\@highpenalty 301       % Produced by \nopagebreak[3] or \nolinebreak[3]
-
-\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
-\@endparpenalty   -\@lowpenalty % After a list or paragraph environment.
-\@itempenalty     -\@lowpenalty % Between list items.
-
-%\@namedef{ds@10pt}{\@latexerr{The `10pt' option is not allowed in the `acmconf'
-\@namedef{ds@10pt}{\ClassError{The `10pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-%\@namedef{ds@11pt}{\@latexerr{The `11pt' option is not allowed in the `acmconf'
-\@namedef{ds@11pt}{\ClassError{The `11pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-%\@namedef{ds@12pt}{\@latexerr{The `12pt' option is not allowed in the `acmconf'
-\@namedef{ds@12pt}{\ClassError{The `12pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-
-\@options
-
-\lineskip 2pt           % \lineskip is 1pt for all font sizes.
-\normallineskip 2pt
-\def\baselinestretch{1}
-
-\abovedisplayskip 9pt plus2pt minus4.5pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip  \z@ plus3pt%
-\belowdisplayshortskip  5.4pt plus3pt minus3pt%
-\let\@listi\@listI     % Setting of \@listi added 9 Jun 87
-
-\def\small{\@setsize\small{9pt}\viiipt\@viiipt
-\abovedisplayskip 7.6pt plus 3pt minus 4pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip \z@ plus2pt%
-\belowdisplayshortskip 3.6pt plus2pt minus 2pt
-\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
-\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
-\itemsep \parsep}}
-
-\def\footnotesize{\@setsize\footnotesize{9pt}\ixpt\@ixpt
-\abovedisplayskip 6.4pt plus 2pt minus 4pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip \z@ plus 1pt%
-\belowdisplayshortskip 2.7pt plus 1pt minus 2pt
-\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
-\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
-\itemsep \parsep}}
-
-\newcount\aucount
-\newcount\originalaucount
-\newdimen\auwidth
-\auwidth=\textwidth
-\newdimen\auskip
-\newcount\auskipcount
-\newdimen\auskip
-\global\auskip=1pc
-\newdimen\allauboxes
-\allauboxes=\auwidth
-\newtoks\addauthors
-\newcount\addauflag
-\global\addauflag=0 %Haven't shown additional authors yet
-
-\newtoks\subtitletext
-\gdef\subtitle#1{\subtitletext={#1}}
-
-\gdef\additionalauthors#1{\addauthors={#1}}
-
-\gdef\numberofauthors#1{\global\aucount=#1
-\ifnum\aucount>3\global\originalaucount=\aucount \global\aucount=3\fi %g}  % 3 OK - Gerry March 2007
-\global\auskipcount=\aucount\global\advance\auskipcount by 1
-\global\multiply\auskipcount by 2
-\global\multiply\auskip by \auskipcount
-\global\advance\auwidth by -\auskip
-\global\divide\auwidth by \aucount}
-
-% \and was modified to count the number of authors.  GKMT 12 Aug 1999
-\def\alignauthor{%                  % \begin{tabular}
-\end{tabular}%
-  \begin{tabular}[t]{p{\auwidth}}\centering}%
-
-
-%  *** NOTE *** NOTE *** NOTE *** NOTE ***
-%  If you have 'font problems' then you may need
-%  to change these, e.g. 'arialb' instead of "arialbd".
-%  Gerry Murray 11/11/1999
-%  *** OR ** comment out block A and activate block B or vice versa.
-% **********************************************
-%
-%  -- Start of block A -- (Type 1 or Truetype fonts)
-%\newfont{\secfnt}{timesbd at 12pt} % was timenrb originally - now is timesbd
-%\newfont{\secit}{timesbi at 12pt}   %13 Jan 00 gkmt
-%\newfont{\subsecfnt}{timesi at 11pt} % was timenrri originally - now is timesi
-%\newfont{\subsecit}{timesbi at 11pt} % 13 Jan 00 gkmt -- was times changed to timesbi gm 2/4/2000
-%                         % because "normal" is italic, "italic" is Roman
-%\newfont{\ttlfnt}{arialbd at 18pt} % was arialb originally - now is arialbd
-%\newfont{\ttlit}{arialbi at 18pt}    % 13 Jan 00 gkmt
-%\newfont{\subttlfnt}{arial at 14pt} % was arialr originally - now is arial
-%\newfont{\subttlit}{ariali at 14pt} % 13 Jan 00 gkmt
-%\newfont{\subttlbf}{arialbd at 14pt}  % 13 Jan 00 gkmt
-%\newfont{\aufnt}{arial at 12pt} % was arialr originally - now is arial
-%\newfont{\auit}{ariali at 12pt} % 13 Jan 00 gkmt
-%\newfont{\affaddr}{arial at 10pt} % was arialr originally - now is arial
-%\newfont{\affaddrit}{ariali at 10pt} %13 Jan 00 gkmt
-%\newfont{\eaddfnt}{arial at 12pt} % was arialr originally - now is arial
-%\newfont{\ixpt}{times at 9pt} % was timenrr originally - now is times
-%\newfont{\confname}{timesi at 8pt} % was timenrri - now is timesi
-%\newfont{\crnotice}{times at 8pt} % was timenrr originally - now is times
-%\newfont{\ninept}{times at 9pt} % was timenrr originally - now is times
-% *********************************************
-%  -- End of block A --
-%
-%
-% -- Start of block B -- UPDATED FONT NAMES
-% *********************************************
-% Gerry Murray 11/30/2006
-% *********************************************
-\newfont{\secfnt}{ptmb8t at 12pt}
-\newfont{\secit}{ptmbi8t at 12pt}    %13 Jan 00 gkmt
-\newfont{\subsecfnt}{ptmri8t at 11pt}
-\newfont{\subsecit}{ptmbi8t at 11pt}  % 
-\newfont{\ttlfnt}{phvb8t at 18pt}
-\newfont{\ttlit}{phvbo8t at 18pt}    % GM 2/4/2000
-\newfont{\subttlfnt}{phvr8t at 14pt}
-\newfont{\subttlit}{phvro8t at 14pt} % GM 2/4/2000
-\newfont{\subttlbf}{phvb8t at 14pt}  % 13 Jan 00 gkmt
-\newfont{\aufnt}{phvr8t at 12pt}
-\newfont{\auit}{phvro8t at 12pt}     % GM 2/4/2000
-\newfont{\affaddr}{phvr8t at 10pt}
-\newfont{\affaddrit}{phvro8t at 10pt} % GM 2/4/2000
-\newfont{\eaddfnt}{phvr8t at 12pt}
-\newfont{\ixpt}{ptmr8t at 9pt}
-\newfont{\confname}{ptmri8t at 8pt}
-\newfont{\crnotice}{ptmr8t at 8pt}
-\newfont{\ninept}{ptmr8t at 9pt}
-% +++++++++++++++++++++++++++++++++++++++++++++
-% -- End of block B --
-
-%\def\email#1{{{\eaddfnt{\vskip 4pt#1}}}}
-% If we have an email, inside a "shared affiliation" then we need the following instead
-\def\email#1{{{\eaddfnt{\par #1}}}}       % revised  - GM - 11/30/2006
-
-\def\addauthorsection{\ifnum\originalaucount>6  % was 3 - Gerry March 2007
-    \section{Additional Authors}\the\addauthors
-  \fi}
-
-\newcount\savesection
-\newcount\sectioncntr
-\global\sectioncntr=1
-
-\setcounter{secnumdepth}{3}
-
-\def\appendix{\par
-\section*{APPENDIX}
-\setcounter{section}{0}
- \setcounter{subsection}{0}
- \def\thesection{\Alph{section}} }
-
-
-\leftmargini 22.5pt
-\leftmarginii 19.8pt    % > \labelsep + width of '(m)'
-\leftmarginiii 16.8pt   % > \labelsep + width of 'vii.'
-\leftmarginiv 15.3pt    % > \labelsep + width of 'M.'
-\leftmarginv 9pt
-\leftmarginvi 9pt
-
-\leftmargin\leftmargini
-\labelsep 4.5pt
-\labelwidth\leftmargini\advance\labelwidth-\labelsep
-
-\def\@listI{\leftmargin\leftmargini \parsep 3.6pt plus 2pt minus 1pt%
-\topsep 7.2pt plus 2pt minus 4pt%
-\itemsep 3.6pt plus 2pt minus 1pt}
-
-\let\@listi\@listI
-\@listi
-
-\def\@listii{\leftmargin\leftmarginii
-   \labelwidth\leftmarginii\advance\labelwidth-\labelsep
-   \topsep 3.6pt plus 2pt minus 1pt
-   \parsep 1.8pt plus 0.9pt minus 0.9pt
-   \itemsep \parsep}
-
-\def\@listiii{\leftmargin\leftmarginiii
-    \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
-    \topsep 1.8pt plus 0.9pt minus 0.9pt
-    \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
-    \itemsep \topsep}
-
-\def\@listiv{\leftmargin\leftmarginiv
-     \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
-
-\def\@listv{\leftmargin\leftmarginv
-     \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
-
-\def\@listvi{\leftmargin\leftmarginvi
-     \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
-
-\def\labelenumi{\theenumi.}
-\def\theenumi{\arabic{enumi}}
-
-\def\labelenumii{(\theenumii)}
-\def\theenumii{\alph{enumii}}
-\def\p@enumii{\theenumi}
-
-\def\labelenumiii{\theenumiii.}
-\def\theenumiii{\roman{enumiii}}
-\def\p@enumiii{\theenumi(\theenumii)}
-
-\def\labelenumiv{\theenumiv.}
-\def\theenumiv{\Alph{enumiv}}
-\def\p@enumiv{\p@enumiii\theenumiii}
-
-\def\labelitemi{$\bullet$}
-\def\labelitemii{\bf --}
-\def\labelitemiii{$\ast$}
-\def\labelitemiv{$\cdot$}
-
-\def\verse{\let\\=\@centercr
-  \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
-          \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
-\let\endverse\endlist
-
-\def\quotation{\list{}{\listparindent 1.5em
-    \itemindent\listparindent
-    \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
-\let\endquotation=\endlist
-
-\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
-\let\endquote=\endlist
-
-\def\descriptionlabel#1{\hspace\labelsep \bf #1}
-\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
-       \let\makelabel\descriptionlabel}}
-
-\let\enddescription\endlist
-
-\def\theequation{\arabic{equation}}
-
-\arraycolsep 4.5pt   % Half the space between columns in an array environment.
-\tabcolsep 5.4pt     % Half the space between columns in a tabular environment.
-\arrayrulewidth .5pt % Width of rules in array and tabular environment. % (was .4) updated Gerry March 20 2007
-\doublerulesep 1.8pt % Space between adjacent rules in array or tabular env.
-
-\tabbingsep \labelsep   % Space used by the \' command.  (See LaTeX manual.)
-
-\skip\@mpfootins =\skip\footins
-
-\fboxsep =2.7pt      % Space left between box and text by \fbox and \framebox.
-\fboxrule =.5pt      % Width of rules in box made by \fbox and \framebox. % (was .4) updated Gerry March 20 2007
-
-\def\thepart{\Roman{part}} % Roman numeral part numbers.
-\def\thesection       {\arabic{section}}
-\def\thesubsection    {\thesection.\arabic{subsection}}
-%\def\thesubsubsection {\thesubsection.\arabic{subsubsection}} % GM 7/30/2002
-%\def\theparagraph     {\thesubsubsection.\arabic{paragraph}}  % GM 7/30/2002
-\def\thesubparagraph  {\theparagraph.\arabic{subparagraph}}
-
-\def\@pnumwidth{1.55em}
-\def\@tocrmarg {2.55em}
-\def\@dotsep{4.5}
-\setcounter{tocdepth}{3}
-
-%\def\tableofcontents{\@latexerr{\tableofcontents: Tables of contents are not
-%  allowed in the `acmconf' document style.}\@eha}
-
-\def\tableofcontents{\ClassError{%
-    \string\tableofcontents\space is not allowed in the `acmconf' document	% January 2008
-    style}\@eha}
-
-\def\l@part#1#2{\addpenalty{\@secpenalty}
-   \addvspace{2.25em plus 1pt}  % space above part line
-   \begingroup
-   \@tempdima 3em       % width of box holding part number, used by
-     \parindent \z@ \rightskip \@pnumwidth      %% \numberline
-     \parfillskip -\@pnumwidth
-     {\large \bf        % set line in \large boldface
-     \leavevmode        % TeX command to enter horizontal mode.
-     #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
-     \nobreak           % Never break after part entry
-   \endgroup}
-
-\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
-   \addvspace{1.0em plus 1pt}   % space above toc entry
-   \@tempdima 1.5em             % width of box holding section number
-   \begingroup
-     \parindent \z@ \rightskip \@pnumwidth
-     \parfillskip -\@pnumwidth
-     \bf                        % Boldface.
-     \leavevmode                % TeX command to enter horizontal mode.
-      \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
-      \hskip -\leftskip           %% 25 Jan 88 change to \numberline
-     #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
-   \endgroup}
-
-
-\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
-\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
-\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
-\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
-
-%\def\listoffigures{\@latexerr{\listoffigures: Lists of figures are not
-%  allowed in the `acmconf' document style.}\@eha}
-
-\def\listoffigures{\ClassError{%
-    \string\listoffigures\space is not allowed in the `acmconf' document	% January 2008
-    style}\@eha}
-
-\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
-
-%\def\listoftables{\@latexerr{\listoftables: Lists of tables are not
-%  allowed in the `acmconf' document style.}\@eha}
-%\let\l@table\l@figure
-
-\def\listoftables{\ClassError{%
-    \string\listoftables\space is not allowed in the `acmconf' document		% January 2008
-    style}\@eha}
- \let\l@table\l@figure
-
-\def\footnoterule{\kern-3\p@
-  \hrule width .5\columnwidth   % (was .4) updated Gerry March 20 2007
-  \kern 2.6\p@}                 % The \hrule has default height of .4pt % (was .4) updated Gerry March 20 2007
-% ------
-\long\def\@makefntext#1{\noindent 
-%\hbox to .5em{\hss$^{\@thefnmark}$}#1}   % original
-\hbox to .5em{\hss\textsuperscript{\@thefnmark}}#1}  % C. Clifton / GM Oct. 2nd. 2002
-% -------
-
-\long\def\@maketntext#1{\noindent
-#1}
-
-\long\def\@maketitlenotetext#1#2{\noindent
-            \hbox to 1.8em{\hss$^{#1}$}#2}
-
-\setcounter{topnumber}{2}
-\def\topfraction{.7}
-\setcounter{bottomnumber}{1}
-\def\bottomfraction{.3}
-\setcounter{totalnumber}{3}
-\def\textfraction{.2}
-\def\floatpagefraction{.5}
-\setcounter{dbltopnumber}{2}
-\def\dbltopfraction{.7}
-\def\dblfloatpagefraction{.5}
-
-\long\def\@makecaption#1#2{
-   \vskip \baselineskip
-   \setbox\@tempboxa\hbox{\textbf{#1: #2}}
-   \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
-       \textbf{#1: #2}\par               %   THEN set as ordinary paragraph.
-     \else                      %   ELSE  center.
-       \hbox to\hsize{\hfil\box\@tempboxa\hfil}\par
-   \fi}
-
-\@ifundefined{figure}{\newcounter {figure}} % this is for LaTeX2e
-
-\def\fps@figure{tbp}
-\def\ftype@figure{1}
-\def\ext@figure{lof}
-\def\fnum@figure{Figure \thefigure}
-\def\figure{\@float{figure}}
-%\let\endfigure\end@float
-\def\endfigure{\end@float} 		% Gerry January 2008
-\@namedef{figure*}{\@dblfloat{figure}}
-\@namedef{endfigure*}{\end@dblfloat}
-
-\@ifundefined{table}{\newcounter {table}} % this is for LaTeX2e
-
-\def\fps@table{tbp}
-\def\ftype@table{2}
-\def\ext@table{lot}
-\def\fnum@table{Table \thetable}
-\def\table{\@float{table}}
-%\let\endtable\end@float
-\def\endtable{\end@float}		% Gerry January 2008
-\@namedef{table*}{\@dblfloat{table}}
-\@namedef{endtable*}{\end@dblfloat}
-
-\newtoks\titleboxnotes
-\newcount\titleboxnoteflag
-
-\def\maketitle{\par
- \begingroup
-   \def\thefootnote{\fnsymbol{footnote}}
-   \def\@makefnmark{\hbox
-       to 0pt{$^{\@thefnmark}$\hss}}
-     \twocolumn[\@maketitle]
-\@thanks
- \endgroup
- \setcounter{footnote}{0}
- \let\maketitle\relax
- \let\@maketitle\relax
- \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}\let\thanks\relax
- \@copyrightspace}
-
-%% CHANGES ON NEXT LINES
-\newif\if@ll % to record which version of LaTeX is in use
-
-\expandafter\ifx\csname LaTeXe\endcsname\relax % LaTeX2.09 is used
-\else% LaTeX2e is used, so set ll to true
-\global\@lltrue
-\fi
-
-\if@ll
-  \NeedsTeXFormat{LaTeX2e}
-  \ProvidesClass{acm_proc_article-sp} [2009/04/22 - V3.2SP - based on esub2acm.sty <23 April 96>]
-  \RequirePackage{latexsym}% QUERY: are these two really needed?
-  \let\dooptions\ProcessOptions
-\else
-  \let\dooptions\@options
-\fi
-%% END CHANGES
-
-\def\@height{height}
-\def\@width{width}
-\def\@minus{minus}
-\def\@plus{plus}
-\def\hb@xt@{\hbox to}
-\newif\if@faircopy
-\@faircopyfalse
-\def\ds@faircopy{\@faircopytrue}
-
-\def\ds@preprint{\@faircopyfalse}
-
-\@twosidetrue
-\@mparswitchtrue
-\def\ds@draft{\overfullrule 5\p@}
-%% CHANGE ON NEXT LINE
-\dooptions
-
-\lineskip \p@
-\normallineskip \p@
-\def\baselinestretch{1}
-\def\@ptsize{0} %needed for amssymbols.sty
-
-%% CHANGES ON NEXT LINES
-\if@ll% allow use of old-style font change commands in LaTeX2e
-\@maxdepth\maxdepth
-%
-\DeclareOldFontCommand{\rm}{\ninept\rmfamily}{\mathrm}
-\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
-\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
-\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
-\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
-\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
-\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
-\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
-\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
-\fi
-%
-\if@ll
- \renewcommand{\rmdefault}{cmr}  % was 'ttm'
-% Note! I have also found 'mvr' to work ESPECIALLY well.
-% Gerry - October 1999
-% You may need to change your LV1times.fd file so that sc is
-% mapped to cmcsc - -for smallcaps -- that is if you decide
-% to change {cmr} to {times} above. (Not recommended)
-  \renewcommand{\@ptsize}{}
-  \renewcommand{\normalsize}{%
-    \@setfontsize\normalsize\@ixpt{10.5\p@}%\ninept%
-    \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
-    \belowdisplayskip \abovedisplayskip
-    \abovedisplayshortskip 6\p@ \@minus 3\p@
-    \belowdisplayshortskip 6\p@ \@minus 3\p@
-    \let\@listi\@listI
-  }
-\else
-  \def\@normalsize{%changed next to 9 from 10
-    \@setsize\normalsize{9\p@}\ixpt\@ixpt
-   \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
-    \belowdisplayskip \abovedisplayskip
-    \abovedisplayshortskip 6\p@ \@minus 3\p@
-    \belowdisplayshortskip 6\p@ \@minus 3\p@
-    \let\@listi\@listI
-  }%
-\fi
-\if@ll
-  \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt{8\p@}}
-  \newcommand\tiny{\@setfontsize\tiny\@vpt{6\p@}}
-  \newcommand\large{\@setfontsize\large\@xiipt{14\p@}}
-  \newcommand\Large{\@setfontsize\Large\@xivpt{18\p@}}
-  \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20\p@}}
-  \newcommand\huge{\@setfontsize\huge\@xxpt{25\p@}}
-  \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30\p@}}
-\else
-  \def\scriptsize{\@setsize\scriptsize{8\p@}\viipt\@viipt}
-  \def\tiny{\@setsize\tiny{6\p@}\vpt\@vpt}
-  \def\large{\@setsize\large{14\p@}\xiipt\@xiipt}
-  \def\Large{\@setsize\Large{18\p@}\xivpt\@xivpt}
-  \def\LARGE{\@setsize\LARGE{20\p@}\xviipt\@xviipt}
-  \def\huge{\@setsize\huge{25\p@}\xxpt\@xxpt}
-  \def\Huge{\@setsize\Huge{30\p@}\xxvpt\@xxvpt}
-\fi
-\normalsize
-
-% make aubox hsize/number of authors up to 3, less gutter
-% then showbox gutter showbox gutter showbox -- GKMT Aug 99
-\newbox\@acmtitlebox
-\def\@maketitle{\newpage
- \null
- \setbox\@acmtitlebox\vbox{%
-\baselineskip 20pt
-\vskip 2em                   % Vertical space above title.
-   \begin{center}
-    {\ttlfnt \@title\par}       % Title set in 18pt Helvetica (Arial) bold size.
-    \vskip 1.5em                % Vertical space after title.
-%This should be the subtitle.
-{\subttlfnt \the\subtitletext\par}\vskip 1.25em%\fi
-    {\baselineskip 16pt\aufnt   % each author set in \12 pt Arial, in a
-     \lineskip .5em             % tabular environment
-     \begin{tabular}[t]{c}\@author
-     \end{tabular}\par}
-    \vskip 1.5em               % Vertical space after author.
-   \end{center}}
- \dimen0=\ht\@acmtitlebox
- \advance\dimen0 by -12.75pc\relax % Increased space for title box -- KBT
- \unvbox\@acmtitlebox
- \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi}
-
-
-\newcount\titlenotecount
-\global\titlenotecount=0
-\newtoks\tntoks
-\newtoks\tntokstwo
-\newtoks\tntoksthree
-\newtoks\tntoksfour
-\newtoks\tntoksfive
-
-\def\abstract{
-\ifnum\titlenotecount>0 % was =1
-    \insert\footins{%
-    \reset@font\footnotesize
-        \interlinepenalty\interfootnotelinepenalty
-        \splittopskip\footnotesep
-        \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-        \hsize\columnwidth \@parboxrestore
-        \protected@edef\@currentlabel{%
-        }%
-        \color@begingroup
-\ifnum\titlenotecount=1
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=2
-      \@maketntext{%
-      \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=3
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=4
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=5
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\P$}\rule\z@\footnotesep\ignorespaces\the\tntoksfive\@finalstrut\strutbox}%
-\fi
-   \color@endgroup} %g}
-\fi
-\setcounter{footnote}{0}
-\section*{ABSTRACT}\normalsize %\the\parskip \the\baselineskip%\ninept
-}
-
-\def\endabstract{\if@twocolumn\else\endquotation\fi}
-
-\def\keywords{\if@twocolumn
-\section*{Keywords}
-\else \small
-\quotation
-\fi}
-
-% I've pulled the check for 2 cols, since proceedings are _always_
-% two-column  11 Jan 2000 gkmt
-\def\terms{%\if@twocolumn
-\section*{General Terms}
-%\else \small
-%\quotation\the\parskip
-%\fi}
-}
-
-% -- Classification needs to be a bit smart due to optionals - Gerry/Georgia November 2nd. 1999
-\newcount\catcount
-\global\catcount=1
-
-\def\category#1#2#3{%
-\ifnum\catcount=1
-\section*{Categories and Subject Descriptors}
-\advance\catcount by 1\else{\unskip; }\fi
-    \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}%
-}
-
-\def\@category#1#2#3[#4]{%
-    \begingroup
-        \let\and\relax
-            #1 [\textbf{#2}]%
-            \if!#4!%
-                \if!#3!\else : #3\fi
-            \else
-                :\space
-                \if!#3!\else #3\kern\z@---\hskip\z@\fi
-                \textit{#4}%
-            \fi
-    \endgroup
-}
-%
-
-%%% This section (written by KBT) handles the 1" box in the lower left
-%%% corner of the left column of the first page by creating a picture,
-%%% and inserting the predefined string at the bottom (with a negative
-%%% displacement to offset the space allocated for a non-existent
-%%% caption).
-%%%
-\newtoks\copyrightnotice
-\def\ftype@copyrightbox{8}
-\def\@copyrightspace{
-\@float{copyrightbox}[b]
-\begin{center}
-\setlength{\unitlength}{1pc}
-\begin{picture}(20,6) %Space for copyright notice
-\put(0,-0.95){\crnotice{\@toappear}}
-\end{picture}
-\end{center}
-\end@float}
-
-\def\@toappear{} % Default setting blank - commands below change this.
-\long\def\toappear#1{\def\@toappear{\parbox[b]{20pc}{\baselineskip 9pt#1}}}
-\def\toappearbox#1{\def\@toappear{\raisebox{5pt}{\framebox[20pc]{\parbox[b]{19pc}{#1}}}}}
-
-\newtoks\conf
-\newtoks\confinfo
-\def\conferenceinfo#1#2{\global\conf={#1}\global\confinfo{#2}}
-
-
-%\def\marginpar{\@latexerr{The \marginpar command is not allowed in the
-%  `acmconf' document style.}\@eha}
-
-\def\marginpar{\ClassError{%
-    \string\marginpar\space is not allowed in the `acmconf' document		% January 2008
-    style}\@eha}
-
-\mark{{}{}}     % Initializes TeX's marks
-
-\def\today{\ifcase\month\or
-  January\or February\or March\or April\or May\or June\or
-  July\or August\or September\or October\or November\or December\fi
-  \space\number\day, \number\year}
-
-\def\@begintheorem#1#2{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {{\sc #1}\hskip 5\p@\relax#2.}%
-    ]
-    \it
-}
-\def\@opargbegintheorem#1#2#3{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\sc #1\ #2\             % This mod by Gerry to enumerate corollaries
-   \setbox\@tempboxa\hbox{(#3)}  % and bracket the 'corollary title'
-        \ifdim \wd\@tempboxa>\z@ % and retain the correct numbering of e.g. theorems
-            \hskip 5\p@\relax    % if they occur 'around' said corollaries.
-            \box\@tempboxa       % Gerry - Nov. 1999.
-        \fi.}%
-    ]
-    \it
-}
-\newif\if@qeded
-\global\@qededfalse
-
-% -- original
-%\def\proof{%
-%  \vspace{-\parskip} % GM July 2000 (for tighter spacing)
-%    \global\@qededfalse
-%    \@ifnextchar[{\@xproof}{\@proof}%
-%}
-% -- end of original
-
-% (JSS) Fix for vertical spacing bug - Gerry Murray July 30th. 2002
-\def\proof{%
-\vspace{-\lastskip}\vspace{-\parsep}\penalty-51%
-\global\@qededfalse
-\@ifnextchar[{\@xproof}{\@proof}%
-}
-
-\def\endproof{%
-    \if@qeded\else\qed\fi
-    \endtrivlist
-}
-\def\@proof{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\sc Proof.}%
-    ]
-    \ignorespaces
-}
-\def\@xproof[#1]{%
-    \trivlist
-    \item[\hskip 10\p@\hskip \labelsep{\sc Proof #1.}]%
-    \ignorespaces
-}
-\def\qed{%
-    \unskip
-    \kern 10\p@
-    \begingroup
-        \unitlength\p@
-        \linethickness{.4\p@}%
-        \framebox(6,6){}%
-    \endgroup
-    \global\@qededtrue
-}
-
-\def\newdef#1#2{%
-    \expandafter\@ifdefinable\csname #1\endcsname
-        {\@definecounter{#1}%
-         \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
-         \global\@namedef{#1}{\@defthm{#1}{#2}}%
-         \global\@namedef{end#1}{\@endtheorem}%
-    }%
-}
-\def\@defthm#1#2{%
-    \refstepcounter{#1}%
-    \@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}%
-}
-\def\@xdefthm#1#2{%
-    \@begindef{#2}{\csname the#1\endcsname}%
-    \ignorespaces
-}
-\def\@ydefthm#1#2[#3]{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\it #2%
-%         \savebox\@tempboxa{#3}%
-         \saveb@x\@tempboxa{#3}%		% January 2008
-         \ifdim \wd\@tempboxa>\z@
-            \ \box\@tempboxa
-         \fi.%
-        }]%
-    \ignorespaces
-}
-\def\@begindef#1#2{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\it #1\ \rm #2.}%
-    ]%
-}
-\def\theequation{\arabic{equation}}
-
-\newcounter{part}
-\newcounter{section}
-\newcounter{subsection}[section]
-\newcounter{subsubsection}[subsection]
-\newcounter{paragraph}[subsubsection]
-\def\thepart{\Roman{part}}
-\def\thesection{\arabic{section}}
-\def\thesubsection{\thesection.\arabic{subsection}}
-\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} %removed \subsecfnt 29 July 2002 gkmt
-\def\theparagraph{\thesubsubsection.\arabic{paragraph}} %removed \subsecfnt 29 July 2002 gkmt
-
-\newif\if@uchead
-\@ucheadfalse
-
-%% CHANGES: NEW NOTE
-%% NOTE: OK to use old-style font commands below, since they were
-%% suitably redefined for LaTeX2e
-%% END CHANGES
-\setcounter{secnumdepth}{3}
-\def\part{%
-    \@startsection{part}{9}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}
-        {4\p@}{\normalsize\@ucheadtrue}%
-}
-
-% Rationale for changes made in next four definitions:
-% "Before skip" is made elastic to provide some give in setting columns (vs.
-% parskip, which is non-elastic to keep section headers "anchored" to their
-% subsequent text.
-%
-% "After skip" is minimized -- BUT setting it to 0pt resulted in run-in heads, despite
-% the documentation asserted only after-skip < 0pt would have result.
-%
-% Baselineskip added to style to ensure multi-line section titles, and section heads
-% followed by another section head rather than text, are decently spaced vertically.
-% 12 Jan 2000 gkmt
-\def\section{%
-    \@startsection{section}{1}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}%
-    {0.5pt}{\baselineskip=14pt\secfnt\@ucheadtrue}%
-}
-
-\def\subsection{%
-    \@startsection{subsection}{2}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}
-    {0.5pt}{\baselineskip=14pt\secfnt}%
-}
-\def\subsubsection{%
-    \@startsection{subsubsection}{3}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}%
-    {0.5pt}{\baselineskip=14pt\subsecfnt}%
-}
-
-%\def\paragraph{%
-%    \vskip 12pt\@startsection{paragraph}{3}{\z@}{6\p@ \@plus \p@}% original
-%    {-5\p@}{\subsecfnt}%
-%}
-%  If one wants sections, subsections and subsubsections numbered,
-%  but not paragraphs, one usually sets secnumepth to 3.
-%  For that, the "depth" of paragraphs must be given correctly
-%  in the definition (``4'' instead of ``3'' as second argument
-%  of @startsection):
-\def\paragraph{%
-    \vskip 12pt\@startsection{paragraph}{4}{\z@}{6\p@ \@plus \p@}%    % GM and Wolfgang May - 11/30/06
-    {-5\p@}{\subsecfnt}%
-}
-
-\let\@period=.
-\def\@startsection#1#2#3#4#5#6{%
-        \if@noskipsec  %gkmt, 11 aug 99
-        \global\let\@period\@empty
-        \leavevmode
-        \global\let\@period.%
-    \fi
-    \par
-    \@tempskipa #4\relax
-    \@afterindenttrue
-    \ifdim \@tempskipa <\z@
-        \@tempskipa -\@tempskipa
-        \@afterindentfalse
-    \fi
-    %\if@nobreak  11 Jan 00 gkmt
-        %\everypar{}
-    %\else
-        \addpenalty\@secpenalty
-        \addvspace\@tempskipa
-    %\fi
-    \parskip=0pt
-    \@ifstar
-        {\@ssect{#3}{#4}{#5}{#6}}
-        {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
-}
-
-
-\def\@ssect#1#2#3#4#5{%
-  \@tempskipa #3\relax
-  \ifdim \@tempskipa>\z@
-    \begingroup
-      #4{%
-        \@hangfrom{\hskip #1}%
-          \interlinepenalty \@M #5\@@par}%
-    \endgroup
-  \else
-    \def\@svsechd{#4{\hskip #1\relax #5}}%
-  \fi
-  \vskip -10.5pt  %gkmt, 7 jan 00 -- had been -14pt, now set to parskip
-  \@xsect{#3}\parskip=10.5pt} % within the starred section, parskip = leading 12 Jan 2000 gkmt
-
-
-\def\@sect#1#2#3#4#5#6[#7]#8{%
-    \ifnum #2>\c@secnumdepth
-        \let\@svsec\@empty
-    \else
-        \refstepcounter{#1}%
-        \edef\@svsec{%
-            \begingroup
-                %\ifnum#2>2 \noexpand\rm \fi % changed to next 29 July 2002 gkmt
-            \ifnum#2>2 \noexpand#6 \fi
-                \csname the#1\endcsname
-            \endgroup
-            \ifnum #2=1\relax .\fi
-            \hskip 1em
-        }%
-    \fi
-    \@tempskipa #5\relax
-    \ifdim \@tempskipa>\z@
-        \begingroup
-            #6\relax
-            \@hangfrom{\hskip #3\relax\@svsec}%
-            \begingroup
-                \interlinepenalty \@M
-                \if@uchead
-                    \uppercase{#8}%
-                \else
-                    #8%
-                \fi
-                \par
-            \endgroup
-        \endgroup
-        \csname #1mark\endcsname{#7}%
-        \vskip -10.5pt  % -14pt gkmt, 11 aug 99 -- changed to -\parskip 11 Jan 2000
-      \addcontentsline{toc}{#1}{%
-            \ifnum #2>\c@secnumdepth \else
-                \protect\numberline{\csname the#1\endcsname}%
-            \fi
-            #7%
-        }%
-    \else
-        \def\@svsechd{%
-            #6%
-            \hskip #3\relax
-            \@svsec
-            \if@uchead
-                \uppercase{#8}%
-            \else
-                #8%
-            \fi
-            \csname #1mark\endcsname{#7}%
-            \addcontentsline{toc}{#1}{%
-                \ifnum #2>\c@secnumdepth \else
-                    \protect\numberline{\csname the#1\endcsname}%
-                \fi
-                #7%
-            }%
-        }%
-    \fi
-    \@xsect{#5}\parskip=10.5pt% within the section, parskip = leading 12 Jan 2000 gkmt
-}
-\def\@xsect#1{%
-    \@tempskipa #1\relax
-    \ifdim \@tempskipa>\z@
-        \par
-        \nobreak
-        \vskip \@tempskipa
-        \@afterheading
-    \else
-        \global\@nobreakfalse
-        \global\@noskipsectrue
-        \everypar{%
-            \if@noskipsec
-                \global\@noskipsecfalse
-                \clubpenalty\@M
-                \hskip -\parindent
-                \begingroup
-                    \@svsechd
-                    \@period
-                \endgroup
-                \unskip
-                \@tempskipa #1\relax
-                \hskip -\@tempskipa
-            \else
-                \clubpenalty \@clubpenalty
-                \everypar{}%
-            \fi
-        }%
-    \fi
-    \ignorespaces
-}
-
-\def\@trivlist{%
-    \@topsepadd\topsep
-    \if@noskipsec
-        \global\let\@period\@empty
-        \leavevmode
-        \global\let\@period.%
-    \fi
-    \ifvmode
-        \advance\@topsepadd\partopsep
-    \else
-        \unskip
-        \par
-    \fi
-    \if@inlabel
-        \@noparitemtrue
-        \@noparlisttrue
-    \else
-        \@noparlistfalse
-        \@topsep\@topsepadd
-    \fi
-    \advance\@topsep \parskip
-    \leftskip\z@skip
-    \rightskip\@rightskip
-    \parfillskip\@flushglue
-    \@setpar{\if@newlist\else{\@@par}\fi}
-    \global\@newlisttrue
-    \@outerparskip\parskip
-}
-
-%%% Actually, 'abbrev' works just fine as the default - Gerry Feb. 2000
-%%% Bibliography style.
-
-\parindent 0pt
-\typeout{Using 'Abbrev' bibliography style}
-\newcommand\bibyear[2]{%
-    \unskip\quad\ignorespaces#1\unskip
-    \if#2..\quad \else \quad#2 \fi
-}
-\newcommand{\bibemph}[1]{{\em#1}}
-\newcommand{\bibemphic}[1]{{\em#1\/}}
-\newcommand{\bibsc}[1]{{\sc#1}}
-\def\@normalcite{%
-    \def\@cite##1##2{[##1\if@tempswa , ##2\fi]}%
-}
-\def\@citeNB{%
-    \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
-}
-\def\@citeRB{%
-    \def\@cite##1##2{##1\if@tempswa , ##2\fi]}%
-}
-\def\start@cite#1#2{%
-    \edef\citeauthoryear##1##2##3{%
-        ###1%
-        \ifnum#2=\z@ \else\ ###2\fi
-    }%
-    \ifnum#1=\thr@@
-        \let\@@cite\@citeyear
-    \else
-        \let\@@cite\@citenormal
-    \fi
-    \@ifstar{\@citeNB\@@cite}{\@normalcite\@@cite}%
-}
-%\def\cite{\start@cite23}
-\DeclareRobustCommand\cite{\start@cite23}		% January 2008
-\def\citeNP{\cite*}					% No Parentheses e.g. 5
-%\def\citeA{\start@cite10}
-\DeclareRobustCommand\citeA{\start@cite10}		% January 2008
-\def\citeANP{\citeA*}
-%\def\shortcite{\start@cite23}				
-\DeclareRobustCommand\shortcite{\start@cite23}		% January 2008
-\def\shortciteNP{\shortcite*}
-%\def\shortciteA{\start@cite20}
-\DeclareRobustCommand\shortciteA{\start@cite20}		% January 2008
-\def\shortciteANP{\shortciteA*}
-%\def\citeyear{\start@cite30}
-\DeclareRobustCommand\citeyear{\start@cite30}		% January 2008
-\def\citeyearNP{\citeyear*}
-%\def\citeN{%
-\DeclareRobustCommand\citeN{%				% January 2008
-    \@citeRB
-    \def\citeauthoryear##1##2##3{##1\ [##3%
-        \def\reserved@a{##1}%
-        \def\citeauthoryear####1####2####3{%
-            \def\reserved@b{####1}%
-            \ifx\reserved@a\reserved@b
-                ####3%
-            \else
-                \errmessage{Package acmart Error: author mismatch
-                         in \string\citeN^^J^^J%
-                    See the acmart package documentation for explanation}%
-            \fi
-        }%
-    }%
-    \@ifstar\@citeyear\@citeyear
-}
-%\def\shortciteN{%
-\DeclareRobustCommand\shortciteN{%			% January 2008
-    \@citeRB
-    \def\citeauthoryear##1##2##3{##2\ [##3%
-        \def\reserved@a{##2}%
-        \def\citeauthoryear####1####2####3{%
-            \def\reserved@b{####2}%
-            \ifx\reserved@a\reserved@b
-                ####3%
-            \else
-                \errmessage{Package acmart Error: author mismatch
-                         in \string\shortciteN^^J^^J%
-                    See the acmart package documentation for explanation}%
-            \fi
-        }%
-    }%
-    \@ifstar\@citeyear\@citeyear % changed from  "\@ifstart" 12 Jan 2000 gkmt
-}
-
-\def\@citenormal{%
-    \@ifnextchar [{\@tempswatrue\@citex;}%
-% original                 {\@tempswafalse\@citex,[]}% was ; Gerry 2/24/00
-{\@tempswafalse\@citex[]}%  	% GERRY FIX FOR BABEL 3/20/2009
-}
-
-\def\@citeyear{%
-    \@ifnextchar [{\@tempswatrue\@citex,}%
-% original                  {\@tempswafalse\@citex,[]}%
-{\@tempswafalse\@citex[]}%	%  GERRY FIX FOR BABEL 3/20/2009
-}
-
-\def\@citex#1[#2]#3{%
-    \let\@citea\@empty
-    \@cite{%
-        \@for\@citeb:=#3\do{%
-            \@citea
-% original            \def\@citea{#1 }%
-            \def\@citea{#1, }% 	% GERRY FIX FOR BABEL 3/20/2009 -- SO THAT YOU GET [1, 2] IN THE BODY TEXT
-            \edef\@citeb{\expandafter\@iden\@citeb}%
-            \if@filesw
-                \immediate\write\@auxout{\string\citation{\@citeb}}%
-            \fi
-            \@ifundefined{b@\@citeb}{%
-                {\bf ?}%
-                \@warning{%
-                    Citation `\@citeb' on page \thepage\space undefined%
-                }%
-            }%
-            {\csname b@\@citeb\endcsname}%
-        }%
-    }{#2}%
-}
-%\let\@biblabel\@gobble   % Dec. 2008 - Gerry
-% ----
-\def\@biblabelnum#1{[#1]} % Gerry's solution #1 - for Natbib 
-\let\@biblabel=\@biblabelnum  % Gerry's solution #1 - for Natbib
-\def\newblock{\relax} % Gerry Dec. 2008
-% ---
-\newdimen\bibindent
-\setcounter{enumi}{1}
-\bibindent=0em
-\def\thebibliography#1{% 
-\ifnum\addauflag=0\addauthorsection\global\addauflag=1\fi
-     \section[References]{%    <=== OPTIONAL ARGUMENT ADDED HERE
-        {References} % was uppercased but this affects pdf bookmarks (SP/GM October 2004)
-         \@mkboth{{\refname}}{{\refname}}%
-     }%
-     \list{[\arabic{enumi}]}{%
-         \settowidth\labelwidth{[#1]}%
-         \leftmargin\labelwidth
-         \advance\leftmargin\labelsep
-         \advance\leftmargin\bibindent
-         \parsep=0pt\itemsep=1pt % GM July 2000
-         \itemindent -\bibindent
-         \listparindent \itemindent
-         \usecounter{enumi}
-     }%
-     \let\newblock\@empty
-     \raggedright % GM July 2000
-     \sloppy
-     \sfcode`\.=1000\relax
-}
-
-
-\gdef\balancecolumns
-{\vfill\eject
-\global\@colht=\textheight
-\global\ht\@cclv=\textheight
-}
-
-\newcount\colcntr
-\global\colcntr=0
-%\newbox\savebox
-\newbox\saveb@x				% January 2008
-
-\gdef \@makecol {%
-\global\advance\colcntr by 1
-\ifnum\colcntr>2 \global\colcntr=1\fi
-   \ifvoid\footins
-     \setbox\@outputbox \box\@cclv
-   \else
-     \setbox\@outputbox \vbox{%
-\boxmaxdepth \@maxdepth
-       \@tempdima\dp\@cclv
-       \unvbox \@cclv
-       \vskip-\@tempdima
-       \vskip \skip\footins
-       \color@begingroup
-         \normalcolor
-         \footnoterule
-         \unvbox \footins
-       \color@endgroup
-       }%
-   \fi
-   \xdef\@freelist{\@freelist\@midlist}%
-   \global \let \@midlist \@empty
-   \@combinefloats
-   \ifvbox\@kludgeins
-     \@makespecialcolbox
-   \else
-     \setbox\@outputbox \vbox to\@colht {%
-\@texttop
-       \dimen@ \dp\@outputbox
-       \unvbox \@outputbox
-   \vskip -\dimen@
-       \@textbottom
-       }%
-   \fi
-   \global \maxdepth \@maxdepth
-}
-\def\titlenote{\@ifnextchar[\@xtitlenote{\stepcounter\@mpfn
-\global\advance\titlenotecount by 1
-\ifnum\titlenotecount=1
-    \raisebox{9pt}{$\ast$}
-\fi
-\ifnum\titlenotecount=2
-    \raisebox{9pt}{$\dagger$}
-\fi
-\ifnum\titlenotecount=3
-    \raisebox{9pt}{$\ddagger$}
-\fi
-\ifnum\titlenotecount=4
-\raisebox{9pt}{$\S$}
-\fi
-\ifnum\titlenotecount=5
-\raisebox{9pt}{$\P$}
-\fi
-         \@titlenotetext
-}}
-
-\long\def\@titlenotetext#1{\insert\footins{%
-\ifnum\titlenotecount=1\global\tntoks={#1}\fi
-\ifnum\titlenotecount=2\global\tntokstwo={#1}\fi
-\ifnum\titlenotecount=3\global\tntoksthree={#1}\fi
-\ifnum\titlenotecount=4\global\tntoksfour={#1}\fi
-\ifnum\titlenotecount=5\global\tntoksfive={#1}\fi
-    \reset@font\footnotesize
-    \interlinepenalty\interfootnotelinepenalty
-    \splittopskip\footnotesep
-    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-    \hsize\columnwidth \@parboxrestore
-    \protected@edef\@currentlabel{%
-    }%
-    \color@begingroup
-   \color@endgroup}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%
-\ps@plain
-\baselineskip=11pt
-\let\thepage\relax % For  NO page numbers - Gerry Nov. 30th. 1999
-\def\setpagenumber#1{\global\setcounter{page}{#1}}
-%\pagenumbering{arabic}  % Arabic page numbers but commented out for NO page numbes - Gerry Nov. 30th. 1999
-\twocolumn             % Double column.
-\flushbottom           % Even bottom -- alas, does not balance columns at end of document
-\pagestyle{plain}
-
-% Need Copyright Year and Copyright Data to be user definable (in .tex file).
-% Gerry Nov. 30th. 1999
-\newtoks\copyrtyr
-\newtoks\acmcopyr
-\newtoks\boilerplate
-\def\CopyrightYear#1{\global\copyrtyr{#1}}
-\def\crdata#1{\global\acmcopyr{#1}}
-\def\permission#1{\global\boilerplate{#1}}
-%
-\newtoks\copyrightetc
-\global\copyrightetc{\ } %  Need to have 'something' so that adequate space is left for pasting in a line if "confinfo" is supplied.
-
-\toappear{\the\boilerplate\par
-{\confname{\the\conf}} \the\confinfo\par \the\copyrightetc}
-% End of ACM_PROC_ARTICLE-SP.CLS -- V3.2SP - 04/22/2009 --
-% Gerry Murray -- Wednesday April 22nd. 2009
-%
-% The following section (i.e. 3 .sty inclusions) was added in May 2007 so as to fix the problems that many
-% authors were having with accents. Sometimes accents would occur, but the letter-character would be of a different
-% font. Conversely the letter-character font would be correct but, e.g. a 'bar' would appear superimposed on the
-% character instead of, say, an unlaut/diaresis. Sometimes the letter-character would NOT appear at all.
-% Using [T1]{fontenc} outright was not an option as this caused 99% of the authors to 'produce' a Type-3 (bitmapped)
-% PDF file - useless for production. 
-%
-% For proper (font) accenting we NEED these packages to be part of the .cls file i.e. 'ae', 'aecompl' and 'aeguil' 
-% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-%% This is file `ae.sty' 
-\def\fileversion{1.3}
-\def\filedate{2001/02/12}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{ae}[\filedate\space\fileversion\space  % GM
-% Almost European Computer Modern]                       % GM - keeping the log file clean(er)
-\newif\if@ae@slides \@ae@slidesfalse
-\DeclareOption{slides}{\@ae@slidestrue}
-\ProcessOptions
-\fontfamily{aer}
-\RequirePackage[T1]{fontenc}
-\if@ae@slides
-    \renewcommand{\sfdefault}{laess}
-    \renewcommand{\rmdefault}{laess} % no roman
-    \renewcommand{\ttdefault}{laett}
-\else
-    \renewcommand{\sfdefault}{aess}
-    \renewcommand{\rmdefault}{aer}
-    \renewcommand{\ttdefault}{aett}
-\fi
-\endinput
-%% 
-%% End of file `ae.sty'.
-%
-%
-\def\fileversion{0.9}
-\def\filedate{1998/07/23}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{aecompl}[\filedate\space\fileversion\space   % GM
-%T1 Complements for AE fonts (D. Roegel)]                      % GM -- keeping the log file clean(er)
- 
-\def\@ae@compl#1{{\fontencoding{T1}\fontfamily{cmr}\selectfont\symbol{#1}}}
-\def\guillemotleft{\@ae@compl{19}}
-\def\guillemotright{\@ae@compl{20}}
-\def\guilsinglleft{\@ae@compl{14}}
-\def\guilsinglright{\@ae@compl{15}}
-\def\TH{\@ae@compl{222}}
-\def\NG{\@ae@compl{141}}
-\def\ng{\@ae@compl{173}}
-\def\th{\@ae@compl{254}}
-\def\DJ{\@ae@compl{208}}
-\def\dj{\@ae@compl{158}}
-\def\DH{\@ae@compl{208}}
-\def\dh{\@ae@compl{240}}
-\def\@perthousandzero{\@ae@compl{24}}
-\def\textperthousand{\%\@perthousandzero}
-\def\textpertenthousand{\%\@perthousandzero\@perthousandzero}
-\endinput
-%
-%
-%% This is file `aeguill.sty' 
-% This file gives french guillemets (and not guillemots!)
-% built with the Polish CMR fonts (default), WNCYR fonts, the LASY fonts 
-% or with the EC fonts. 
-% This is useful in conjunction with the ae package
-% (this package loads the ae package in case it has not been loaded)
-%  and with or without the french(le) package.
-%
-% In order to get the guillemets, it is necessary to either type
-% \guillemotleft and \guillemotright, or to use an 8 bit encoding
-% (such as ISO-Latin1) which selects these two commands, 
-% or, if you use the french package (but not the frenchle package), 
-% to type << or >>.
-%
-% By default, you get the Polish CMR guillemets; if this package is loaded
-% with the `cm' option, you get the LASY guillemets; with `ec,' you
-% get the EC guillemets, and with `cyr,' you get the cyrillic guillemets.
-%
-% In verbatim mode, you always get the EC/TT guillemets.
-%
-% The default option is interesting in conjunction with PDF,
-% because there is a Type 1 version of the Polish CMR fonts
-% and these guillemets are very close in shape to the EC guillemets.
-% There are no free Type 1 versions of the EC fonts.
-%
-% Support for Polish CMR guillemets was kindly provided by 
-% Rolf Niepraschk <niepraschk@ptb.de> in version 0.99 (2000/05/22).
-% Bernd Raichle provided extensive simplifications to the code
-% for version 1.00.
-%
-% This package is released under the LPPL.
-%
-% Changes:
-%   Date        version
-%   2001/04/12  1.01    the frenchle and french package are now distinguished.
-%
-\def\fileversion{1.01}
-\def\filedate{2001/04/12}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{aeguill}[2001/04/12 1.01 %    % GM
-%AE fonts with french guillemets (D. Roegel)]   % GM - keeping the log file clean(er)
-%\RequirePackage{ae}  % GM May 2007 - already embedded here
-
-\newcommand{\@ae@switch}[4]{#4}
-\DeclareOption{ec}{\renewcommand\@ae@switch[4]{#1}}
-\DeclareOption{cm}{\renewcommand\@ae@switch[4]{#2}}
-\DeclareOption{cyr}{\renewcommand\@ae@switch[4]{#3}}
-\DeclareOption{pl}{\renewcommand\@ae@switch[4]{#4}}
-\ExecuteOptions{pl}
-\ProcessOptions
-
-%
-% Load necessary packages
-%
-\@ae@switch{% ec
-  % do nothing
-}{% cm
-  \RequirePackage{latexsym}%  GM - May 2007 - already 'mentioned as required' up above
-}{% cyr
-  \RequirePackage[OT2,T1]{fontenc}%
-}{% pl
-  \RequirePackage[OT4,T1]{fontenc}%
-}
-
-% The following command will be compared to \frenchname,
-% as defined in french.sty and frenchle.sty.
-\def\aeguillfrenchdefault{french}%
-
-\let\guill@verbatim@font\verbatim@font
-\def\verbatim@font{\guill@verbatim@font\ecguills{cmtt}%
-                   \let\guillemotleft\@oguills\let\guillemotright\@fguills}
-
-\begingroup \catcode`\<=13 \catcode`\>=13
-\def\x{\endgroup
- \def\ae@lfguill{<<}%
- \def\ae@rfguill{>>}%
-}\x
-
-\newcommand{\ecguills}[1]{%
-  \def\selectguillfont{\fontencoding{T1}\fontfamily{#1}\selectfont}%
-  \def\@oguills{{\selectguillfont\symbol{19}}}%
-  \def\@fguills{{\selectguillfont\symbol{20}}}%
-  } 
-
-\newcommand{\aeguills}{%
-  \ae@guills
-  % We redefine \guillemotleft and \guillemotright
-  % in order to catch them when they are used 
-  % with \DeclareInputText (in latin1.def for instance)
-  % We use \auxWARNINGi as a safe indicator that french.sty is used.
-  \gdef\guillemotleft{\ifx\auxWARNINGi\undefined
-                         \@oguills % neither french.sty nor frenchle.sty
-                      \else
-                         \ifx\aeguillfrenchdefault\frenchname
-                           \ae@lfguill  % french.sty
-                         \else
-                           \@oguills    % frenchle.sty
-                         \fi
-                      \fi}%
-  \gdef\guillemotright{\ifx\auxWARNINGi\undefined
-                         \@fguills % neither french.sty nor frenchle.sty
-                       \else
-                         \ifx\aeguillfrenchdefault\frenchname
-                           \ae@rfguill  % french.sty
-                         \else
-                           \@fguills    % frenchle.sty
-                         \fi
-                       \fi}%
-  }
-
-%
-% Depending on the class option
-% define the internal command \ae@guills
-\@ae@switch{% ec
-  \newcommand{\ae@guills}{%
-    \ecguills{cmr}}%
-}{% cm
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{U}\fontfamily{lasy}%
-            \fontseries{m}\fontshape{n}\selectfont}%
-    \def\@oguills{\leavevmode\nobreak
-                \hbox{\selectguillfont (\kern-.20em(\kern.20em}\nobreak}%
-    \def\@fguills{\leavevmode\nobreak
-                \hbox{\selectguillfont \kern.20em)\kern-.2em)}%
-                \ifdim\fontdimen\@ne\font>\z@\/\fi}}%
-}{% cyr
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{OT2}\fontfamily{wncyr}\selectfont}%
-    \def\@oguills{{\selectguillfont\symbol{60}}}%
-    \def\@fguills{{\selectguillfont\symbol{62}}}}
-}{% pl
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{OT4}\fontfamily{cmr}\selectfont}%
-    \def\@oguills{{\selectguillfont\symbol{174}}}%
-    \def\@fguills{{\selectguillfont\symbol{175}}}}
-}
-
-
-\AtBeginDocument{%
-  \ifx\GOfrench\undefined
-    \aeguills
-  \else
-    \let\aeguill@GOfrench\GOfrench
-    \gdef\GOfrench{\aeguill@GOfrench \aeguills}%
-  \fi
-  }
-
-\endinput
-%
-
-

+ 0 - 143
papers/ipfs-cap2pfs/ipfs-cap2pfs.bib

@@ -1,143 +0,0 @@
-@article{AFS,
-  title={Scale and performance in a distributed file system},
-  author={Howard, John H and Kazar, Michael L and Menees, Sherri G and Nichols, David A and Satyanarayanan, Mahadev and Sidebotham, Robert N and West, Michael J},
-  journal={ACM Transactions on Computer Systems (TOCS)},
-  volume={6},
-  number={1},
-  pages={51--81},
-  year={1988},
-  publisher={ACM}
-}
-
-@article{Oceanstore,
-  title={Oceanstore: An architecture for global-scale persistent storage},
-  author={Kubiatowicz, John and Bindel, David and Chen, Yan and Czerwinski, Steven and Eaton, Patrick and Geels, Dennis and Gummadi, Ramakrishan and Rhea, Sean and Weatherspoon, Hakim and Weimer, Westley and others},
-  journal={ACM Sigplan Notices},
-  volume={35},
-  number={11},
-  pages={190--201},
-  year={2000},
-  publisher={ACM}
-}
-
-@online{BitTorrentUsers,
-author={BitTorrent, Inc.},
-title={BitTorrent and µTorrent Software Surpass 150 Million User Milestone},
-month=jan,
-year=2012,
-url={http://www.bittorrent.com/intl/es/company/about/ces_2012_150m_users},
-}
-
-@inproceedings{mashtizadeh13,
-  title={Replication, history, and grafting in the Ori file system},
-  author={Mashtizadeh, Ali Jos{\'e} and Bittau, Andrea and Huang, Yifeng Frank and Mazieres, David},
-  booktitle={Proceedings of the Twenty-Fourth ACM Symposium on Operating Systems Principles},
-  pages={151--166},
-  year={2013},
-  organization={ACM}
-}
-
-@incollection{maymounkov02,
-  title={Kademlia: A peer-to-peer information system based on the xor metric},
-  author={Maymounkov, Petar and Mazieres, David},
-  booktitle={Peer-to-Peer Systems},
-  pages={53--65},
-  year={2002},
-  publisher={Springer}
-}
-
-@inproceedings{wang13,
-  title={Measuring large-scale distributed systems: case of BitTorrent Mainline DHT},
-  author={Wang, Liang and Kangasharju, Jussi},
-  booktitle={Peer-to-Peer Computing (P2P), 2013 IEEE Thirteenth International Conference on},
-  pages={1--10},
-  year={2013},
-  organization={IEEE}
-}
-
-@inproceedings{freedman04,
-  title={Democratizing Content Publication with Coral.},
-  author={Freedman, Michael J and Freudenthal, Eric and Mazieres, David},
-  booktitle={NSDI},
-  volume={4},
-  pages={18--18},
-  year={2004}
-}
-
-@misc{dean11,
-  title={leveldb--A fast and lightweight key/value database library by Google},
-  author={Dean, Jeffrey and Ghemawat, Sanjay},
-  year={2011}
-}
-
-@inproceedings{baumgart07,
-  title={S/kademlia: A practicable approach towards secure key-based routing},
-  author={Baumgart, Ingmar and Mies, Sebastian},
-  booktitle={Parallel and Distributed Systems, 2007 International Conference on},
-  volume={2},
-  pages={1--8},
-  year={2007},
-  organization={IEEE}
-}
-
-@inproceedings{cohen03,
-  title={Incentives build robustness in BitTorrent},
-  author={Cohen, Bram},
-  booktitle={Workshop on Economics of Peer-to-Peer systems},
-  volume={6},
-  pages={68--72},
-  year={2003}
-}
-
-@inproceedings{levin08,
-  title={Bittorrent is an auction: analyzing and improving bittorrent's incentives},
-  author={Levin, Dave and LaCurts, Katrina and Spring, Neil and Bhattacharjee, Bobby},
-  booktitle={ACM SIGCOMM Computer Communication Review},
-  volume={38},
-  number={4},
-  pages={243--254},
-  year={2008},
-  organization={ACM}
-}
-
-@article{mazieres00,
-  title={Self-certifying file system},
-  author={Mazieres, David and Kaashoek, Frans},
-  year={2000},
-  publisher={Citeseer}
-}
-
-@inproceedings{mazieres98,
-  title={Escaping the evils of centralized control with self-certifying pathnames},
-  author={Mazieres, David and Kaashoek, M Frans},
-  booktitle={Proceedings of the 8th ACM SIGOPS European workshop on Support for composing distributed applications},
-  pages={118--125},
-  year={1998},
-  organization={ACM}
-}
-
-@article{UTP,
-  title={LEDBAT+ BitTorrent},
-  author={Rossi, Dario}
-}
-
-@article{LEDBAT,
-  title={Low extra delay background transport (LEDBAT)},
-  author={Shalunov, Stanislav and Hazel, Greg and Iyengar, Janardhan and Kuehlewind, Mirja},
-  journal={draft-ietf-ledbat-congestion-04. txt},
-  year={2010}
-}
-
-@book{SCTP,
-  title={Stream control transmission protocol (SCTP): a reference guide},
-  author={Stewart, Randall R and Xie, Qiaobing},
-  year={2001},
-  publisher={Addison-Wesley Longman Publishing Co., Inc.}
-}
-
-@article{ICE,
-  title={Interactive connectivity establishment (ice): A protocol for network address translator (nat) traversal for offer/answer protocols},
-  author={Rosenberg, Jonathan and Keranen, Ari},
-  year={2013}
-}
-

+ 0 - 1143
papers/ipfs-cap2pfs/ipfs-cap2pfs.tex

@@ -1,1143 +0,0 @@
-\documentclass{sig-alternate}
-
-\usepackage{tikz}
-\usetikzlibrary{arrows}
-\usetikzlibrary{trees}
-\usetikzlibrary{positioning}
-
-\usepackage{array}
-\usepackage{amstext}
-\usepackage{mathtools}
-\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil}
-
-\begin{document}
-
-\title{IPFS - Content Addressed, Versioned, P2P File System (DRAFT 3)}
-\subtitle{}
-
-\numberofauthors{1}
-
-\author{
-\alignauthor
-  Juan Benet\\
-  \email{juan@benet.ai}
-}
-
-\maketitle
-\begin{abstract}
-The InterPlanetary File System (IPFS) is a peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files. In some ways, IPFS is similar to the Web, but IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. In other words, IPFS provides a high throughput content-addressed block storage model, with content-addressed hyper links. This forms a generalized Merkle DAG, a data structure upon which one can build versioned file systems, blockchains, and even a Permanent Web. IPFS combines a distributed hashtable, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other.
-\end{abstract}
-
-\section{Introduction}
-
-There have been many attempts at constructing a global distributed file system. Some systems have seen significant success, and others failed completely. Among the academic attempts, AFS~\cite{AFS} has succeeded widely and is still in use today. Others~\cite{Oceanstore, CFS} have not attained the same success. Outside of academia, the most successful systems have been peer-to-peer file-sharing applications primarily geared toward large media (audio and video). Most notably, Napster, KaZaA, and BitTorrent~\cite{BitTorrentUsers} deployed large file distribution systems supporting over 100 million simultaneous users. Even today, BitTorrent maintains a massive deployment where tens of millions of nodes churn daily~\cite{wang13}. These applications saw greater numbers of users and files distributed than their academic file system counterparts. However, the applications were not designed as infrastructure to be built upon. While there have been successful repurposings\footnote{For example, Linux distributions use BitTorrent to transmit disk images, and  Blizzard, Inc. uses it to distribute video game content.}, no general file-system has emerged that offers global, low-latency, and decentralized distribution.
-
-Perhaps this is because a ``good enough'' system for most use cases already exists: HTTP.  By far, HTTP is the most successful ``distributed system of files'' ever deployed. Coupled with the browser, HTTP has had enormous technical and social impact. It has become the de facto way to transmit files across the internet. Yet, it fails to take advantage of dozens of brilliant file distribution techniques invented in the last fifteen years. From one prespective, evolving Web infrastructure is near-impossible, given the number of backwards compatibility constraints and the number of strong parties invested in the current model. But from another perspective, new protocols have emerged and gained wide use since the emergence of HTTP. What is lacking is upgrading design: enhancing the current HTTP web, and introducing new functionality without degrading user experience.
-
-Industry has gotten away with using HTTP this long because moving small files around is relatively cheap, even for small organizations with lots of traffic. But we are entering a new era of data distribution with new challenges: (a) hosting and distributing petabyte datasets, (b) computing on large data across organizations, (c) high-volume high-definition on-demand or real-time media streams, (d) versioning and linking of massive datasets, (e) preventing accidental disappearance of important files, and more. Many of these can be boiled down to ``lots of data, accessible everywhere.'' Pressed by critical features and bandwidth concerns, we have already given up HTTP for different data distribution protocols. The next step is making them part of the Web itself.
-
-Orthogonal to efficient data distribution, version control systems have managed to develop important data collaboration workflows. Git, the distributed source code version control system, developed many useful ways to model and implement distributed data operations. The Git toolchain offers versatile versioning functionality that large file distribution systems severely lack. New solutions inspired by Git are emerging, such as Camlistore~\cite{Camlistore}, a personal file storage system, and Dat~\cite{Dat} a data collaboration toolchain and dataset package manager. Git has already influenced distributed filesystem design~\cite{mashtizadeh13}, as its content addressed Merkle DAG data model enables powerful file distribution strategies. What remains to be explored is how this data structure can influence the design of high-throughput oriented file systems, and how it might upgrade the Web itself.
-
-This paper introduces IPFS, a novel peer-to-peer version-controlled filesystem seeking to reconcile these issues. IPFS synthesizes learnings from many past successful systems. Careful interface-focused integration yields a system greater than the sum of its parts. The central IPFS principle is modeling \textit{all data} as part of the same Merkle DAG.
-
-\section{Background}
-
-This section reviews important properties of successful peer-to-peer systems, which IPFS combines.
-
-\subsection{Distributed Hash Tables}
-
-Distributed Hash Tables (DHTs) are widely used to coordinate and maintain metadata about peer-to-peer systems. For example, the BitTorrent MainlineDHT tracks sets of peers part of a torrent swarm.
-
-\subsubsection{Kademlia DHT}
-
-Kademlia~\cite{maymounkov02} is a popular DHT that provides:
-
-\begin{enumerate}
-
-  \item Efficient lookup through massive networks:
-        queries on average contact $ \ceil{log_2 (n)} $ nodes.
-        (e.g. $20$ hops for a network of $10,000,000$ nodes).
-
-  \item Low coordination overhead: it optimizes the number of
-        control messages it sends to other nodes.
-
-  \item Resistance to various attacks by preferring long-lived nodes.
-
-  \item Wide usage in peer-to-peer applications, including \\
-        Gnutella and BitTorrent, forming networks of over 20 million nodes~\cite{wang13}.
-
- \end{enumerate}
-
-
-\subsubsection{Coral DSHT}
-
-While some peer-to-peer filesystems store data blocks directly in DHTs,
-this ``wastes storage and bandwidth, as data must be stored at nodes where it
-is not needed''~\cite{freedman04}. The Coral DSHT extends Kademlia in three
-particularly important ways:
-
-\begin{enumerate}
-
-  \item Kademlia stores values in nodes whose ids are ``nearest'' (using
-        XOR-distance) to the key. This does not take into account application
-        data locality, ignores ``far'' nodes that may already have the data,
-        and forces ``nearest'' nodes to store it, whether they need it or not.
-        This wastes significant storage and bandwith. Instead, Coral stores
-        addresses to peers who can provide the data blocks.
-
-  \item Coral relaxes the DHT API from \texttt{get\_value(key)} to
-        \texttt{get\_any\_values(key)} (the ``sloppy'' in DSHT).
-        This still works since Coral users only need a single (working) peer,
-        not the complete list. In return, Coral can distribute only subsets of
-        the values to the ``nearest'' nodes, avoiding hot-spots (overloading
-        \textit{all the nearest nodes} when a key becomes popular).
-
-  \item Additionally, Coral organizes a hierarchy of separate DSHTs called
-        \textit{clusters} depending on region and size. This enables nodes to
-        query peers in their region first, ``finding nearby data without
-        querying distant nodes''~\cite{freedman04} and greatly reducing the latency
-        of lookups.
-
-\end{enumerate}
-
-\subsubsection{S/Kademlia DHT}
-
-S/Kademlia~\cite{baumgart07} extends Kademlia to protect against malicious attacks in two particularly important ways:
-
-\begin{enumerate}
-
-  \item S/Kademlia provides schemes to secure \texttt{NodeId} generation,
-        and prevent Sybill attacks. It requires nodes to create a PKI key pair, derive their identity from it, and sign their messages to each other. One scheme includes a proof-of-work crypto puzzle to make generating Sybills expensive.
-
-  \item S/Kademlia nodes lookup values over disjoint paths, in order to
-        ensure honest nodes can connect to each other in the presence of a large fraction of adversaries in the network. S/Kademlia achieves a success rate of 0.85 even with an adversarial fraction as large as half of the nodes.
-
-\end{enumerate}
-
-\subsection{Block Exchanges - BitTorrent}
-
-BitTorrent~\cite{cohen03} is a widely successful peer-to-peer filesharing system, which succeeds in coordinating networks of untrusting peers (swarms) to cooperate in distributing pieces of files to each other. Key features from BitTorrent and its ecosystem that inform IPFS design include:
-
-\begin{enumerate}
-  \item BitTorrent's data exchange protocol uses a quasi tit-for-tat strategy
-        that rewards nodes who contribute to each other, and punishes nodes who only leech others' resources.
-
-  \item BitTorrent peers track the availability of file pieces, prioritizing
-        sending rarest pieces first. This takes load off seeds, making non-seed peers capable of trading with each other.
-
-  \item BitTorrent's standard tit-for-tat is vulnerable to some exploitative
-        bandwidth sharing strategies. PropShare~\cite{levin08} is a different peer bandwidth allocation strategy that better resists exploitative strategies, and improves the performance of swarms.
-
-\end{enumerate}
-
-\subsection{Version Control Systems - Git}
-
-Version Control Systems provide facilities to model files changing over time and distribute different versions efficiently. The popular version control system Git provides a powerful Merkle DAG \footnote{Merkle Directed Acyclic Graph -- similar but more general construction than a Merkle Tree. Deduplicated, does not need to be balanced, and non-leaf nodes contain data.} object model that captures changes to a filesystem tree in a distributed-friendly way.
-
-\begin{enumerate}
-  \item Immutable objects represent Files (\texttt{blob}), Directories (\texttt{tree}), and Changes (\texttt{commit}).
-  \item Objects are content-addressed, by the cryptographic hash of their contents.
-  \item Links to other objects are embedded, forming a Merkle DAG. This
-  provides many useful integrity and workflow properties.
-  \item Most versioning metadata (branches, tags, etc.) are simply pointer references, and thus inexpensive to create and update.
-  \item Version changes only update references or add objects.
-  \item Distributing version changes to other users is simply transferring objects and updating remote references.
-\end{enumerate}
-
-\subsection{Self-Certified Filesystems - SFS}
-
-SFS~\cite{mazieres98, mazieres00} proposed compelling implementations of both (a) distributed trust chains, and (b) egalitarian shared global namespaces. SFS introduced a technique for building \textit{Self-Certified Filesystems}: addressing remote filesystems using the following scheme
-
-\begin{verbatim}
-      /sfs/<Location>:<HostID>
-\end{verbatim}
-
-\noindent where \texttt{Location} is the server network address, and:
-
-\begin{verbatim}
-      HostID = hash(public_key || Location)
-\end{verbatim}
-
-Thus the \textit{name} of an SFS file system certifies its server. The user can verify the public key offered by the server, negotiate a shared secret, and secure all traffic. All SFS instances share a global namespace where name allocation is cryptographic, not gated by any centralized body.
-
-\section{IPFS Design}
-
-IPFS is a distributed file system which synthesizes successful ideas from previous peer-to-peer sytems, including DHTs, BitTorrent, Git, and SFS. The contribution of IPFS is simplifying, evolving, and connecting proven techniques into a single cohesive system, greater than the sum of its parts. IPFS presents a new platform for writing and deploying applications, and a new system for distributing and versioning large data. IPFS could even evolve the web itself.
-
-IPFS is peer-to-peer; no nodes are privileged. IPFS nodes store IPFS objects in local storage. Nodes connect to each other and transfer objects. These objects represent files and other data structures. The IPFS Protocol is divided into a stack of sub-protocols responsible for different functionality:
-
-\begin{enumerate}
-  \item \textbf{Identities} - manage node identity generation and verification. Described in Section 3.1.
-
-  \item \textbf{Network} - manages connections to other peers, uses various underlying network protocols. Configurable. Described in Section 3.2.
-
-  \item \textbf{Routing} - maintains information to locate specific peers and objects. Responds to both local and remote queries. Defaults to a DHT, but is swappable. Described in Section 3.3.
-
-  \item \textbf{Exchange} - a novel block exchange protocol (BitSwap) that governs efficient block distribution. Modelled as a market, weakly incentivizes data replication. Trade Strategies swappable. Described in Section 3.4.
-
-  \item \textbf{Objects} - a Merkle DAG of content-addressed immutable objects with links. Used to represent arbitrary datastructures, e.g. file hierarchies and communication systems. Described in Section 3.5.
-
-  \item \textbf{Files} - versioned file system hierarchy inspired by Git. Described in Section 3.6.
-
-  \item \textbf{Naming} - A self-certifying mutable name system. Described in Section 3.7.
-\end{enumerate}
-
-
-These subsystems are not independent; they are integrated and leverage
-blended properties. However, it is useful to describe them separately,
-building the protocol stack from the bottom up.
-
-Notation: data structures and functions below are specified in Go syntax.
-
-\subsection{Identities}
-
-Nodes are identified by a \texttt{NodeId}, the cryptographic hash\footnote{Throughout this document, \textit{hash} and \textit{checksum} refer specifically to cryptographic hashes of data.} of a public-key, created with S/Kademlia's static crypto puzzle~\cite{baumgart07}. Nodes store their public and private keys (encrypted with a passphrase). Users are free to instatiate a ``new'' node identity on every launch, though that loses accrued network benefits. Nodes are incentivized to remain the same.
-
-\begin{verbatim}
-      type NodeId Multihash
-      type Multihash []byte
-      // self-describing cryptographic hash digest
-
-      type PublicKey []byte
-      type PrivateKey []byte
-      // self-describing keys
-
-      type Node struct {
-        NodeId NodeID
-        PubKey PublicKey
-        PriKey PrivateKey
-      }
-\end{verbatim}
-
-S/Kademlia based IPFS identity generation:
-
-\begin{verbatim}
-      difficulty = <integer parameter>
-      n = Node{}
-      do {
-        n.PubKey, n.PrivKey = PKI.genKeyPair()
-        n.NodeId = hash(n.PubKey)
-        p = count_preceding_zero_bits(hash(n.NodeId))
-      } while (p < difficulty)
-\end{verbatim}
-
-
-Upon first connecting, peers exchange public keys, and check: \texttt{hash(other.PublicKey) equals other.NodeId}. If not, the connection is terminated.
-
-\paragraph{Note on Cryptographic Functions} Rather than locking the system to a particular set of function choices, IPFS favors self-describing values. Hash digest values are stored in \texttt{multihash} format, which includes a short header specifying the hash function used, and the digest length in bytes. Example:
-
-\begin{verbatim}
-    <function code><digest length><digest bytes>
-\end{verbatim}
-
-This allows the system to (a) choose the best function for the use case (e.g. stronger security vs faster performance), and (b) evolve as function choices change. Self-describing values allow using different parameter choices compatibly.
-
-\subsection{Network}
-
-IPFS nodes communicate regularly with hundreds of other nodes in the network, potentially across the wide internet. The IPFS network stack features:
-
-\begin{itemize}
-  \item \textbf{Transport:} IPFS can use any transport protocol, and is best suited for WebRTC DataChannels~\cite{WebRTC} (for browser connectivity) or uTP(LEDBAT~\cite{LEDBAT}).
-  \item \textbf{Reliability:} IPFS can provide reliability if underlying networks do not provide it, using uTP (LEDBAT~\cite{LEDBAT}) or SCTP~\cite{SCTP}.
-  \item \textbf{Connectivity:} IPFS also uses the ICE NAT traversal techniques \cite{ICE}.
-  \item \textbf{Integrity:} optionally checks integrity of messages using a hash checksum.
-  \item \textbf{Authenticity:} optionally checks authenticity of messages by digitally signing them with the sender's private key.
-\end{itemize}
-
-\subsubsection{Note on Peer Addressing}
-
-IPFS can use any network; it does not rely on or assume access to IP. This allows IPFS to be used in overlay networks. IPFS stores addresses as \texttt{multiaddr} formatted byte strings for the underlying network to use. \texttt{multiaddr} provides a way to express addresses and their protocols, including support for encapsulation. For example:
-
-\begin{verbatim}
-  # an SCTP/IPv4 connection
-  /ip4/10.20.30.40/sctp/1234/
-
-  # an SCTP/IPv4 connection proxied over TCP/IPv4
-  /ip4/5.6.7.8/tcp/5678/ip4/1.2.3.4/sctp/1234/
-\end{verbatim}
-
-\subsection{Routing}
-
-IPFS nodes require a routing system that can find (a) other peers' network addresses and (b) peers who can serve particular objects. IPFS achieves this using a DSHT based on S/Kademlia and Coral, using the properties discussed in 2.1. The size of objects and use patterns of IPFS are similar to Coral \cite{freedman04} and Mainline~\cite{wang13}, so the IPFS DHT makes a distinction for values stored based on their size. Small values (equal to or less than \texttt{1KB}) are stored directly on the DHT. For larger values, the DHT stores references, which are the \texttt{NodeIds} of peers who can serve the block.
-
-The interface of this DSHT is the following:
-
-\begin{verbatim}
-
-  type IPFSRouting interface {
-
-    FindPeer(node NodeId)
-    // gets a particular peer's network address
-
-    SetValue(key []bytes, value []bytes)
-    // stores a small metadata value in DHT
-
-    GetValue(key []bytes)
-    // retrieves small metadata value from DHT
-
-    ProvideValue(key Multihash)
-    // announces this node can serve a large value
-
-    FindValuePeers(key Multihash, min int)
-    // gets a number of peers serving a large value
-  }
-\end{verbatim}
-
-Note: different use cases will call for substantially different routing systems (e.g. DHT in wide network, static HT in local network). Thus the IPFS routing system can be swapped for one that fits users' needs. As long as the interface above is met, the rest of the system will continue to function.
-
-\subsection{Block Exchange - BitSwap Protocol}
-
-In IPFS, data distribution happens by exchanging blocks with peers using a
-BitTorrent inspired protocol: BitSwap. Like BitTorrent, BitSwap peers are
-looking to acquire a set of blocks (\texttt{want\_list}), and have another set
-of blocks to offer in exchange (\texttt{have\_list}).
-Unlike BitTorrent, BitSwap is not limited to the blocks in one torrent.
-BitSwap operates as a persistent marketplace where node can acquire the
-blocks they need, regardless of what files those blocks are part of. The
-blocks could come from completely unrelated files in the filesystem.
-Nodes come together to barter in the marketplace.
-
-While the notion of a barter system implies a virtual currency could be
-created, this would require a global ledger to track ownership
-and transfer of the currency. This can be implemented as a BitSwap Strategy, and will be explored in a future paper.
-
-In the base case, BitSwap nodes have to provide direct value to each other
-in the form of blocks. This works fine when the distribution of blocks across
-nodes is complementary, meaning they have what the other wants. Often, this
-will not be the case. In some cases, nodes must \textit{work} for their
-blocks. In the case that a node has nothing that its peers want (or
-nothing at all), it seeks the pieces its peers want, with lower
-priority than what the node wants itself. This incentivizes nodes to cache and
-disseminate rare pieces, even if they are not interested in them directly.
-
-\subsubsection{BitSwap Credit}
-
-The protocol must also incentivize nodes to seed when they do not need
-anything in particular, as they might have the blocks others want. Thus,
-BitSwap nodes send blocks to their peers optimistically, expecting the debt to
-be repaid. But leeches (free-loading nodes that never share) must be protected against. A simple credit-like system solves the problem:
-
-\begin{enumerate}
-  \item Peers track their balance (in bytes verified) with other nodes.
-  \item Peers send blocks to debtor peers probabilistically, according to
-        a function that falls as debt increases.
-\end{enumerate}
-
-Note that if a node decides not to send to a peer, the node subsequently
-ignores the peer for an \texttt{ignore\_cooldown} timeout. This prevents
-senders from trying to game the probability by just causing more dice-rolls.
-(Default BitSwap is 10 seconds).
-
-\subsubsection{BitSwap Strategy}
-
-The differing strategies that BitSwap peers might employ have wildly different effects on the performance of the exchange as a whole. In BitTorrent, while a standard strategy is specified (tit-for-tat), a variety of others have been implemented, ranging from BitTyrant~\cite{levin08} (sharing the least-possible), to BitThief~\cite{levin08} (exploiting a vulnerability and never share), to PropShare~\cite{levin08} (sharing proportionally). A range of strategies (good and malicious) could similarly be implemented by BitSwap peers. The choice of function, then, should aim to:
-
-\begin{enumerate}
-  \item maximize the trade performance for the node, and the whole exchange
-  \item prevent freeloaders from exploiting and degrading the exchange
-  \item be effective with and resistant to other, unknown
-  strategies
-  \item be lenient to trusted peers
-\end{enumerate}
-
-The exploration of the space of such strategies is future work.
-One choice of function that works in practice is a sigmoid, scaled by a
-\textit{debt retio}:
-
-Let the \textit{debt ratio} $ r $ between a node and its peer be:
-  \[ r = \dfrac{\texttt{bytes\_sent}}{\texttt{bytes\_recv} + 1} \]
-
-Given $r$, let the probability of sending to a debtor be:
-  \[ P\Big( \; send \; | \; r \;\Big) = 1 - \dfrac{1}{1 + exp(6-3r)} \]
-
-\begin{figure}
-\centering
-\begin{tikzpicture}[domain=0:4]
-
-    \draw[->] (-0,0) -- (4.2,0) node[right] {$r$};
-    \draw[->] (0,-0) -- (0,1.20) node[above] {$P(\;send\;|\;r\;)$};
-
-    %ticks
-    \foreach \x in {0,...,4}
-      \draw (\x,1pt) -- (\x,-3pt)
-        node[anchor=north] {\x};
-
-    \foreach \y in {1,...,1}
-      \draw (1pt,\y) -- (-3pt,\y)
-        node[anchor=east] {\y};
-
-    \draw[color=red] plot[] function{1 - 1/(1+exp(6-3*x))};
-
-\end{tikzpicture}
-\caption{Probability of Sending as $r$ increases}
-\label{fig:psending-graph}
-\end{figure}
-
-As you can see in Figure \ref{fig:psending-graph}, this function drops off quickly as the nodes'
-\textit{debt ratio} surpasses twice the established credit.
-The \textit{debt ratio} is a measure of trust:
-lenient to debts between nodes that have previously exchanged lots of data
-successfully, and merciless to unknown, untrusted nodes. This
-(a) provides resistance to attackers who would create lots of new nodes
-(sybill attacks),
-(b) protects previously successful trade relationships, even if one of the
-nodes is temporarily unable to provide value, and
-(c) eventually chokes relationships that have deteriorated until they
-improve.
-
-
-% \begin{center}
-% \begin{tabular}{ >{$}c<{$} >{$}c<{$}}
-%   P(\;send\;|\quad r) \;\;\;\;\;&  \\
-%   \hline
-%   \hline
-%   P(\;send\;|\;0.0) =& 1.00 \\
-%   P(\;send\;|\;0.5) =& 1.00 \\
-%   P(\;send\;|\;1.0) =& 0.98 \\
-%   P(\;send\;|\;1.5) =& 0.92 \\
-%   P(\;send\;|\;2.0) =& 0.73 \\
-%   P(\;send\;|\;2.5) =& 0.38 \\
-%   P(\;send\;|\;3.0) =& 0.12 \\
-%   P(\;send\;|\;3.5) =& 0.03 \\
-%   P(\;send\;|\;4.0) =& 0.01 \\
-%   P(\;send\;|\;4.5) =& 0.00 \\
-
-
-% \end{tabular}
-% \end{center}
-
-% TODO look into computing share of the bandwidth, as described in propshare.
-
-\subsubsection{BitSwap Ledger}
-
-BitSwap nodes keep ledgers accounting the transfers with other nodes. This allows nodes to keep track of history and avoid tampering. When activating a connection, BitSwap nodes exchange their ledger information. If it does not match exactly, the ledger is reinitialized from scratch, losing the accrued credit or debt.  It is possible for malicious nodes to purposefully ``lose'' the Ledger, hoping to erase debts. It is unlikely that nodes will have accrued enough debt to warrant also losing the accrued trust; however the partner node is free to count it as misconduct, and refuse to trade.
-
-\begin{verbatim}
-      type Ledger struct {
-        owner      NodeId
-        partner    NodeId
-        bytes_sent int
-        bytes_recv int
-        timestamp  Timestamp
-      }
-\end{verbatim}
-
-Nodes are free to keep the ledger history, though it is not necessary for
-correct operation. Only the current ledger entries are useful. Nodes are
-also free to garbage collect ledgers as necessary, starting with the less
-useful ledgers: the old (peers may not exist anymore) and small.
-
-\subsubsection{BitSwap Specification}
-
-BitSwap nodes follow a simple protocol.
-
-\begin{verbatim}
-    // Additional state kept
-    type BitSwap struct {
-      ledgers map[NodeId]Ledger
-      // Ledgers known to this node, inc inactive
-
-      active map[NodeId]Peer
-      // currently open connections to other nodes
-
-      need_list []Multihash
-      // checksums of blocks this node needs
-
-      have_list []Multihash
-      // checksums of blocks this node has
-    }
-
-    type Peer struct {
-      nodeid NodeId
-      ledger Ledger
-      // Ledger between the node and this peer
-
-      last_seen Timestamp
-      // timestamp of last received message
-
-      want_list []Multihash
-      // checksums of all blocks wanted by peer
-      // includes blocks wanted by peer's peers
-    }
-
-    // Protocol interface:
-    interface Peer {
-      open (nodeid :NodeId, ledger :Ledger);
-      send_want_list (want_list :WantList);
-      send_block (block :Block) -> (complete :Bool);
-      close (final :Bool);
-    }
-\end{verbatim}
-
-
-Sketch of the lifetime of a peer connection:
-\begin{enumerate}
-  \item Open: peers send \texttt{ledgers} until they agree.
-  \item Sending: peers exchange \texttt{want\_lists} and \texttt{blocks}.
-  \item Close: peers deactivate a connection.
-  \item Ignored: (special) a peer is ignored (for the duration of a timeout)
-        if a node's strategy avoids sending
-
-\end{enumerate}
-
-\paragraph{Peer.open(NodeId, Ledger)}
-
-When connecting, a node initializes a connection with a
-\texttt{Ledger}, either stored from a connection in the past or a new one
-zeroed out. Then, sends an Open message with the \texttt{Ledger} to the peer.
-
-Upon receiving an \texttt{Open} message, a peer chooses whether to activate
-the connection. If -- acording to the receiver's \texttt{Ledger} -- the sender
-is not a trusted agent (transmission below zero, or large outstanding debt) the
-receiver may opt to ignore the request. This should be done probabilistically
-with an \texttt{ignore\_cooldown} timeout, as to allow errors to be corrected
-and attackers to be thwarted.
-
-If activating the connection, the receiver initializes a Peer object with the
-local version of the \texttt{Ledger} and sets the \texttt{last\_seen}
-timestamp. Then, it compares the received
-\texttt{Ledger} with its own. If they match exactly, the connections have
-opened. If they do not match, the peer creates a new zeroed out
-\texttt{Ledger} and sends it.
-
-
-\paragraph{Peer.send\_want\_list(WantList)}
-
-While the connection is open, nodes advertise their
-\texttt{want\_list} to all connected peers. This is done (a) upon opening the
-connection, (b) after a randomized periodic timeout, (c) after a change in
-the \texttt{want\_list} and (d) after receiving a new block.
-
-Upon receiving a \texttt{want\_list}, a node stores it. Then, it checks whether
-it has any of the wanted blocks. If so, it sends them according to the
-\textit{BitSwap Strategy} above.
-
-\paragraph{Peer.send\_block(Block)}
-
-Sending a block is straightforward. The node simply transmits the block of
-data. Upon receiving all the data, the receiver computes the Multihash
-checksum to verify it matches the expected one, and returns confirmation.
-
-Upon finalizing the correct transmission of a block, the receiver moves the
-block from \texttt{need\_list} to \texttt{have\_list}, and both the receiver
-and sender update their ledgers to reflect the additional bytes transmitted.
-
-If a transmission verification fails, the sender is either malfunctioning or
-attacking the receiver. The receiver is free to refuse further trades. Note
-that BitSwap expects to operate on a reliable transmission channel, so
-transmission errors -- which could lead to incorrect penalization of an honest
-sender -- are expected to be caught before the data is given to BitSwap.
-
-\paragraph{Peer.close(Bool)}
-
-The \texttt{final} parameter to \texttt{close} signals whether the intention
-to tear down the connection is the sender's or not. If false, the receiver
-may opt to re-open the connection immediatelty. This avoids premature
-closes.
-
-A peer connection should be closed under two conditions:
-\begin{itemize}
-  \item a \texttt{silence\_wait} timeout has expired without receiving any
-        messages from the peer (default BitSwap uses 30 seconds).
-        The node issues \texttt{Peer.close(false)}.
-  \item the node is exiting and BitSwap is being shut down.
-        In this case, the node issues \texttt{Peer.close(true)}.
-\end{itemize}
-
-After a \texttt{close} message, both receiver and sender tear down the
-connection, clearing any state stored. The \texttt{Ledger} may be stored for
-the future, if it is useful to do so.
-
-\paragraph{Notes}
-
-\begin{itemize}
-  \item Non-\texttt{open} messages on an inactive connection should be ignored.
-        In case of a \texttt{send\_block} message, the receiver may check
-        the block to see if it is needed and correct, and if so, use it.
-        Regardless, all such out-of-order messages trigger a
-        \texttt{close(false)} message from the receiver to force
-        re-initialization of the connection.
-\end{itemize}
-
-% TODO: Rate Limiting / Node Silencing
-
-\subsection{Object Merkle DAG}
-
-The DHT and BitSwap allow IPFS to form a massive peer-to-peer system for storing and distributing blocks quickly and robustly. On top of these, IPFS builds a Merkle DAG, a directed acyclic graph where links between objects are cryptographic hashes of the targets embedded in the sources. This is a generalization of the Git data structure. Merkle DAGs provide IPFS many useful properties, including:
-
-\begin{enumerate}
-  \item \textbf{Content Addressing:} all content is uniquely identified by its
-        \texttt{multihash} checksum, \textbf{including links}.
-  \item \textbf{Tamper resistance:} all content is verified with its checksum.
-        If data is tampered with or corrupted, IPFS detects it.
-  \item \textbf{Deduplication:} all objects that hold the exact same content
-        are equal, and only stored once. This is particularly useful with
-        index objects, such as git \texttt{trees} and \texttt{commits}, or common portions of data.
-\end{enumerate}
-
-The IPFS Object format is:
-
-\begin{verbatim}
-
-    type IPFSLink struct {
-      Name string
-      // name or alias of this link
-
-      Hash Multihash
-      // cryptographic hash of target
-
-      Size int
-      // total size of target
-    }
-
-    type IPFSObject struct {
-      links []IPFSLink
-      // array of links
-
-      data []byte
-      // opaque content data
-    }
-
-\end{verbatim}
-
-
-The IPFS Merkle DAG is an extremely flexible way to store data. The only requirements are that object references be (a) content addressed, and (b) encoded in the format above. IPFS grants applications complete control over the data field; applications can use any custom data format they chose, which IPFS may not understand. The separate in-object link table allows IPFS to:
-
-\begin{itemize}
-
-  \item List all object references in an object. For example:
-\begin{verbatim}
-> ipfs ls /XLZ1625Jjn7SubMDgEyeaynFuR84ginqvzb
-XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x 189458 less
-XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5 19441 script
-XLF4hwVHsVuZ78FZK6fozf8Jj9WEURMbCX4 5286 template
-
-<object multihash> <object size> <link name>
-\end{verbatim}
-
-  \item Resolve string path lookups, such as \texttt{foo/bar/baz}. Given an object, IPFS resolves the first path component to a hash in the object's link table, fetches that second object, and repeats with the next component. Thus, string paths can walk the Merkle DAG no matter what the data formats are.
-
-  \item Resolve all objects referenced recursively:
-\begin{verbatim}
-> ipfs refs --recursive \
-  /XLZ1625Jjn7SubMDgEyeaynFuR84ginqvzb
-XLLxhdgJcXzLbtsLRL1twCHA2NrURp4H38s
-XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x
-XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5
-XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z
-...
-\end{verbatim}
-
-\end{itemize}
-
-
-A raw data field and a common link structure are the necessary components for constructing arbitrary data structures on top of IPFS. While it is easy to see how the Git object model fits on top of this DAG, consider these other potential data structures:
-(a) key-value stores
-(b) traditional relational databases
-(c) Linked Data triple stores
-(d) linked document publishing systems
-(e) linked communications platforms
-(f) cryptocurrency blockchains.
-These can all be modeled on top of the IPFS Merkle DAG, which allows any of these systems to use IPFS as a transport protocol for more complex applications.
-
-\subsubsection{Paths}
-
-IPFS objects can be traversed with a string path API. Paths work as they do in traditional UNIX filesystems and the Web. The Merkle DAG links make traversing it easy. Note that full paths in IPFS are of the form:
-
-\begin{verbatim}
-  # format
-  /ipfs/<hash-of-object>/<name-path-to-object>
-
-  # example
-  /ipfs/XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x/foo.txt
-\end{verbatim}
-
-The \texttt{/ipfs} prefix allows mounting into existing systems at a standard mount point without conflict (mount point names are of course configurable). The second path component (first within IPFS) is the hash of an object. This is always the case, as there is no global root. A root object would have the impossible task of handling consistency of millions of objects in a distributed (and possibly disconnected) environment. Instead, we simulate the root with content addressing. All objects are always accessible via their hash. Note this means that given three objects in path \texttt{<foo>/bar/baz}, the last object is accessible by all:
-
-\begin{verbatim}
-    /ipfs/<hash-of-foo>/bar/baz
-    /ipfs/<hash-of-bar>/baz
-    /ipfs/<hash-of-baz>
-\end{verbatim}
-
-\subsubsection{Local Objects}
-
-IPFS clients require some \textit{local storage}, an external system
-on which to store and retrieve local raw data for the objects IPFS manages.
-The type of storage depends on the node's use case.
-In most cases, this is simply a portion of disk space (either managed by
-the native filesystem, by a key-value store such as leveldb~\cite{dean11}, or
-directly by the IPFS client). In others, for example non-persistent caches,
-this storage is just a portion of RAM.
-
-Ultimately, all blocks available in IPFS are in some node's
-\textit{local storage}. When users request objects, they are
-found, downloaded, and stored locally, at least temporarily. This provides
-fast lookup for some configurable amount of time thereafter.
-
-\subsubsection{Object Pinning}
-
-Nodes who wish to ensure the survival of particular objects can do so by
-\texttt{pinning} the objects. This ensures the objects are kept in the node's
-\textit{local storage}. Pinning can be done recursively, to pin down all
-linked descendent objects as well. All objects pointed to are then stored
-locally. This is particularly useful to persist files, including references.
-This also makes IPFS a Web where links are \textit{permanent}, and Objects can
-ensure the survival of others they point to.
-
-
-\subsubsection{Publishing Objects}
-
-IPFS is globally distributed. It is designed to allow the files of millions of users to coexist together. The DHT, with content-hash addressing, allows publishing objects in a fair, secure, and entirely distributed way. Anyone can publish an object by simply adding its key to the DHT, adding themselves as a peer, and giving other users the object's path. Note that Objects are essentially immutable, just like in Git. New versions hash differently, and thus are new objects. Tracking versions is the job of additional versioning objects.
-
-\subsubsection{Object-level Cryptography}
-
-IPFS is equipped to handle object-level cryptographic operations. An encrypted or signed object is wrapped in a special frame that allows encryption or verification of the raw bytes.
-
-\begin{verbatim}
-    type EncryptedObject struct {
-      Object []bytes
-      // raw object data encrypted
-
-      Tag []bytes
-      // optional tag for encryption groups
-    }
-
-    type SignedObject struct {
-      Object []bytes
-      // raw object data signed
-
-      Signature []bytes
-      // hmac signature
-
-      PublicKey []multihash
-      // multihash identifying key
-    }
-\end{verbatim}
-
-Cryptographic operations change the object's hash, defining a different object. IPFS automatically verifies signatures, and can decrypt data with user-specified keychains. Links of encrypted objects are protected as well, making traversal impossible without a decryption key. It is possible to have a parent object encrypted under one key, and a child under another or not at all. This secures links to shared objects.
-
-
-\subsection{Files}
-
-IPFS also defines a set of objects for modeling a versioned filesystem on top of the Merkle DAG. This object model is similar to Git's:
-
-\begin{enumerate}
-  \item \texttt{block}: a variable-size block of data.
-  \item \texttt{list}: a collection of blocks or other lists.
-  \item \texttt{tree}: a collection of blocks, lists, or other trees.
-  \item \texttt{commit}: a snapshot in the version history of a tree.
-\end{enumerate}
-
-I hoped to use the Git object formats exactly, but had to depart to introduce certain features useful in a distributed filesystem, namely (a) fast size lookups (aggregate byte sizes have been added to objects), (b) large file deduplication (adding a \texttt{list} object), and (c) embedding of \texttt{commits} into \texttt{trees}. However, IPFS File objects are close enough to Git that conversion between the two is possible. Also, a set of Git objects can be introduced to convert without losing any information (unix file permissions, etc).
-
-Notation: File object formats below use JSON. Note that this structure is actually binary encoded using protobufs, though ipfs includes import/export to JSON.
-
-\subsubsection{File Object: \texttt{blob}}
-
-The \texttt{blob} object contains an addressable unit of data, and
-represents a file. IPFS Blocks are like Git blobs or filesystem data blocks. They store the users' data. Note that IPFS files can be represented by both \texttt{lists} and \texttt{blobs}. Blobs have no links.
-
-\begin{verbatim}
-{
-  "data": "some data here"
-  // blobs have no links
-}
-\end{verbatim}
-
-\subsubsection{File Object: \texttt{list}}
-
-The \texttt{list} object represents a large or deduplicated file made up of
-several IPFS \texttt{blobs} concatenated together. \texttt{lists} contain
-an ordered sequence of \texttt{blob} or \texttt{list} objects.
-In a sense, the IPFS \texttt{list} functions like a filesystem file with
-indirect blocks. Since \texttt{lists} can contain other \texttt{lists}, topologies including linked lists and balanced trees are possible. Directed graphs where the same node appears in multiple places allow in-file deduplication. Of course, cycles are not possible, as enforced by hash addressing.
-
-\begin{verbatim}
-{
-  "data": ["blob", "list", "blob"],
-    // lists have an array of object types as data
-  "links": [
-    { "hash": "XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x",
-      "size": 189458 },
-    { "hash": "XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5",
-      "size": 19441 },
-    { "hash": "XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z",
-      "size": 5286 }
-    // lists have no names in links
-  ]
-}
-\end{verbatim}
-
-
-\begin{figure}
-\centering
-\begin{tikzpicture}[->,>=stealth',auto,thick,
-  minimum height=2em,minimum width=5em]
-
-  \tikzstyle{ghost}=[rectangle,rounded corners=.8ex];
-  \tikzstyle{block}=[rectangle,draw,fill=blue!20,rounded corners=.8ex];
-  \tikzstyle{list}=[rectangle,draw,fill=cyan!20,rounded corners=.8ex];
-  \tikzstyle{tree}=[rectangle,draw,fill=green!20,rounded corners=.8ex];
-  \tikzstyle{commit}=[rectangle,draw,fill=magenta!20,rounded corners=.8ex];
-  \tikzstyle{every path}=[draw]
-
-  \node[commit] (ccc111) {ccc111};
-  \node[tree]   (ttt111) [below=3em of ccc111] {ttt111};
-  \node[tree]   (ttt222) [below left=3em and 3em of ttt111] {ttt222};
-  \node[tree]   (ttt333) [below=3em of ttt111] {ttt333};
-  \node[ghost]  (ghost1) [below right=3em and 3em of ttt111] {};
-  \node[list]   (lll111) [below=3em of ttt333] {lll111};
-  \node[block]  (bbb111) [below=3em of ttt222] {bbb111};
-  \node[block]  (bbb222) [below right=3em and 3em of ttt333] {bbb222};
-  \node[block]  (bbb333) [below left=3em and 3em of lll111] {bbb333};
-  \node[block]  (bbb444) [below=3em of lll111] {bbb444};
-  \node[block]  (bbb555) [below right=3em and 3em of lll111] {bbb555};
-
-  \path[every node/.style={font=\sffamily\small}]
-    (ccc111) edge[out=-90,in=90] (ttt111)
-    (ttt111) edge[out=-90,in=90] (ttt222)
-             edge[out=-90,in=90] (ttt333)
-             to  [out=-90,in=90]  (ghost1)
-             to  [out=-90,in=90] (bbb222)
-    (ttt222) edge[out=-90,in=90] (bbb111)
-    (ttt333) edge[out=-90,in=90] (lll111)
-             edge[out=-90,in=90] (bbb222)
-    (lll111) edge[out=-90,in=90] (bbb333)
-             edge[out=-90,in=90] (bbb444)
-             edge[out=-90,in=90] (bbb555)
-  ;
-
-\end{tikzpicture}
-\caption{Sample Object Graph} \label{fig:sample-object-graph}
-
-\begin{verbatim}
-    > ipfs file-cat <ccc111-hash> --json
-    {
-      "data": {
-        "type": "tree",
-        "date": "2014-09-20 12:44:06Z",
-        "message": "This is a commit message."
-      },
-      "links": [
-        { "hash": "<ccc000-hash>",
-          "name": "parent", "size": 25309 },
-        { "hash": "<ttt111-hash>",
-          "name": "object", "size": 5198 },
-        { "hash": "<aaa111-hash>",
-          "name": "author", "size": 109 }
-      ]
-    }
-
-    > ipfs file-cat <ttt111-hash> --json
-    {
-      "data": ["tree", "tree", "blob"],
-      "links": [
-        { "hash": "<ttt222-hash>",
-          "name": "ttt222-name", "size": 1234 },
-        { "hash": "<ttt333-hash>",
-          "name": "ttt333-name", "size": 3456 },
-        { "hash": "<bbb222-hash>",
-          "name": "bbb222-name", "size": 22 }
-      ]
-    }
-
-    > ipfs file-cat <bbb222-hash> --json
-    {
-      "data": "blob222 data",
-      "links": []
-    }
-\end{verbatim}
-\caption{Sample Objects} \label{fig:sample-objects}
-\end{figure}
-
-
-\subsubsection{File Object: \texttt{tree}}
-
-The \texttt{tree} object in IPFS is similar to Git's: it represents a
-directory, a map of names to hashes. The hashes reference \texttt{blobs}, \texttt{lists}, other \texttt{trees}, or \texttt{commits}. Note that traditional path naming is already implemented by the Merkle DAG.
-
-\begin{verbatim}
-{
-  "data": ["blob", "list", "blob"],
-    // trees have an array of object types as data
-  "links": [
-    { "hash": "XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x",
-      "name": "less", "size": 189458 },
-    { "hash": "XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5",
-      "name": "script", "size": 19441 },
-    { "hash": "XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z",
-      "name": "template", "size": 5286 }
-    // trees do have names
-  ]
-}
-\end{verbatim}
-
-
-\subsubsection{File Object: \texttt{commit}}
-
-The \texttt{commit} object in IPFS represents a snapshot in the version history of any object. It is similar to Git's, but can reference any type of object. It also links to author objects.
-
-\begin{verbatim}
-{
-  "data": {
-    "type": "tree",
-    "date": "2014-09-20 12:44:06Z",
-    "message": "This is a commit message."
-  },
-  "links": [
-    { "hash": "XLa1qMBKiSEEDhojb9FFZ4tEvLf7FEQdhdU",
-      "name": "parent", "size": 25309 },
-    { "hash": "XLGw74KAy9junbh28x7ccWov9inu1Vo7pnX",
-      "name": "object", "size": 5198 },
-    { "hash": "XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm",
-      "name": "author", "size": 109 }
-  ]
-}
-\end{verbatim}
-
-\subsubsection{Version control}
-
-The \texttt{commit} object represents a particular snapshot in the version
-history of an object. Comparing the objects (and children) of two
-different commits reveals the differences between two versions of the
-filesystem. As long as a single \texttt{commit} and all the children objects
-it references are accessible, all preceding versions are retrievable and the
-full history of the filesystem changes can be accessed. This falls out
-of the Merkle DAG object model.
-
-The full power of the Git version control tools is available to IPFS users. The object model is compatible, though not the same. It is possible to (a) build a version of the Git tools modified to use the IPFS object graph, (b) build a mounted FUSE filesystem that mounts an IPFS \texttt{tree} as a Git repo, translating Git filesystem read/writes to the IPFS formats.
-
-
-\subsubsection{Filesystem Paths}
-
-As we saw in the Merkle DAG section, IPFS objects can be traversed with a string path API. The IPFS File Objects are designed to make mounting IPFS onto a UNIX filesystem simpler. They restrict \texttt{trees} to have no data, in order to represent them as directories. And \texttt{commits} can either be represented as directories or hidden from the filesystem entirely.
-
-\subsubsection{Splitting Files into Lists and Blob}
-
-One of the main challenges with versioning and distributing large files is finding the right way to split them into independent blocks. Rather than assume it can make the right decision for every type of file, IPFS offers the following alternatives:
-
-\begin{enumerate}
-  \item[(a)] Use Rabin Fingerprints \cite{RabinFingerprints} as in LBFS \cite{LBFS} to pick suitable block boundaries.
-  \item[(b)] Use the rsync \cite{rsync} rolling-checksum algorithm, to detect blocks that have changed between versions.
-  \item[(c)] Allow users to specify block-splitting functions highly tuned for specific files.
-\end{enumerate}
-
-\subsubsection{Path Lookup Performance}
-
-Path-based access traverses the object graph. Retrieving
-each object requires looking up its key in the DHT,
-connecting to peers, and retrieving its blocks. This is considerable
-overhead, particularly when looking up paths with many components.
-This is mitigated by:
-
-\begin{itemize}
-  \item \textbf{tree caching}: since all objects are hash-addressed, they
-        can be cached indefinitely. Additionally, \texttt{trees} tend to be
-        small in size so IPFS prioritizes caching them over \texttt{blobs}.
-  \item \textbf{flattened trees}: for any given \texttt{tree}, a special
-        \texttt{flattened tree} can be constructed to list all objects
-        reachable from the \texttt{tree}. Names in the \texttt{flattened tree}
-        would really be paths parting from the original tree, with slashes.
-\end{itemize}
-
-For example, \texttt{flattened tree} for \texttt{ttt111} above:
-
-\begin{verbatim}
-{
-"data":
-  ["tree", "blob", "tree", "list", "blob" "blob"],
-"links": [
-  { "hash": "<ttt222-hash>", "size": 1234
-    "name": "ttt222-name" },
-  { "hash": "<bbb111-hash>", "size": 123,
-    "name": "ttt222-name/bbb111-name" },
-  { "hash": "<ttt333-hash>", "size": 3456,
-    "name": "ttt333-name" },
-  { "hash": "<lll111-hash>", "size": 587,
-    "name": "ttt333-name/lll111-name"},
-  { "hash": "<bbb222-hash>", "size": 22,
-    "name": "ttt333-name/lll111-name/bbb222-name" },
-  { "hash": "<bbb222-hash>", "size": 22
-    "name": "bbb222-name" }
-] }
-\end{verbatim}
-
-
-\subsection{IPNS: Naming and Mutable State}
-
-So far, the IPFS stack forms a peer-to-peer block exchange constructing a content-addressed DAG of objects. It serves to publish and retrieve immutable objects. It can even track the version history of these objects. However, there is a critical component missing: mutable naming. Without it, all communication of new content must happen off-band, sending IPFS links. What is required is some way to retrieve mutable state at \textit{the same path}.
-
-It is worth stating why -- if mutable data is necessary in the end -- we worked hard to build up an \textit{immutable} Merkle DAG. Consider the properties of IPFS that fall out of the Merkle DAG: objects can be (a) retrieved via their hash, (b) integrity checked, (c) linked to others, and (d) cached indefinitely. In a sense:
-
-\begin{center}
-  Objects are \textbf{permanent}
-\end{center}
-
-\noindent These are the critical properties of a high-performance distributed system, where data is expensive to move across network links. Object content addressing constructs a web with (a) significant bandwidth optimizations, (b) untrusted content serving, (c) permanent links, and (d) the ability to make full permanent backups of any object and its references.
-
-The Merkle DAG, immutable content-addressed objects, and Naming, mutable pointers to the Merkle DAG, instantiate a dichotomy present in many successful distributed systems. These include the Git Version Control System, with its immutable objects and mutable references; and Plan9 \cite{Plan9}, the distributed successor to UNIX, with its mutable Fossil \cite{Fossil} and immutable Venti \cite{Venti} filesystems. LBFS \cite{LBFS} also uses mutable indices and immutable chunks.
-
-\subsubsection{Self-Certified Names}
-
-Using the naming scheme from SFS~\cite{mazieres98, mazieres00} gives us a way to construct self-certified names, in a cryptographically assigned global namespace, that are mutable. The IPFS scheme is as follows.
-
-\begin{enumerate}
-  \item  Recall that in IPFS:
-
-\begin{verbatim}
-NodeId = hash(node.PubKey)
-\end{verbatim}
-
-  \item We assign every user a mutable namespace at:
-
-\begin{verbatim}
-/ipns/<NodeId>
-\end{verbatim}
-
-  \item A user can publish an Object to this path \textbf{Signed} by her private key, say at:
-
-\begin{verbatim}
-/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/
-\end{verbatim}
-
-  \item When other users retrieve the object, they can check the signature matches the public key and NodeId. This verifies the authenticity of the Object published by the user, achieving mutable state retrival.
-
-\end{enumerate}
-
-Note the following details:
-
-\begin{itemize}
-  \item The \texttt{ipns} (InterPlanetary Name Space) separate prefix is to establish an easily recognizable distinction between \textit{mutable} and \textit{immutable} paths, for both programs and human readers.
-
-  \item Because this is \textit{not} a content-addressed object, publishing it relies on the only mutable state distribution system in IPFS, the Routing system. The process is (1) publish the object as a regular immutable IPFS object, (2) publish its hash on the Routing system as a metadata value:
-
-\begin{verbatim}
-routing.setValue(NodeId, <ns-object-hash>)
-\end{verbatim}
-
-  \item Any links in the Object published act as sub-names in the namespace:
-\end{itemize}
-
-\begin{verbatim}
-/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/
-/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/docs
-/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/docs/ipfs
-\end{verbatim}
-
-\begin{itemize}
-  \item it is advised to publish a \texttt{commit} object, or some other object with a version history, so that clients may be able to find old names. This is left as a user option, as it is not always desired.
-
-\end{itemize}
-
-Note that when users publish this Object, it cannot be published in the same way
-
-\subsubsection{Human Friendly Names}
-
-While IPNS is indeed a way of assigning and reassigning names, it is not very user friendly, as it exposes long hash values as names, which are notoriously hard to remember. These work for URLs, but not for many kinds of offline transmission. Thus, IPFS increases the user-friendliness of IPNS with the following techniques.
-
-\paragraph{Peer Links}
-
-As encouraged by SFS, users can link other users' Objects directly into their own Objects (namespace, home, etc). This has the benefit of also creating a web of trust (and supports the old Certificate Authority model):
-
-\begin{verbatim}
-# Alice links to bob Bob
-ipfs link /<alice-pk-hash>/friends/bob /<bob-pk-hash>
-
-# Eve links to Alice
-ipfs link /<eve-pk-hash/friends/alice /<alice-pk-hash>
-
-# Eve also has access to Bob
-/<eve-pk-hash/friends/alice/friends/bob
-
-# access Verisign certified domains
-/<verisign-pk-hash>/foo.com
-\end{verbatim}
-
-
-\paragraph{DNS TXT IPNS Records}
-
-If \texttt{/ipns/<domain>} is a valid domain name, IPFS
-looks up key \texttt{ipns} in its \texttt{DNS TXT} records. IPFS
-interprets the value as either an object hash or another IPNS path:
-
-\begin{verbatim}
-    # this DNS TXT record
-    ipfs.benet.ai. TXT "ipfs=XLF2ipQ4jD3U ..."
-
-    # behaves as symlink
-    ln -s /ipns/XLF2ipQ4jD3U /ipns/fs.benet.ai
-\end{verbatim}
-
-
-\paragraph{Proquint Pronounceable Identifiers}
-
-There have always been schemes to encode binary into pronounceable words. IPNS supports Proquint \cite{Proquint}. Thus:
-
-\begin{verbatim}
-    # this proquint phrase
-    /ipns/dahih-dolij-sozuk-vosah-luvar-fuluh
-
-    # will resolve to corresponding
-    /ipns/KhAwNprxYVxKqpDZ
-\end{verbatim}
-
-\paragraph{Name Shortening Services}
-
-Services are bound to spring up that will provide name shortening as a service, offering up their namespaces to users. This is similar to what we see today with DNS and Web URLs:
-
-\begin{verbatim}
-    # User can get a link from
-    /ipns/shorten.er/foobar
-
-    # To her own namespace
-    /ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm
-\end{verbatim}
-
-\subsection{Using IPFS}
-
-IPFS is designed to be used in a number of different ways. Here are just some of the usecases I will be pursuing:
-
-\begin{enumerate}
-  \item As a mounted global filesystem, under \texttt{/ipfs} and \texttt{/ipns}.
-  \item As a mounted personal sync folder that automatically versions, publishes, and backs up any writes.
-  \item As an encrypted file or data sharing system.
-  \item As a versioned package manager for \textit{all} software.
-  \item As the root filesystem of a Virtual Machine.
-  \item As the boot filesystem of a VM (under a hypervisor).
-  \item As a database: applications can write directly to the Merkle DAG data model and get all the versioning, caching, and distribution IPFS provides.
-  \item As a linked (and encrypted) communications platform.
-  \item As an integrity checked CDN for large files (without SSL).
-  \item As an encrypted CDN.
-  \item On webpages, as a web CDN.
-  \item As a new Permanent Web where links do not die.
-\end{enumerate}
-
-The IPFS implementations target:
-
-\begin{enumerate}
-  \item[(a)] an IPFS library to import in your own applications.
-  \item[(b)] commandline tools to manipulate objects directly.
-  \item[(c)] mounted file systems, using FUSE \cite{FUSE} or as kernel modules.
-\end{enumerate}
-
-
-\section{The Future}
-
-The ideas behind IPFS are the product of decades of successful distributed systems research in academia and open source. IPFS synthesizes many of the best ideas from the most successful systems to date. Aside from BitSwap, which is a novel protocol, the main contribution of IPFS is this coupling of systems and synthesis of designs.
-
-
-IPFS is an ambitious vision of new decentralized Internet infrastructure, upon which many different kinds of applications can be built. At the bare minimum, it can be used as a global, mounted, versioned filesystem and namespace, or as the next generation file sharing system. At its best, it could push the web to new horizons, where publishing valuable information does not impose hosting it on the publisher but upon those interested, where users can trust the content they receive without trusting the peers they receive it from, and where old but important files do not go missing. IPFS looks forward to bringing us toward the Permanent Web.
-
-
-\section{Acknowledgments}
-
-IPFS is the synthesis of many great ideas and systems. It would be impossible to dare such ambitious goals without standing on the shoulders of such giants. Personal thanks to David Dalrymple, Joe Zimmerman, and Ali Yahya for long discussions on many of these ideas, in particular: exposing the general Merkle DAG (David, Joe), rolling hash blocking (David), and s/kademlia sybill protection (David, Ali). And special thanks to David Mazieres, for his ever brilliant ideas.
-
-\section{References TODO}
-
-\bibliographystyle{abbrv}
-\bibliography{ipfs-cap2pfs}
-%\balancecolumns
-%\subsection{References}
-\end{document}

+ 0 - 1651
papers/ipfs-cap2pfs/sig-alternate.cls

@@ -1,1651 +0,0 @@
-% SIG-ALTERNATE.CLS - VERSION 2.5
-% "COMPATIBLE" WITH THE "ACM_PROC_ARTICLE-SP.CLS" V3.2SP
-% Gerald Murray - May 23rd 2012
-%
-% ---- Start of 'updates'  ----
-% Changed $10 fee to $15 -- May 2012  --  Gerry
-% Changed $5 fee to $10 --  April 2009 -- Gerry
-% April 22nd. 2009 - Fixed 'Natbib' incompatibility problem - Gerry
-% April 22nd. 2009 - Fixed 'Babel' incompatibility problem - Gerry
-% April 22nd. 2009 - Inserted various bug-fixes and improvements - Gerry
-%
-% To produce Type 1 fonts in the document plus allow for 'normal LaTeX accenting' in the critical areas;
-% title, author block, section-heads, confname, etc. etc. 
-% i.e. the whole purpose of this version update is to NOT resort to 'inelegant accent patches'.
-% After much research, three extra .sty packages were added to the the tail (ae, aecompl, aeguill) to solve,
-% in particular, the accenting problem(s). We _could_ ask authors (via instructions/sample file) to 'include' these in
-% the source .tex file - in the preamble - but if everything is already provided ('behind the scenes' - embedded IN the .cls)
-% then this is less work for authors and also makes everything appear 'vanilla'.
-% NOTE: all 'patchwork accenting" has been commented out (here) and is no longer 'used' in the sample .tex file (either).
-% Gerry June 2007
-%
-% Patch for accenting in conference name/location. Gerry May 3rd. 2007
-% Rule widths changed to .5, author count (>6) fixed, roll-back for Type 3 problem. Gerry March 20th. 2007
-% Changes made to 'modernize' the fontnames but esp. for MikTeX users V2.4/2.5 - Nov. 30th. 2006
-% Updated the \email definition to allow for its use inside of 'shared affiliations' - Nov. 30th. 2006
-% Fixed the 'section number depth value' - Nov. 30th. 2006
-%
-% Footnotes inside table cells using \minipage (Oct. 2002)
-% Georgia fixed bug in sub-sub-section numbering in paragraphs (July 29th. 2002)
-% JS/GM fix to vertical spacing before Proofs (July 30th. 2002)
-%
-% Made the Permission Statement / Conference Info / Copyright Info
-% 'user definable' in the source .tex file OR automatic if
-% not specified.
-%
-% Allowance made to switch default fonts between those systems using
-% normal/modern font names and those using 'Type 1' or 'Truetype' fonts.
-% See LINE NUMBER 255 for details.
-% Also provided for enumerated/annotated Corollaries 'surrounded' by
-% enumerated Theorems (line 848).
-% Gerry November 11th. 1999
-%
-% ---- End of 'updates' ----
-%
-\def\fileversion{v2.5}          % for ACM's tracking purposes
-\def\filedate{May 23, 2012}    % Gerry Murray's tracking data
-\def\docdate {Wednesday 23rd. May 2012} % Gerry Murray (with deltas to doc}
-\usepackage{epsfig}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{amsfonts}
-% Need this for accents in Arial/Helvetica
-%\usepackage[T1]{fontenc}  % Gerry March 12, 2007 - causes Type 3 problems (body text)
-%\usepackage{textcomp}
-%
-% SIG-ALTERNATE DOCUMENT STYLE
-% G.K.M. Tobin August-October 1999
-%    adapted from ARTICLE document style by Ken Traub, Olin Shivers
-%    also using elements of esub2acm.cls
-% HEAVILY MODIFIED, SUBSEQUENTLY, BY GERRY MURRAY 2000
-% ARTICLE DOCUMENT STYLE -- Released 16 March 1988
-%    for LaTeX version 2.09
-% Copyright (C) 1988 by Leslie Lamport
-%
-%
-%%% sig-alternate.cls is an 'ALTERNATE' document style for producing
-%%% two-column camera-ready pages for ACM conferences.
-%%% THIS FILE DOES NOT STRICTLY ADHERE TO THE SIGS (BOARD-ENDORSED)
-%%% PROCEEDINGS STYLE. It has been designed to produce a 'tighter'
-%%% paper in response to concerns over page budgets.
-%%% The main features of this style are:
-%%%
-%%% 1)  Two columns.
-%%% 2)  Side and top margins of 4.5pc, bottom margin of 6pc, column gutter of
-%%%     2pc, hence columns are 20pc wide and 55.5pc tall.  (6pc =3D 1in, approx)
-%%% 3)  First page has title information, and an extra 6pc of space at the
-%%%     bottom of the first column for the ACM copyright notice.
-%%% 4)  Text is 9pt on 10pt baselines; titles (except main) are 9pt bold.
-%%%
-%%%
-%%% There are a few restrictions you must observe:
-%%%
-%%% 1)  You cannot change the font size; ACM wants you to use 9pt.
-%%% 3)  You must start your paper with the \maketitle command.  Prior to the
-%%%     \maketitle you must have \title and \author commands.  If you have a
-%%%     \date command it will be ignored; no date appears on the paper, since
-%%%     the proceedings will have a date on the front cover.
-%%% 4)  Marginal paragraphs, tables of contents, lists of figures and tables,
-%%%     and page headings are all forbidden.
-%%% 5)  The `figure' environment will produce a figure one column wide; if you
-%%%     want one that is two columns wide, use `figure*'.
-%%%
-%
-%%% Copyright Space:
-%%% This style automatically reserves 1" blank space at the bottom of page 1/
-%%% column 1.  This space can optionally be filled with some text using the
-%%% \toappear{...} command.  If used, this command must be BEFORE the \maketitle
-%%% command.  If this command is defined AND [preprint] is on, then the
-%%% space is filled with the {...} text (at the bottom); otherwise, it is
-%%% blank.  If you use \toappearbox{...} instead of \toappear{...} then a
-%%% box will be drawn around the text (if [preprint] is on).
-%%%
-%%% A typical usage looks like this:
-%%%     \toappear{To appear in the Ninth AES Conference on Medievil Lithuanian
-%%%               Embalming Technique, June 1991, Alfaretta, Georgia.}
-%%% This will be included in the preprint, and left out of the conference
-%%% version.
-%%%
-%%% WARNING:
-%%% Some dvi-ps converters heuristically allow chars to drift from their
-%%% true positions a few pixels. This may be noticeable with the 9pt sans-serif
-%%% bold font used for section headers.
-%%% You may turn this hackery off via the -e option:
-%%%     dvips -e 0 foo.dvi >foo.ps
-%%%
-\typeout{Document Class 'sig-alternate' <23rd. May '12>.  Modified by G.K.M. Tobin/Gerry Murray}
-\typeout{Based in part upon document Style `acmconf' <22 May 89>. Hacked 4/91 by}
-\typeout{shivers@cs.cmu.edu, 4/93 by theobald@cs.mcgill.ca}
-\typeout{Excerpts were taken from (Journal Style) 'esub2acm.cls'.}
-\typeout{****** Bugs/comments/suggestions/technicalities to Gerry Murray -- murray@hq.acm.org ******}
-\typeout{Questions on the style, SIGS policies, etc. to Adrienne Griscti griscti@acm.org}
-\oddsidemargin 4.5pc
-\evensidemargin 4.5pc
-\advance\oddsidemargin by -1in  % Correct for LaTeX gratuitousness
-\advance\evensidemargin by -1in % Correct for LaTeX gratuitousness
-\marginparwidth 0pt             % Margin pars are not allowed.
-\marginparsep 11pt              % Horizontal space between outer margin and
-                                % marginal note
-
-                                % Top of page:
-\topmargin 4.5pc                % Nominal distance from top of page to top of
-                                % box containing running head.
-\advance\topmargin by -1in      % Correct for LaTeX gratuitousness
-\headheight 0pt                 % Height of box containing running head.
-\headsep 0pt                    % Space between running head and text.
-                                % Bottom of page:
-\footskip 30pt                  % Distance from baseline of box containing foot
-                                % to baseline of last line of text.
-\@ifundefined{footheight}{\newdimen\footheight}{}% this is for LaTeX2e
-\footheight 12pt                % Height of box containing running foot.
-
-%% Must redefine the top margin so there's room for headers and
-%% page numbers if you are using the preprint option. Footers
-%% are OK as is. Olin.
-\advance\topmargin by -37pt     % Leave 37pt above text for headers
-\headheight 12pt                % Height of box containing running head.
-\headsep 25pt                   % Space between running head and text.
-
-\textheight 666pt       % 9 1/4 column height
-\textwidth 42pc         % Width of text line.
-                        % For two-column mode:
-\columnsep 2pc          %    Space between columns
-\columnseprule 0pt      %    Width of rule between columns.
-\hfuzz 1pt              % Allow some variation in column width, otherwise it's
-                        % too hard to typeset in narrow columns.
-
-\footnotesep 5.6pt      % Height of strut placed at the beginning of every
-                        % footnote =3D height of normal \footnotesize strut,
-                        % so no extra space between footnotes.
-
-\skip\footins 8.1pt plus 4pt minus 2pt  % Space between last line of text and
-                                        % top of first footnote.
-\floatsep 11pt plus 2pt minus 2pt       % Space between adjacent floats moved
-                                        % to top or bottom of text page.
-\textfloatsep 18pt plus 2pt minus 4pt   % Space between main text and floats
-                                        % at top or bottom of page.
-\intextsep 11pt plus 2pt minus 2pt      % Space between in-text figures and
-                                        % text.
-\@ifundefined{@maxsep}{\newdimen\@maxsep}{}% this is for LaTeX2e
-\@maxsep 18pt                           % The maximum of \floatsep,
-                                        % \textfloatsep and \intextsep (minus
-                                        % the stretch and shrink).
-\dblfloatsep 11pt plus 2pt minus 2pt    % Same as \floatsep for double-column
-                                        % figures in two-column mode.
-\dbltextfloatsep 18pt plus 2pt minus 4pt% \textfloatsep for double-column
-                                        % floats.
-\@ifundefined{@dblmaxsep}{\newdimen\@dblmaxsep}{}% this is for LaTeX2e
-\@dblmaxsep 18pt                        % The maximum of \dblfloatsep and
-                                        % \dbltexfloatsep.
-\@fptop 0pt plus 1fil    % Stretch at top of float page/column. (Must be
-                         % 0pt plus ...)
-\@fpsep 8pt plus 2fil    % Space between floats on float page/column.
-\@fpbot 0pt plus 1fil    % Stretch at bottom of float page/column. (Must be
-                         % 0pt plus ... )
-\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
-\@dblfpsep 8pt plus 2fil % Space between floats on float page.
-\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
-                         % 0pt plus ... )
-\marginparpush 5pt       % Minimum vertical separation between two marginal
-                         % notes.
-
-\parskip 0pt plus 1pt            % Extra vertical space between paragraphs.
-\parindent 9pt  % GM July 2000 / was 0pt - width of paragraph indentation.
-\partopsep 2pt plus 1pt minus 1pt% Extra vertical space, in addition to
-                                 % \parskip and \topsep, added when user
-                                 % leaves blank line before environment.
-
-\@lowpenalty   51       % Produced by \nopagebreak[1] or \nolinebreak[1]
-\@medpenalty  151       % Produced by \nopagebreak[2] or \nolinebreak[2]
-\@highpenalty 301       % Produced by \nopagebreak[3] or \nolinebreak[3]
-
-\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
-\@endparpenalty   -\@lowpenalty % After a list or paragraph environment.
-\@itempenalty     -\@lowpenalty % Between list items.
-
-%\@namedef{ds@10pt}{\@latexerr{The `10pt' option is not allowed in the `acmconf'
-\@namedef{ds@10pt}{\ClassError{The `10pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-%\@namedef{ds@11pt}{\@latexerr{The `11pt' option is not allowed in the `acmconf'
-\@namedef{ds@11pt}{\ClassError{The `11pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-%\@namedef{ds@12pt}{\@latexerr{The `12pt' option is not allowed in the `acmconf'
-\@namedef{ds@12pt}{\ClassError{The `12pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-
-\@options
-
-\lineskip 2pt           % \lineskip is 1pt for all font sizes.
-\normallineskip 2pt
-\def\baselinestretch{1}
-
-\abovedisplayskip 9pt plus2pt minus4.5pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip  \z@ plus3pt%
-\belowdisplayshortskip  5.4pt plus3pt minus3pt%
-\let\@listi\@listI     % Setting of \@listi added 9 Jun 87
-
-\def\small{\@setsize\small{9pt}\viiipt\@viiipt
-\abovedisplayskip 7.6pt plus 3pt minus 4pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip \z@ plus2pt%
-\belowdisplayshortskip 3.6pt plus2pt minus 2pt
-\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
-\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
-\itemsep \parsep}}
-
-\def\footnotesize{\@setsize\footnotesize{9pt}\ixpt\@ixpt
-\abovedisplayskip 6.4pt plus 2pt minus 4pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip \z@ plus 1pt%
-\belowdisplayshortskip 2.7pt plus 1pt minus 2pt
-\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
-\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
-\itemsep \parsep}}
-
-\newcount\aucount
-\newcount\originalaucount
-\newdimen\auwidth
-\auwidth=\textwidth
-\newdimen\auskip
-\newcount\auskipcount
-\newdimen\auskip
-\global\auskip=1pc
-\newdimen\allauboxes
-\allauboxes=\auwidth
-\newtoks\addauthors
-\newcount\addauflag
-\global\addauflag=0 %Haven't shown additional authors yet
-
-\newtoks\subtitletext
-\gdef\subtitle#1{\subtitletext={#1}}
-
-\gdef\additionalauthors#1{\addauthors={#1}}
-
-\gdef\numberofauthors#1{\global\aucount=#1
-\ifnum\aucount>3\global\originalaucount=\aucount \global\aucount=3\fi %g}  % 3 OK - Gerry March 2007
-\global\auskipcount=\aucount\global\advance\auskipcount by 1
-\global\multiply\auskipcount by 2
-\global\multiply\auskip by \auskipcount
-\global\advance\auwidth by -\auskip
-\global\divide\auwidth by \aucount}
-
-% \and was modified to count the number of authors.  GKMT 12 Aug 1999
-\def\alignauthor{%                  % \begin{tabular}
-\end{tabular}%
-  \begin{tabular}[t]{p{\auwidth}}\centering}%
-
-%  *** NOTE *** NOTE *** NOTE *** NOTE ***
-%  If you have 'font problems' then you may need
-%  to change these, e.g. 'arialb' instead of "arialbd".
-%  Gerry Murray 11/11/1999
-%  *** OR ** comment out block A and activate block B or vice versa.
-% **********************************************
-%
-%  -- Start of block A -- (Type 1 or Truetype fonts)
-%\newfont{\secfnt}{timesbd at 12pt} % was timenrb originally - now is timesbd
-%\newfont{\secit}{timesbi at 12pt}   %13 Jan 00 gkmt
-%\newfont{\subsecfnt}{timesi at 11pt} % was timenrri originally - now is timesi
-%\newfont{\subsecit}{timesbi at 11pt} % 13 Jan 00 gkmt -- was times changed to timesbi gm 2/4/2000
-%                         % because "normal" is italic, "italic" is Roman
-%\newfont{\ttlfnt}{arialbd at 18pt} % was arialb originally - now is arialbd
-%\newfont{\ttlit}{arialbi at 18pt}    % 13 Jan 00 gkmt
-%\newfont{\subttlfnt}{arial at 14pt} % was arialr originally - now is arial
-%\newfont{\subttlit}{ariali at 14pt} % 13 Jan 00 gkmt
-%\newfont{\subttlbf}{arialbd at 14pt}  % 13 Jan 00 gkmt
-%\newfont{\aufnt}{arial at 12pt} % was arialr originally - now is arial
-%\newfont{\auit}{ariali at 12pt} % 13 Jan 00 gkmt
-%\newfont{\affaddr}{arial at 10pt} % was arialr originally - now is arial
-%\newfont{\affaddrit}{ariali at 10pt} %13 Jan 00 gkmt
-%\newfont{\eaddfnt}{arial at 12pt} % was arialr originally - now is arial
-%\newfont{\ixpt}{times at 9pt} % was timenrr originally - now is times
-%\newfont{\confname}{timesi at 8pt} % was timenrri - now is timesi
-%\newfont{\crnotice}{times at 8pt} % was timenrr originally - now is times
-%\newfont{\ninept}{times at 9pt} % was timenrr originally - now is times
-
-% *********************************************
-%  -- End of block A --
-%
-%
-% -- Start of block B -- UPDATED FONT NAMES
-% *********************************************
-% Gerry Murray 11/30/2006
-% *********************************************
-\newfont{\secfnt}{ptmb8t at 12pt}
-\newfont{\secit}{ptmbi8t at 12pt}    %13 Jan 00 gkmt
-\newfont{\subsecfnt}{ptmri8t at 11pt}
-\newfont{\subsecit}{ptmbi8t at 11pt}  % 
-\newfont{\ttlfnt}{phvb8t at 18pt}
-\newfont{\ttlit}{phvbo8t at 18pt}    % GM 2/4/2000
-\newfont{\subttlfnt}{phvr8t at 14pt}
-\newfont{\subttlit}{phvro8t at 14pt} % GM 2/4/2000
-\newfont{\subttlbf}{phvb8t at 14pt}  % 13 Jan 00 gkmt
-\newfont{\aufnt}{phvr8t at 12pt}
-\newfont{\auit}{phvro8t at 12pt}     % GM 2/4/2000
-\newfont{\affaddr}{phvr8t at 10pt}
-\newfont{\affaddrit}{phvro8t at 10pt} % GM 2/4/2000
-\newfont{\eaddfnt}{phvr8t at 12pt}
-\newfont{\ixpt}{ptmr8t at 9pt}
-\newfont{\confname}{ptmri8t at 8pt}
-\newfont{\crnotice}{ptmr8t at 8pt}
-\newfont{\ninept}{ptmr8t at 9pt}
-% +++++++++++++++++++++++++++++++++++++++++++++
-% -- End of block B --
-
-%\def\email#1{{{\eaddfnt{\vskip 4pt#1}}}}
-% If we have an email, inside a "shared affiliation" then we need the following instead
-\def\email#1{{{\eaddfnt{\par #1}}}}       % revised  - GM - 11/30/2006
-
-\def\addauthorsection{\ifnum\originalaucount>6  % was 3 - Gerry March 2007
-    \section{Additional Authors}\the\addauthors
-  \fi}
-
-\newcount\savesection
-\newcount\sectioncntr
-\global\sectioncntr=1
-
-\setcounter{secnumdepth}{3}
-
-\def\appendix{\par
-\section*{APPENDIX}
-\setcounter{section}{0}
- \setcounter{subsection}{0}
- \def\thesection{\Alph{section}} }
-
-\leftmargini 22.5pt
-\leftmarginii 19.8pt    % > \labelsep + width of '(m)'
-\leftmarginiii 16.8pt   % > \labelsep + width of 'vii.'
-\leftmarginiv 15.3pt    % > \labelsep + width of 'M.'
-\leftmarginv 9pt
-\leftmarginvi 9pt
-
-\leftmargin\leftmargini
-\labelsep 4.5pt
-\labelwidth\leftmargini\advance\labelwidth-\labelsep
-
-\def\@listI{\leftmargin\leftmargini \parsep 3.6pt plus 2pt minus 1pt%
-\topsep 7.2pt plus 2pt minus 4pt%
-\itemsep 3.6pt plus 2pt minus 1pt}
-
-\let\@listi\@listI
-\@listi
-
-\def\@listii{\leftmargin\leftmarginii
-   \labelwidth\leftmarginii\advance\labelwidth-\labelsep
-   \topsep 3.6pt plus 2pt minus 1pt
-   \parsep 1.8pt plus 0.9pt minus 0.9pt
-   \itemsep \parsep}
-
-\def\@listiii{\leftmargin\leftmarginiii
-    \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
-    \topsep 1.8pt plus 0.9pt minus 0.9pt
-    \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
-    \itemsep \topsep}
-
-\def\@listiv{\leftmargin\leftmarginiv
-     \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
-
-\def\@listv{\leftmargin\leftmarginv
-     \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
-
-\def\@listvi{\leftmargin\leftmarginvi
-     \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
-
-\def\labelenumi{\theenumi.}
-\def\theenumi{\arabic{enumi}}
-
-\def\labelenumii{(\theenumii)}
-\def\theenumii{\alph{enumii}}
-\def\p@enumii{\theenumi}
-
-\def\labelenumiii{\theenumiii.}
-\def\theenumiii{\roman{enumiii}}
-\def\p@enumiii{\theenumi(\theenumii)}
-
-\def\labelenumiv{\theenumiv.}
-\def\theenumiv{\Alph{enumiv}}
-\def\p@enumiv{\p@enumiii\theenumiii}
-
-\def\labelitemi{$\bullet$}
-\def\labelitemii{\bf --}
-\def\labelitemiii{$\ast$}
-\def\labelitemiv{$\cdot$}
-
-\def\verse{\let\\=\@centercr
-  \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
-          \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
-\let\endverse\endlist
-
-\def\quotation{\list{}{\listparindent 1.5em
-    \itemindent\listparindent
-    \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
-\let\endquotation=\endlist
-
-\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
-\let\endquote=\endlist
-
-\def\descriptionlabel#1{\hspace\labelsep \bf #1}
-\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
-       \let\makelabel\descriptionlabel}}
-
-\let\enddescription\endlist
-
-\def\theequation{\arabic{equation}}
-
-\arraycolsep 4.5pt   % Half the space between columns in an array environment.
-\tabcolsep 5.4pt    % Half the space between columns in a tabular environment.
-\arrayrulewidth .5pt % Width of rules in array and tabular environment. % (was .4) updated Gerry March 20 2007
-\doublerulesep 1.8pt % Space between adjacent rules in array or tabular env.
-
-\tabbingsep \labelsep   % Space used by the \' command.  (See LaTeX manual.)
-
-\skip\@mpfootins =\skip\footins
-
-\fboxsep =2.7pt      % Space left between box and text by \fbox and \framebox.
-\fboxrule =.5pt      % Width of rules in box made by \fbox and \framebox. % (was .4) updated Gerry March 20 2007
-
-\def\thepart{\Roman{part}} % Roman numeral part numbers.
-\def\thesection       {\arabic{section}}
-\def\thesubsection    {\thesection.\arabic{subsection}}
-%\def\thesubsubsection {\thesubsection.\arabic{subsubsection}} % GM 7/30/2002
-%\def\theparagraph     {\thesubsubsection.\arabic{paragraph}}  % GM 7/30/2002
-\def\thesubparagraph  {\theparagraph.\arabic{subparagraph}}
-
-\def\@pnumwidth{1.55em}
-\def\@tocrmarg {2.55em}
-\def\@dotsep{4.5}
-\setcounter{tocdepth}{3}
-
-%\def\tableofcontents{\@latexerr{\tableofcontents: Tables of contents are not
-%  allowed in the `acmconf' document style.}\@eha}
-
-\def\tableofcontents{\ClassError{%
-    \string\tableofcontents\space is not allowed in the `acmconf' document	% January 2008
-    style}\@eha}
-
-\def\l@part#1#2{\addpenalty{\@secpenalty}
-   \addvspace{2.25em plus 1pt}  % space above part line
-   \begingroup
-   \@tempdima 3em       % width of box holding part number, used by
-     \parindent \z@ \rightskip \@pnumwidth      %% \numberline
-     \parfillskip -\@pnumwidth
-     {\large \bf        % set line in \large boldface
-     \leavevmode        % TeX command to enter horizontal mode.
-     #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
-     \nobreak           % Never break after part entry
-   \endgroup}
-
-\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
-   \addvspace{1.0em plus 1pt}   % space above toc entry
-   \@tempdima 1.5em             % width of box holding section number
-   \begingroup
-    \parindent  \z@ \rightskip \@pnumwidth
-     \parfillskip -\@pnumwidth
-     \bf                        % Boldface.
-     \leavevmode                % TeX command to enter horizontal mode.
-      \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
-      \hskip -\leftskip           %% 25 Jan 88 change to \numberline
-     #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
-   \endgroup}
-
-
-\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
-\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
-\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
-\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
-
-%\def\listoffigures{\@latexerr{\listoffigures: Lists of figures are not
-%  allowed in the `acmconf' document style.}\@eha}
-
-\def\listoffigures{\ClassError{%
-    \string\listoffigures\space is not allowed in the `acmconf' document	% January 2008
-    style}\@eha}
-
-\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
-
-%\def\listoftables{\@latexerr{\listoftables: Lists of tables are not
-%  allowed in the `acmconf' document style.}\@eha}
-%\let\l@table\l@figure
-
-\def\listoftables{\ClassError{%
-    \string\listoftables\space is not allowed in the `acmconf' document		% January 2008
-    style}\@eha}
- \let\l@table\l@figure
-
-\def\footnoterule{\kern-3\p@
-  \hrule width .5\columnwidth   % (was .4) updated Gerry March 20 2007
-  \kern 2.6\p@}                 % The \hrule has default height of .4pt % (was .4) updated Gerry March 20 2007
-% ------
-\long\def\@makefntext#1{\noindent 
-%\hbox to .5em{\hss$^{\@thefnmark}$}#1}   % original
-\hbox to .5em{\hss\textsuperscript{\@thefnmark}}#1}  % C. Clifton / GM Oct. 2nd. 2002
-% -------
-
-\long\def\@maketntext#1{\noindent
-#1}
-
-\long\def\@maketitlenotetext#1#2{\noindent
-            \hbox to 1.8em{\hss$^{#1}$}#2}
-
-\setcounter{topnumber}{2}
-\def\topfraction{.7}
-\setcounter{bottomnumber}{1}
-\def\bottomfraction{.3}
-\setcounter{totalnumber}{3}
-\def\textfraction{.2}
-\def\floatpagefraction{.5}
-\setcounter{dbltopnumber}{2}
-\def\dbltopfraction{.7}
-\def\dblfloatpagefraction{.5}
-
-%
-\long\def\@makecaption#1#2{
-   \vskip \baselineskip
-   \setbox\@tempboxa\hbox{\textbf{#1: #2}}
-   \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
-       \textbf{#1: #2}\par               %   THEN set as ordinary paragraph.
-     \else                      %   ELSE  center.
-       \hbox to\hsize{\hfil\box\@tempboxa\hfil}\par
-   \fi}
-
-%
-
-\long\def\@makecaption#1#2{
-   \vskip 10pt
-   \setbox\@tempboxa\hbox{\textbf{#1: #2}}
-   \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
-       \textbf{#1: #2}\par                %   THEN set as ordinary paragraph.
-     \else                      %   ELSE  center.
-       \hbox to\hsize{\hfil\box\@tempboxa\hfil}
-   \fi}
-
-\@ifundefined{figure}{\newcounter {figure}} % this is for LaTeX2e
-
-\def\fps@figure{tbp}
-\def\ftype@figure{1}
-\def\ext@figure{lof}
-\def\fnum@figure{Figure \thefigure}
-\def\figure{\@float{figure}}
-%\let\endfigure\end@float
-\def\endfigure{\end@float} 		% Gerry January 2008
-\@namedef{figure*}{\@dblfloat{figure}}
-\@namedef{endfigure*}{\end@dblfloat}
-
-\@ifundefined{table}{\newcounter {table}} % this is for LaTeX2e
-
-\def\fps@table{tbp}
-\def\ftype@table{2}
-\def\ext@table{lot}
-\def\fnum@table{Table \thetable}
-\def\table{\@float{table}}
-%\let\endtable\end@float
-\def\endtable{\end@float}		% Gerry January 2008
-\@namedef{table*}{\@dblfloat{table}}
-\@namedef{endtable*}{\end@dblfloat}
-
-\newtoks\titleboxnotes
-\newcount\titleboxnoteflag
-
-\def\maketitle{\par
- \begingroup
-   \def\thefootnote{\fnsymbol{footnote}}
-   \def\@makefnmark{\hbox
-       to 0pt{$^{\@thefnmark}$\hss}}
-     \twocolumn[\@maketitle]
-\@thanks
- \endgroup
- \setcounter{footnote}{0}
- \let\maketitle\relax
- \let\@maketitle\relax
- \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}\let\thanks\relax
-}
-
-%% CHANGES ON NEXT LINES
-\newif\if@ll % to record which version of LaTeX is in use
-
-\expandafter\ifx\csname LaTeXe\endcsname\relax % LaTeX2.09 is used
-\else% LaTeX2e is used, so set ll to true
-\global\@lltrue
-\fi
-
-\if@ll
-  \NeedsTeXFormat{LaTeX2e}
-  \ProvidesClass{sig-alternate} [2012/05/23 - V2.5 - based on acmproc.cls V1.3 <Nov. 30 '99>]
-  \RequirePackage{latexsym}% QUERY: are these two really needed?
-  \let\dooptions\ProcessOptions
-\else
-  \let\dooptions\@options
-\fi
-%% END CHANGES
-
-\def\@height{height}
-\def\@width{width}
-\def\@minus{minus}
-\def\@plus{plus}
-\def\hb@xt@{\hbox to}
-\newif\if@faircopy
-\@faircopyfalse
-\def\ds@faircopy{\@faircopytrue}
-
-\def\ds@preprint{\@faircopyfalse}
-
-\@twosidetrue
-\@mparswitchtrue
-\def\ds@draft{\overfullrule 5\p@}
-%% CHANGE ON NEXT LINE
-\dooptions
-
-\lineskip \p@
-\normallineskip \p@
-\def\baselinestretch{1}
-\def\@ptsize{0} %needed for amssymbols.sty
-
-%% CHANGES ON NEXT LINES
-\if@ll% allow use of old-style font change commands in LaTeX2e
-\@maxdepth\maxdepth
-%
-\DeclareOldFontCommand{\rm}{\ninept\rmfamily}{\mathrm}
-\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
-\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
-\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
-\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
-\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
-\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
-\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
-\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
-\fi
-%
-\if@ll
- \renewcommand{\rmdefault}{cmr}  % was 'ttm'
-% Note! I have also found 'mvr' to work ESPECIALLY well.
-% Gerry - October 1999
-% You may need to change your LV1times.fd file so that sc is
-% mapped to cmcsc - -for smallcaps -- that is if you decide
-% to change {cmr} to {times} above. (Not recommended)
-  \renewcommand{\@ptsize}{}
-  \renewcommand{\normalsize}{%
-    \@setfontsize\normalsize\@ixpt{10.5\p@}%\ninept%
-    \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
-    \belowdisplayskip \abovedisplayskip
-    \abovedisplayshortskip 6\p@ \@minus 3\p@
-    \belowdisplayshortskip 6\p@ \@minus 3\p@
-    \let\@listi\@listI
-  }
-\else
-  \def\@normalsize{%changed next to 9 from 10
-    \@setsize\normalsize{9\p@}\ixpt\@ixpt
-   \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
-    \belowdisplayskip \abovedisplayskip
-    \abovedisplayshortskip 6\p@ \@minus 3\p@
-    \belowdisplayshortskip 6\p@ \@minus 3\p@
-    \let\@listi\@listI
-  }%
-\fi
-\if@ll
-  \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt{8\p@}}
-  \newcommand\tiny{\@setfontsize\tiny\@vpt{6\p@}}
-  \newcommand\large{\@setfontsize\large\@xiipt{14\p@}}
-  \newcommand\Large{\@setfontsize\Large\@xivpt{18\p@}}
-  \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20\p@}}
-  \newcommand\huge{\@setfontsize\huge\@xxpt{25\p@}}
-  \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30\p@}}
-\else
-  \def\scriptsize{\@setsize\scriptsize{8\p@}\viipt\@viipt}
-  \def\tiny{\@setsize\tiny{6\p@}\vpt\@vpt}
-  \def\large{\@setsize\large{14\p@}\xiipt\@xiipt}
-  \def\Large{\@setsize\Large{18\p@}\xivpt\@xivpt}
-  \def\LARGE{\@setsize\LARGE{20\p@}\xviipt\@xviipt}
-  \def\huge{\@setsize\huge{25\p@}\xxpt\@xxpt}
-  \def\Huge{\@setsize\Huge{30\p@}\xxvpt\@xxvpt}
-\fi
-\normalsize
-
-% make aubox hsize/number of authors up to 3, less gutter
-% then showbox gutter showbox gutter showbox -- GKMT Aug 99
-\newbox\@acmtitlebox
-\def\@maketitle{\newpage
- \null
- \setbox\@acmtitlebox\vbox{%
-\baselineskip 20pt
-\vskip 2em                   % Vertical space above title.
-   \begin{center}
-    {\ttlfnt \@title\par}       % Title set in 18pt Helvetica (Arial) bold size.
-    \vskip 1.5em                % Vertical space after title.
-%This should be the subtitle.
-{\subttlfnt \the\subtitletext\par}\vskip 1.25em%\fi
-    {\baselineskip 16pt\aufnt   % each author set in \12 pt Arial, in a
-     \lineskip .5em             % tabular environment
-     \begin{tabular}[t]{c}\@author
-     \end{tabular}\par}
-    \vskip 1.5em               % Vertical space after author.
-   \end{center}}
- \dimen0=\ht\@acmtitlebox
- \advance\dimen0 by -12.75pc\relax % Increased space for title box -- KBT
- \unvbox\@acmtitlebox
- \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi}
-
-
-\newcount\titlenotecount
-\global\titlenotecount=0
-\newtoks\tntoks
-\newtoks\tntokstwo
-\newtoks\tntoksthree
-\newtoks\tntoksfour
-\newtoks\tntoksfive
-
-\def\abstract{
-\ifnum\titlenotecount>0 % was =1
-    \insert\footins{%
-    \reset@font\footnotesize
-        \interlinepenalty\interfootnotelinepenalty
-        \splittopskip\footnotesep
-        \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-        \hsize\columnwidth \@parboxrestore
-        \protected@edef\@currentlabel{%
-        }%
-        \color@begingroup
-\ifnum\titlenotecount=1
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=2
-      \@maketntext{%
-      \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=3
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=4
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=5
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\P$}\rule\z@\footnotesep\ignorespaces\the\tntoksfive\@finalstrut\strutbox}%
-\fi
-   \color@endgroup} %g}
-\fi
-\setcounter{footnote}{0}
-\section*{ABSTRACT}\normalsize%\ninept
-}
-
-\def\endabstract{\if@twocolumn\else\endquotation\fi}
-
-\def\keywords{\if@twocolumn
-\section*{Keywords}
-\else \small
-\quotation
-\fi}
-
-\def\terms{\if@twocolumn
-\section*{General Terms}
-\else \small
-\quotation
-\fi}
-
-% -- Classification needs to be a bit smart due to optionals - Gerry/Georgia November 2nd. 1999
-\newcount\catcount
-\global\catcount=1
-
-\def\category#1#2#3{%
-\ifnum\catcount=1
-\section*{Categories and Subject Descriptors}
-\advance\catcount by 1\else{\unskip; }\fi
-    \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}%
-}
-
-\def\@category#1#2#3[#4]{%
-    \begingroup
-        \let\and\relax
-            #1 [\textbf{#2}]%
-            \if!#4!%
-                \if!#3!\else : #3\fi
-            \else
-                :\space
-                \if!#3!\else #3\kern\z@---\hskip\z@\fi
-                \textit{#4}%
-            \fi
-    \endgroup
-}
-%
-
-%%% This section (written by KBT) handles the 1" box in the lower left
-%%% corner of the left column of the first page by creating a picture,
-%%% and inserting the predefined string at the bottom (with a negative
-%%% displacement to offset the space allocated for a non-existent
-%%% caption).
-%%%
-%\newtoks\copyrightnotice
-%\def\ftype@copyrightbox{8}
-%\def\@copyrightspace{
-%\@float{copyrightbox}[b]
-%\begin{center}
-%\setlength{\unitlength}{1pc}
-%\begin{picture}(20,6) %Space for copyright notice
-%\put(0,-0.95){\crnotice{\@toappear}}
-%\end{picture}
-%\end{center}
-%\end@float}
-
-%\def\@toappear{} % Default setting blank - commands below change this.
-%\long\def\toappear#1{\def\@toappear{\parbox[b]{20pc}{\baselineskip 9pt#1}}}
-%\def\toappearbox#1{\def\@toappear{\raisebox{5pt}{\framebox[20pc]{\parbox[b]{19pc}{#1}}}}}
-
-%\newtoks\conf
-%\newtoks\confinfo
-%\def\conferenceinfo#1#2{\global\conf={#1}\global\confinfo{#2}}
-
-
-%\def\marginpar{\@latexerr{The \marginpar command is not allowed in the
-%  `acmconf' document style.}\@eha}
-
-\def\marginpar{\ClassError{%
-    \string\marginpar\space is not allowed in the `acmconf' document		% January 2008
-    style}\@eha}
-
-\mark{{}{}}     % Initializes TeX's marks
-
-\def\today{\ifcase\month\or
-  January\or February\or March\or April\or May\or June\or
-  July\or August\or September\or October\or November\or December\fi
-  \space\number\day, \number\year}
-
-\def\@begintheorem#1#2{%
-    \parskip 0pt % GM July 2000 (for tighter spacing)
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {{\sc #1}\hskip 5\p@\relax#2.}%
-    ]
-    \it
-}
-\def\@opargbegintheorem#1#2#3{%
-    \parskip 0pt % GM July 2000 (for tighter spacing)
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\sc #1\ #2\             % This mod by Gerry to enumerate corollaries
-   \setbox\@tempboxa\hbox{(#3)}  % and bracket the 'corollary title'
-        \ifdim \wd\@tempboxa>\z@ % and retain the correct numbering of e.g. theorems
-            \hskip 5\p@\relax    % if they occur 'around' said corollaries.
-            \box\@tempboxa       % Gerry - Nov. 1999.
-        \fi.}%
-    ]
-    \it
-}
-\newif\if@qeded
-\global\@qededfalse
-
-% -- original
-%\def\proof{%
-%  \vspace{-\parskip} % GM July 2000 (for tighter spacing)
-%    \global\@qededfalse
-%    \@ifnextchar[{\@xproof}{\@proof}%
-%}
-% -- end of original
-
-% (JSS) Fix for vertical spacing bug - Gerry Murray July 30th. 2002
-\def\proof{%
-\vspace{-\lastskip}\vspace{-\parsep}\penalty-51%
-\global\@qededfalse
-\@ifnextchar[{\@xproof}{\@proof}%
-}
-
-\def\endproof{%
-    \if@qeded\else\qed\fi
-    \endtrivlist
-}
-\def\@proof{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\sc Proof.}%
-    ]
-    \ignorespaces
-}
-\def\@xproof[#1]{%
-    \trivlist
-    \item[\hskip 10\p@\hskip \labelsep{\sc Proof #1.}]%
-    \ignorespaces
-}
-\def\qed{%
-    \unskip
-    \kern 10\p@
-    \begingroup
-        \unitlength\p@
-        \linethickness{.4\p@}%
-        \framebox(6,6){}%
-    \endgroup
-    \global\@qededtrue
-}
-
-\def\newdef#1#2{%
-    \expandafter\@ifdefinable\csname #1\endcsname
-        {\@definecounter{#1}%
-         \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
-         \global\@namedef{#1}{\@defthm{#1}{#2}}%
-         \global\@namedef{end#1}{\@endtheorem}%
-    }%
-}
-\def\@defthm#1#2{%
-    \refstepcounter{#1}%
-    \@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}%
-}
-\def\@xdefthm#1#2{%
-    \@begindef{#2}{\csname the#1\endcsname}%
-    \ignorespaces
-}
-\def\@ydefthm#1#2[#3]{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\it #2%
-%         \savebox\@tempboxa{#3}%
-         \saveb@x\@tempboxa{#3}%		% January 2008
-         \ifdim \wd\@tempboxa>\z@
-            \ \box\@tempboxa
-         \fi.%
-        }]%
-    \ignorespaces
-}
-\def\@begindef#1#2{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\it #1\ \rm #2.}%
-    ]%
-}
-\def\theequation{\arabic{equation}}
-
-\newcounter{part}
-\newcounter{section}
-\newcounter{subsection}[section]
-\newcounter{subsubsection}[subsection]
-\newcounter{paragraph}[subsubsection]
-\def\thepart{\Roman{part}}
-\def\thesection{\arabic{section}}
-\def\thesubsection{\thesection.\arabic{subsection}}
-\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} %removed \subsecfnt 29 July 2002 gkmt
-\def\theparagraph{\thesubsubsection.\arabic{paragraph}} %removed \subsecfnt 29 July 2002 gkmt
-\newif\if@uchead
-\@ucheadfalse
-
-%% CHANGES: NEW NOTE
-%% NOTE: OK to use old-style font commands below, since they were
-%% suitably redefined for LaTeX2e
-%% END CHANGES
-\setcounter{secnumdepth}{3}
-\def\part{%
-    \@startsection{part}{9}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}
-        {4\p@}{\normalsize\@ucheadtrue}%
-}
-\def\section{%
-    \@startsection{section}{1}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}% GM
-    {4\p@}{\baselineskip 14pt\secfnt\@ucheadtrue}%
-}
-
-\def\subsection{%
-    \@startsection{subsection}{2}{\z@}{-8\p@ \@plus -2\p@ \@minus -\p@}
-    {4\p@}{\secfnt}%
-}
-\def\subsubsection{%
-    \@startsection{subsubsection}{3}{\z@}{-8\p@ \@plus -2\p@ \@minus -\p@}%
-    {4\p@}{\subsecfnt}%
-}
-%\def\paragraph{%
-%    \vskip 12pt\@startsection{paragraph}{3}{\z@}{6\p@ \@plus \p@}% original
-%    {-5\p@}{\subsecfnt}%
-%}
-%  If one wants sections, subsections and subsubsections numbered,
-%  but not paragraphs, one usually sets secnumepth to 3.
-%  For that, the "depth" of paragraphs must be given correctly
-%  in the definition (``4'' instead of ``3'' as second argument
-%  of @startsection):
-\def\paragraph{%
-    \vskip 12pt\@startsection{paragraph}{4}{\z@}{6\p@ \@plus \p@}%    % GM and Wolfgang May - 11/30/06
-    {-5\p@}{\subsecfnt}%
-}
-\let\@period=.
-\def\@startsection#1#2#3#4#5#6{%
-        \if@noskipsec  %gkmt, 11 aug 99
-        \global\let\@period\@empty
-        \leavevmode
-        \global\let\@period.%
-    \fi
-      \par %
-    \@tempskipa #4\relax
-    \@afterindenttrue
-    \ifdim \@tempskipa <\z@
-        \@tempskipa -\@tempskipa
-        \@afterindentfalse
-    \fi
-    \if@nobreak
-    \everypar{}%
-    \else
-        \addpenalty\@secpenalty
-        \addvspace\@tempskipa
-    \fi
-\parskip=0pt % GM July 2000 (non numbered) section heads
-    \@ifstar
-        {\@ssect{#3}{#4}{#5}{#6}}
-        {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
-}
-\def\@sect#1#2#3#4#5#6[#7]#8{%
-    \ifnum #2>\c@secnumdepth
-        \let\@svsec\@empty
-    \else
-        \refstepcounter{#1}%
-        \edef\@svsec{%
-            \begingroup
-                %\ifnum#2>2 \noexpand\rm \fi % changed to next 29 July 2002 gkmt
-            \ifnum#2>2 \noexpand#6 \fi
-                \csname the#1\endcsname
-            \endgroup
-            \ifnum #2=1\relax .\fi
-            \hskip 1em
-        }%
-    \fi
-    \@tempskipa #5\relax
-    \ifdim \@tempskipa>\z@
-        \begingroup
-            #6\relax
-            \@hangfrom{\hskip #3\relax\@svsec}%
-            \begingroup
-                \interlinepenalty \@M
-                \if@uchead
-                    \uppercase{#8}%
-                \else
-                    #8%
-                \fi
-                \par
-            \endgroup
-        \endgroup
-        \csname #1mark\endcsname{#7}%
-        \vskip -12pt  %gkmt, 11 aug 99 and GM July 2000 (was -14) - numbered section head spacing
-\addcontentsline{toc}{#1}{%
-            \ifnum #2>\c@secnumdepth \else
-                \protect\numberline{\csname the#1\endcsname}%
-            \fi
-            #7%
-        }%
-    \else
-        \def\@svsechd{%
-            #6%
-            \hskip #3\relax
-            \@svsec
-            \if@uchead
-                \uppercase{#8}%
-            \else
-                #8%
-            \fi
-            \csname #1mark\endcsname{#7}%
-            \addcontentsline{toc}{#1}{%
-                \ifnum #2>\c@secnumdepth \else
-                    \protect\numberline{\csname the#1\endcsname}%
-                \fi
-                #7%
-            }%
-        }%
-    \fi
-    \@xsect{#5}\hskip 1pt
-    \par
-}
-\def\@xsect#1{%
-    \@tempskipa #1\relax
-    \ifdim \@tempskipa>\z@
-        \par
-        \nobreak
-        \vskip \@tempskipa
-        \@afterheading
-    \else
-        \global\@nobreakfalse
-        \global\@noskipsectrue
-        \everypar{%
-            \if@noskipsec
-                \global\@noskipsecfalse
-                \clubpenalty\@M
-                \hskip -\parindent
-                \begingroup
-                    \@svsechd
-                    \@period
-                \endgroup
-                \unskip
-                \@tempskipa #1\relax
-                \hskip -\@tempskipa
-            \else
-                \clubpenalty \@clubpenalty
-                \everypar{}%
-            \fi
-        }%
-    \fi
-    \ignorespaces
-}
-\def\@trivlist{%
-    \@topsepadd\topsep
-    \if@noskipsec
-        \global\let\@period\@empty
-        \leavevmode
-        \global\let\@period.%
-    \fi
-    \ifvmode
-        \advance\@topsepadd\partopsep
-    \else
-        \unskip
-        \par
-    \fi
-    \if@inlabel
-        \@noparitemtrue
-        \@noparlisttrue
-    \else
-        \@noparlistfalse
-        \@topsep\@topsepadd
-    \fi
-    \advance\@topsep \parskip
-    \leftskip\z@skip
-    \rightskip\@rightskip
-    \parfillskip\@flushglue
-    \@setpar{\if@newlist\else{\@@par}\fi}
-    \global\@newlisttrue
-    \@outerparskip\parskip
-}
-
-%%% Actually, 'abbrev' works just fine as the default
-%%% Bibliography style.
-
-\typeout{Using 'Abbrev' bibliography style}
-\newcommand\bibyear[2]{%
-    \unskip\quad\ignorespaces#1\unskip
-    \if#2..\quad \else \quad#2 \fi
-}
-\newcommand{\bibemph}[1]{{\em#1}}
-\newcommand{\bibemphic}[1]{{\em#1\/}}
-\newcommand{\bibsc}[1]{{\sc#1}}
-\def\@normalcite{%
-    \def\@cite##1##2{[##1\if@tempswa , ##2\fi]}%
-}
-\def\@citeNB{%
-    \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
-}
-\def\@citeRB{%
-    \def\@cite##1##2{##1\if@tempswa , ##2\fi]}%
-}
-\def\start@cite#1#2{%
-    \edef\citeauthoryear##1##2##3{%
-        ###1%
-        \ifnum#2=\z@ \else\ ###2\fi
-    }%
-    \ifnum#1=\thr@@
-        \let\@@cite\@citeyear
-    \else
-        \let\@@cite\@citenormal
-    \fi
-    \@ifstar{\@citeNB\@@cite}{\@normalcite\@@cite}%
-}
-%\def\cite{\start@cite23}
-\DeclareRobustCommand\cite{\start@cite23}		% January 2008
-\def\citeNP{\cite*}					% No Parentheses e.g. 5
-%\def\citeA{\start@cite10}
-\DeclareRobustCommand\citeA{\start@cite10}		% January 2008
-\def\citeANP{\citeA*}
-%\def\shortcite{\start@cite23}				
-\DeclareRobustCommand\shortcite{\start@cite23}		% January 2008
-\def\shortciteNP{\shortcite*}
-%\def\shortciteA{\start@cite20}
-\DeclareRobustCommand\shortciteA{\start@cite20}		% January 2008
-\def\shortciteANP{\shortciteA*}
-%\def\citeyear{\start@cite30}
-\DeclareRobustCommand\citeyear{\start@cite30}		% January 2008
-\def\citeyearNP{\citeyear*}
-%\def\citeN{%
-\DeclareRobustCommand\citeN{%				% January 2008
-    \@citeRB
-    \def\citeauthoryear##1##2##3{##1\ [##3%
-        \def\reserved@a{##1}%
-        \def\citeauthoryear####1####2####3{%
-            \def\reserved@b{####1}%
-            \ifx\reserved@a\reserved@b
-                ####3%
-            \else
-                \errmessage{Package acmart Error: author mismatch
-                         in \string\citeN^^J^^J%
-                    See the acmart package documentation for explanation}%
-            \fi
-        }%
-    }%
-    \@ifstar\@citeyear\@citeyear
-}
-%\def\shortciteN{%
-\DeclareRobustCommand\shortciteN{%			% January 2008
-    \@citeRB
-    \def\citeauthoryear##1##2##3{##2\ [##3%
-        \def\reserved@a{##2}%
-        \def\citeauthoryear####1####2####3{%
-            \def\reserved@b{####2}%
-            \ifx\reserved@a\reserved@b
-                ####3%
-            \else
-                \errmessage{Package acmart Error: author mismatch
-                         in \string\shortciteN^^J^^J%
-                    See the acmart package documentation for explanation}%
-            \fi
-        }%
-    }%
-    \@ifstar\@citeyear\@citeyear  % GM July 2000
-}
-
-\def\@citenormal{%
-    \@ifnextchar [{\@tempswatrue\@citex;}%
-% original                 {\@tempswafalse\@citex,[]}% was ; Gerry 2/24/00
-{\@tempswafalse\@citex[]}%  	% GERRY FIX FOR BABEL 3/20/2009
-}
-
-\def\@citeyear{%
-    \@ifnextchar [{\@tempswatrue\@citex,}%
-% original                  {\@tempswafalse\@citex,[]}%
-{\@tempswafalse\@citex[]}%	%  GERRY FIX FOR BABEL 3/20/2009
-}
-
-\def\@citex#1[#2]#3{%
-    \let\@citea\@empty
-    \@cite{%
-        \@for\@citeb:=#3\do{%
-            \@citea
-% original            \def\@citea{#1 }%
-            \def\@citea{#1, }% 	% GERRY FIX FOR BABEL 3/20/2009 -- SO THAT YOU GET [1, 2] IN THE BODY TEXT
-            \edef\@citeb{\expandafter\@iden\@citeb}%
-            \if@filesw
-                \immediate\write\@auxout{\string\citation{\@citeb}}%
-            \fi
-            \@ifundefined{b@\@citeb}{%
-                {\bf ?}%
-                \@warning{%
-                    Citation `\@citeb' on page \thepage\space undefined%
-                }%
-            }%
-            {\csname b@\@citeb\endcsname}%
-        }%
-    }{#2}%
-}
-%\let\@biblabel\@gobble   % Dec. 2008 - Gerry
-% ----
-\def\@biblabelnum#1{[#1]} % Gerry's solution #1 - for Natbib -- April 2009
-\let\@biblabel=\@biblabelnum  % Gerry's solution #1 - for Natbib -- April 2009
-\def\newblock{\relax} % Gerry Dec. 2008
-% ---
-\newdimen\bibindent
-\setcounter{enumi}{1}
-\bibindent=0em
-\def\thebibliography#1{% 
-\ifnum\addauflag=0\addauthorsection\global\addauflag=1\fi
-     \section[References]{%    <=== OPTIONAL ARGUMENT ADDED HERE
-        {References} % was uppercased but this affects pdf bookmarks (SP/GM October 2004)
-          {\vskip -9pt plus 1pt} % GM Nov. 2006 / GM July 2000 (for somewhat tighter spacing) 
-         \@mkboth{{\refname}}{{\refname}}%
-     }%
-     \list{[\arabic{enumi}]}{%
-         \settowidth\labelwidth{[#1]}%
-         \leftmargin\labelwidth
-         \advance\leftmargin\labelsep
-         \advance\leftmargin\bibindent
-         \parsep=0pt\itemsep=1pt % GM July 2000
-         \itemindent -\bibindent
-         \listparindent \itemindent
-         \usecounter{enumi}
-     }%
-     \let\newblock\@empty
-     \raggedright % GM July 2000
-     \sloppy
-     \sfcode`\.=1000\relax
-}
-
-
-\gdef\balancecolumns
-{\vfill\eject
-\global\@colht=\textheight
-\global\ht\@cclv=\textheight
-}
-
-\newcount\colcntr
-\global\colcntr=0
-%\newbox\savebox
-\newbox\saveb@x				% January 2008
-
-\gdef \@makecol {%
-\global\advance\colcntr by 1
-\ifnum\colcntr>2 \global\colcntr=1\fi
-   \ifvoid\footins
-     \setbox\@outputbox \box\@cclv
-   \else
-     \setbox\@outputbox \vbox{%
-\boxmaxdepth \@maxdepth
-       \@tempdima\dp\@cclv
-       \unvbox \@cclv
-       \vskip-\@tempdima
-       \vskip \skip\footins
-       \color@begingroup
-         \normalcolor
-         \footnoterule
-         \unvbox \footins
-       \color@endgroup
-       }%
-   \fi
-   \xdef\@freelist{\@freelist\@midlist}%
-   \global \let \@midlist \@empty
-   \@combinefloats
-   \ifvbox\@kludgeins
-     \@makespecialcolbox
-   \else
-     \setbox\@outputbox \vbox to\@colht {%
-\@texttop
-       \dimen@ \dp\@outputbox
-       \unvbox \@outputbox
-   \vskip -\dimen@
-       \@textbottom
-       }%
-   \fi
-   \global \maxdepth \@maxdepth
-}
-\def\titlenote{\@ifnextchar[\@xtitlenote{\stepcounter\@mpfn
-\global\advance\titlenotecount by 1
-\ifnum\titlenotecount=1
-    \raisebox{9pt}{$\ast$}
-\fi
-\ifnum\titlenotecount=2
-    \raisebox{9pt}{$\dagger$}
-\fi
-\ifnum\titlenotecount=3
-    \raisebox{9pt}{$\ddagger$}
-\fi
-\ifnum\titlenotecount=4
-\raisebox{9pt}{$\S$}
-\fi
-\ifnum\titlenotecount=5
-\raisebox{9pt}{$\P$}
-\fi
-         \@titlenotetext
-}}
-
-\long\def\@titlenotetext#1{\insert\footins{%
-\ifnum\titlenotecount=1\global\tntoks={#1}\fi
-\ifnum\titlenotecount=2\global\tntokstwo={#1}\fi
-\ifnum\titlenotecount=3\global\tntoksthree={#1}\fi
-\ifnum\titlenotecount=4\global\tntoksfour={#1}\fi
-\ifnum\titlenotecount=5\global\tntoksfive={#1}\fi
-    \reset@font\footnotesize
-    \interlinepenalty\interfootnotelinepenalty
-    \splittopskip\footnotesep
-    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-    \hsize\columnwidth \@parboxrestore
-    \protected@edef\@currentlabel{%
-    }%
-    \color@begingroup
-   \color@endgroup}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%
-\ps@plain
-\baselineskip=11pt
-\let\thepage\relax % For NO page numbers - GM Nov. 30th. 1999 and July 2000
-\def\setpagenumber#1{\global\setcounter{page}{#1}}
-%\pagenumbering{arabic}  % Arabic page numbers GM July 2000
-\twocolumn             % Double column.
-\flushbottom           % Even bottom -- alas, does not balance columns at end of document
-\pagestyle{plain}
-
-% Need Copyright Year and Copyright Data to be user definable (in .tex file).
-% Gerry Nov. 30th. 1999
-\newtoks\copyrtyr
-\newtoks\acmcopyr
-\newtoks\boilerplate
-\global\acmcopyr={X-XXXXX-XX-X/XX/XX}  % Default - 5/11/2001 *** Gerry
-\global\copyrtyr={20XX}                % Default - 3/3/2003 *** Gerry
-\def\CopyrightYear#1{\global\copyrtyr{#1}}
-\def\crdata#1{\global\acmcopyr{#1}}
-\def\permission#1{\global\boilerplate{#1}}
-
-% Comment this out as this is not an ACM paper
-%\global\boilerplate={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.}
-%\newtoks\copyrightetc
-%\global\copyrightetc{Copyright \the\copyrtyr\ ACM \the\acmcopyr\ ...\$15.00} % Gerry changed to 15 May 2012
-%\toappear{\the\boilerplate\par
-%{\confname{\the\conf}} \the\confinfo\par \the\copyrightetc.}
-
-%\DeclareFixedFont{\altcrnotice}{OT1}{tmr}{m}{n}{8}  % << patch needed for accenting e.g. Montreal - Gerry, May 2007
-%\DeclareFixedFont{\altconfname}{OT1}{tmr}{m}{it}{8}  % << patch needed for accenting in italicized confname - Gerry, May 2007
-%
-%{\altconfname{{\the\conf}}} {\altcrnotice\the\confinfo\par} \the\copyrightetc.}  % << Gerry, May 2007
-%
-% The following section (i.e. 3 .sty inclusions) was added in May 2007 so as to fix the problems that many
-% authors were having with accents. Sometimes accents would occur, but the letter-character would be of a different
-% font. Conversely the letter-character font would be correct but, e.g. a 'bar' would appear superimposed on the
-% character instead of, say, an unlaut/diaresis. Sometimes the letter-character would NOT appear at all.
-% Using [T1]{fontenc} outright was not an option as this caused 99% of the authors to 'produce' a Type-3 (bitmapped)
-% PDF file - useless for production. 
-%
-% For proper (font) accenting we NEED these packages to be part of the .cls file i.e. 'ae', 'aecompl' and 'aeguil' 
-% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-%% This is file `ae.sty' 
-\def\fileversion{1.3}
-\def\filedate{2001/02/12}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{ae}[\filedate\space\fileversion\space  % GM
-% Almost European Computer Modern]                       % GM - keeping the log file clean(er)
-\newif\if@ae@slides \@ae@slidesfalse
-\DeclareOption{slides}{\@ae@slidestrue}
-\ProcessOptions
-\fontfamily{aer}
-\RequirePackage[T1]{fontenc}
-\if@ae@slides
-    \renewcommand{\sfdefault}{laess}
-    \renewcommand{\rmdefault}{laess} % no roman
-    \renewcommand{\ttdefault}{laett}
-\else
-    \renewcommand{\sfdefault}{aess}
-    \renewcommand{\rmdefault}{aer}
-    \renewcommand{\ttdefault}{aett}
-\fi
-\endinput
-%% 
-%% End of file `ae.sty'.
-%
-%
-\def\fileversion{0.9}
-\def\filedate{1998/07/23}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{aecompl}[\filedate\space\fileversion\space   % GM
-%T1 Complements for AE fonts (D. Roegel)]                      % GM -- keeping the log file clean(er)
- 
-\def\@ae@compl#1{{\fontencoding{T1}\fontfamily{cmr}\selectfont\symbol{#1}}}
-\def\guillemotleft{\@ae@compl{19}}
-\def\guillemotright{\@ae@compl{20}}
-\def\guilsinglleft{\@ae@compl{14}}
-\def\guilsinglright{\@ae@compl{15}}
-\def\TH{\@ae@compl{222}}
-\def\NG{\@ae@compl{141}}
-\def\ng{\@ae@compl{173}}
-\def\th{\@ae@compl{254}}
-\def\DJ{\@ae@compl{208}}
-\def\dj{\@ae@compl{158}}
-\def\DH{\@ae@compl{208}}
-\def\dh{\@ae@compl{240}}
-\def\@perthousandzero{\@ae@compl{24}}
-\def\textperthousand{\%\@perthousandzero}
-\def\textpertenthousand{\%\@perthousandzero\@perthousandzero}
-\endinput
-%
-%
-%% This is file `aeguill.sty' 
-% This file gives french guillemets (and not guillemots!)
-% built with the Polish CMR fonts (default), WNCYR fonts, the LASY fonts 
-% or with the EC fonts. 
-% This is useful in conjunction with the ae package
-% (this package loads the ae package in case it has not been loaded)
-%  and with or without the french(le) package.
-%
-% In order to get the guillemets, it is necessary to either type
-% \guillemotleft and \guillemotright, or to use an 8 bit encoding
-% (such as ISO-Latin1) which selects these two commands, 
-% or, if you use the french package (but not the frenchle package), 
-% to type << or >>.
-%
-% By default, you get the Polish CMR guillemets; if this package is loaded
-% with the `cm' option, you get the LASY guillemets; with `ec,' you
-% get the EC guillemets, and with `cyr,' you get the cyrillic guillemets.
-%
-% In verbatim mode, you always get the EC/TT guillemets.
-%
-% The default option is interesting in conjunction with PDF,
-% because there is a Type 1 version of the Polish CMR fonts
-% and these guillemets are very close in shape to the EC guillemets.
-% There are no free Type 1 versions of the EC fonts.
-%
-% Support for Polish CMR guillemets was kindly provided by 
-% Rolf Niepraschk <niepraschk@ptb.de> in version 0.99 (2000/05/22).
-% Bernd Raichle provided extensive simplifications to the code
-% for version 1.00.
-%
-% This package is released under the LPPL.
-%
-% Changes:
-%   Date        version
-%   2001/04/12  1.01    the frenchle and french package are now distinguished.
-%
-\def\fileversion{1.01}
-\def\filedate{2001/04/12}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{aeguill}[2001/04/12 1.01 %    % GM
-%AE fonts with french guillemets (D. Roegel)]   % GM - keeping the log file clean(er)
-%\RequirePackage{ae}  % GM May 2007 - already embedded here
-
-\newcommand{\@ae@switch}[4]{#4}
-\DeclareOption{ec}{\renewcommand\@ae@switch[4]{#1}}
-\DeclareOption{cm}{\renewcommand\@ae@switch[4]{#2}}
-\DeclareOption{cyr}{\renewcommand\@ae@switch[4]{#3}}
-\DeclareOption{pl}{\renewcommand\@ae@switch[4]{#4}}
-\ExecuteOptions{pl}
-\ProcessOptions
-
-%
-% Load necessary packages
-%
-\@ae@switch{% ec
-  % do nothing
-}{% cm
-  \RequirePackage{latexsym}%  GM - May 2007 - already 'mentioned as required' up above
-}{% cyr
-  \RequirePackage[OT2,T1]{fontenc}%
-}{% pl
-  \RequirePackage[OT4,T1]{fontenc}%
-}
-
-% The following command will be compared to \frenchname,
-% as defined in french.sty and frenchle.sty.
-\def\aeguillfrenchdefault{french}%
-
-\let\guill@verbatim@font\verbatim@font
-\def\verbatim@font{\guill@verbatim@font\ecguills{cmtt}%
-                   \let\guillemotleft\@oguills\let\guillemotright\@fguills}
-
-\begingroup \catcode`\<=13 \catcode`\>=13
-\def\x{\endgroup
- \def\ae@lfguill{<<}%
- \def\ae@rfguill{>>}%
-}\x
-
-\newcommand{\ecguills}[1]{%
-  \def\selectguillfont{\fontencoding{T1}\fontfamily{#1}\selectfont}%
-  \def\@oguills{{\selectguillfont\symbol{19}}}%
-  \def\@fguills{{\selectguillfont\symbol{20}}}%
-  } 
-
-\newcommand{\aeguills}{%
-  \ae@guills
-  % We redefine \guillemotleft and \guillemotright
-  % in order to catch them when they are used 
-  % with \DeclareInputText (in latin1.def for instance)
-  % We use \auxWARNINGi as a safe indicator that french.sty is used.
-  \gdef\guillemotleft{\ifx\auxWARNINGi\undefined
-                         \@oguills % neither french.sty nor frenchle.sty
-                      \else
-                         \ifx\aeguillfrenchdefault\frenchname
-                           \ae@lfguill  % french.sty
-                         \else
-                           \@oguills    % frenchle.sty
-                         \fi
-                      \fi}%
-  \gdef\guillemotright{\ifx\auxWARNINGi\undefined
-                         \@fguills % neither french.sty nor frenchle.sty
-                       \else
-                         \ifx\aeguillfrenchdefault\frenchname
-                           \ae@rfguill  % french.sty
-                         \else
-                           \@fguills    % frenchle.sty
-                         \fi
-                       \fi}%
-  }
-
-%
-% Depending on the class option
-% define the internal command \ae@guills
-\@ae@switch{% ec
-  \newcommand{\ae@guills}{%
-    \ecguills{cmr}}%
-}{% cm
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{U}\fontfamily{lasy}%
-            \fontseries{m}\fontshape{n}\selectfont}%
-    \def\@oguills{\leavevmode\nobreak
-                \hbox{\selectguillfont (\kern-.20em(\kern.20em}\nobreak}%
-    \def\@fguills{\leavevmode\nobreak
-                \hbox{\selectguillfont \kern.20em)\kern-.2em)}%
-                \ifdim\fontdimen\@ne\font>\z@\/\fi}}%
-}{% cyr
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{OT2}\fontfamily{wncyr}\selectfont}%
-    \def\@oguills{{\selectguillfont\symbol{60}}}%
-    \def\@fguills{{\selectguillfont\symbol{62}}}}
-}{% pl
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{OT4}\fontfamily{cmr}\selectfont}%
-    \def\@oguills{{\selectguillfont\symbol{174}}}%
-    \def\@fguills{{\selectguillfont\symbol{175}}}}
-}
-
-
-\AtBeginDocument{%
-  \ifx\GOfrench\undefined
-    \aeguills
-  \else
-    \let\aeguill@GOfrench\GOfrench
-    \gdef\GOfrench{\aeguill@GOfrench \aeguills}%
-  \fi
-  }
-
-\endinput
-%
-

+ 0 - 8
papers/ipfs-ttpw/.gitignore

@@ -1,8 +0,0 @@
-gfs.pdf
-gfs.aux
-gfs.log
-texput.log
-ipfs.aux
-ipfs.log
-ipfs.pgf-plot.gnuplot
-ipfs.pgf-plot.table

+ 0 - 19
papers/ipfs-ttpw/Makefile

@@ -1,19 +0,0 @@
-
-SHORT=ipfs-ttpw
-LONG=ipfs-toward-the-permanent-web
-
-all: $(LONG).pdf
-
-$(LONG).pdf: $(SHORT).tex sig-alternate.cls
-	pdflatex --shell-escape $(SHORT).tex
-	mv $(SHORT).pdf $(LONG).pdf
-
-clean:
-	rm *.bbl *.aux *.dvi *.blg *.log *.gnuplot *.table
-
-watch:
-	-make
-	@echo "[watching *.tex for recompilation]"
-	# for portability, use watchmedo -- pip install watchmedo
-	@watchmedo shell-command --patterns="*.tex;" --recursive \
-		--command='make' .

+ 0 - 1670
papers/ipfs-ttpw/acm-article.cls

@@ -1,1670 +0,0 @@
-% ACM_PROC_ARTICLE-SP.CLS - VERSION 3.2SP
-% COMPATIBLE WITH THE "SIG-ALTERNATE" V2.4
-% Gerald Murray - April 22nd. 2009
-%
-% ---- Start of 'updates'  ----
-%
-% April 22nd. 2009 - Fixed 'Natbib' incompatibility problem - Gerry
-% April 22nd. 2009 - Fixed 'Babel' incompatibility problem - Gerry
-% April 22nd. 2009 - Inserted various bug-fixes and improvements - Gerry
-%
-% To produce Type 1 fonts in the document plus allow for 'normal LaTeX accenting' in the critical areas;
-% title, author block, section-heads, etc. etc. 
-% i.e. the whole purpose of this version update is to NOT resort to 'inelegant accent patches'.
-% After much research, three extra .sty packages were added to the the tail (ae, aecompl, aeguill) to solve,
-% in particular, the accenting problem(s). We _could_ ask authors (via instructions/sample file) to 'include' these in
-% the source .tex file - in the preamble - but if everything is already provided ('behind the scenes' - embedded IN the .cls)
-% then this is less work for authors and also makes everything appear 'vanilla'.
-% NOTE: all 'patchwork accenting" has been commented out (here) and is no longer 'used' in the sample .tex file (either).
-% Gerry June 2007
-%
-% Rule widths changed to .5, author count (>6) fixed, roll-back for Type 3 problem. Gerry March 20th. 2007
-% Changes made to 'modernize' the fontnames but esp. for MikTeX users V2.4/2.5 - Nov. 30th. 2006
-% Updated the \email definition to allow for its use inside of 'shared affiliations' - Nov. 30th. 2006
-% Fixed the 'section number depth value' - Nov. 30th. 2006
-%
-% Footnotes inside table cells using \minipage (Oct. 2002)
-% Georgia fixed bug in sub-sub-section numbering in paragraphs (July 29th. 2002)
-% JS/GM fix to vertical spacing before Proofs (July 30th. 2002)
-%
-% Allowance made to switch default fonts between those systems using
-% normal/modern font names and those using 'Type 1' or 'Truetype' fonts.
-% See LINE NUMBER 269 for details.
-% Also provided for enumerated/annotated Corollaries 'surrounded' by
-% enumerated Theorems (line 844).
-% Gerry November 11th. 1999
-%
-% This 'sp' version does NOT produce the permission block.
-%
-% Major change in January 2000 was to include a "blank line" in between
-% new paragraphs. This involved major changes to the, then, acmproc-sp.cls  1.0SP
-% file, precipitating a 'new' name: "acm_proc_article-sp.cls" V2.01SP.
-%
-% ---- End of 'updates' ----
-%
-\def\fileversion{V3.2SP}         % for ACM's tracking purposes
-\def\filedate{April 22, 2009}    % Gerry Murray's tracking data
-\def\docdate {Wednesday 22nd. April 2009} % Gerry Murray (with deltas to doc}
-\usepackage{epsfig}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{amsfonts}
-% Need this for accents in Arial/Helvetica
-%\usepackage[T1]{fontenc}  % Gerry March 12, 2007 - causes Type 3 problems (body text)
-%\usepackage{textcomp}
-%
-% ACM_PROC_ARTICLE-SP  DOCUMENT STYLE
-% G.K.M. Tobin August-October 1999
-%    adapted from ARTICLE document style by Ken Traub, Olin Shivers
-%    also using elements of esub2acm.cls
-% LATEST REVISION V3.2SP - APRIL 2009
-% ARTICLE DOCUMENT STYLE -- Released 16 March 1988
-%    for LaTeX version 2.09
-% Copyright (C) 1988 by Leslie Lamport
-%
-%
-%%% ACM_PROC_ARTICLE-SP is a document style for producing two-column camera-ready pages for
-%%% ACM conferences, according to ACM specifications.  The main features of
-%%% this style are:
-%%%
-%%% 1)  Two columns.
-%%% 2)  Side and top margins of 4.5pc, bottom margin of 6pc, column gutter of
-%%%     2pc, hence columns are 20pc wide and 55.5pc tall.  (6pc =3D 1in, approx)
-%%% 3)  First page has title information, and an extra 6pc of space at the
-%%%     bottom of the first column for the ACM copyright notice.
-%%% 4)  Text is 9pt on 10pt baselines; titles (except main) are 9pt bold.
-%%%
-%%%
-%%% There are a few restrictions you must observe:
-%%%
-%%% 1)  You cannot change the font size; ACM wants you to use 9pt.
-%%% 3)  You must start your paper with the \maketitle command.  Prior to the
-%%%     \maketitle you must have \title and \author commands.  If you have a
-%%%     \date command it will be ignored; no date appears on the paper, since
-%%%     the proceedings will have a date on the front cover.
-%%% 4)  Marginal paragraphs, tables of contents, lists of figures and tables,
-%%%     and page headings are all forbidden.
-%%% 5)  The `figure' environment will produce a figure one column wide; if you
-%%%     want one that is two columns wide, use `figure*'.
-%%%
-%
-%%% Copyright Space:
-%%% This style automatically leaves 1" blank space at the bottom of page 1/
-%%% column 1.  This space can optionally be filled with some text using the
-%%% \toappear{...} command.  If used, this command must be BEFORE the \maketitle
-%%% command.  If this command is defined AND [preprint] is on, then the
-%%% space is filled with the {...} text (at the bottom); otherwise, it is
-%%% blank.  If you use \toappearbox{...} instead of \toappear{...} then a
-%%% box will be drawn around the text (if [preprint] is on).
-%%%
-%%% A typical usage looks like this:
-%%%     \toappear{To appear in the Ninth AES Conference on Medievil Lithuanian
-%%%               Embalming Technique, June 1991, Alfaretta, Georgia.}
-%%% This will be included in the preprint, and left out of the conference
-%%% version.
-%%%
-%%% WARNING:
-%%% Some dvi-ps converters heuristically allow chars to drift from their
-%%% true positions a few pixels. This may be noticeable with the 9pt sans-serif
-%%% bold font used for section headers.
-%%% You may turn this hackery off via the -e option:
-%%%     dvips -e 0 foo.dvi >foo.ps
-%%%
-\typeout{Document Class 'acm_proc_article-sp' <22nd. April '09>.  Modified by G.K.M. Tobin}
-\typeout{Based in part upon document Style `acmconf' <22 May 89>. Hacked 4/91 by}
-\typeout{shivers@cs.cmu.edu, 4/93 by theobald@cs.mcgill.ca}
-\typeout{Excerpts were taken from (Journal Style) 'esub2acm.cls'.}
-\typeout{****** Bugs/comments/suggestions  to Gerry Murray -- murray@hq.acm.org ******}
-
-\oddsidemargin 4.5pc
-\evensidemargin 4.5pc
-\advance\oddsidemargin by -1in  % Correct for LaTeX gratuitousness
-\advance\evensidemargin by -1in % Correct for LaTeX gratuitousness
-\marginparwidth 0pt             % Margin pars are not allowed.
-\marginparsep 11pt              % Horizontal space between outer margin and
-                                % marginal note
-
-                                % Top of page:
-\topmargin 4.5pc                % Nominal distance from top of page to top of
-                                % box containing running head.
-\advance\topmargin by -1in      % Correct for LaTeX gratuitousness
-\headheight 0pt                 % Height of box containing running head.
-\headsep 0pt                    % Space between running head and text.
-                                % Bottom of page:
-\footskip 30pt                  % Distance from baseline of box containing foot
-                                % to baseline of last line of text.
-\@ifundefined{footheight}{\newdimen\footheight}{}% this is for LaTeX2e
-\footheight 12pt                % Height of box containing running foot.
-
-
-%% Must redefine the top margin so there's room for headers and
-%% page numbers if you are using the preprint option. Footers
-%% are OK as is. Olin.
-\advance\topmargin by -37pt     % Leave 37pt above text for headers
-\headheight 12pt                % Height of box containing running head.
-\headsep 25pt                   % Space between running head and text.
-
-\textheight 666pt       % 9 1/4 column height
-\textwidth 42pc         % Width of text line.
-                        % For two-column mode:
-\columnsep 2pc          %    Space between columns
-\columnseprule 0pt      %    Width of rule between columns.
-\hfuzz 1pt              % Allow some variation in column width, otherwise it's
-                        % too hard to typeset in narrow columns.
-
-\footnotesep 5.6pt      % Height of strut placed at the beginning of every
-                        % footnote =3D height of normal \footnotesize strut,
-                        % so no extra space between footnotes.
-
-\skip\footins 8.1pt plus 4pt minus 2pt  % Space between last line of text and
-                                        % top of first footnote.
-\floatsep 11pt plus 2pt minus 2pt       % Space between adjacent floats moved
-                                        % to top or bottom of text page.
-\textfloatsep 18pt plus 2pt minus 4pt   % Space between main text and floats
-                                        % at top or bottom of page.
-\intextsep 11pt plus 2pt minus 2pt      % Space between in-text figures and
-                                        % text.
-\@ifundefined{@maxsep}{\newdimen\@maxsep}{}% this is for LaTeX2e
-\@maxsep 18pt                           % The maximum of \floatsep,
-                                        % \textfloatsep and \intextsep (minus
-                                        % the stretch and shrink).
-\dblfloatsep 11pt plus 2pt minus 2pt    % Same as \floatsep for double-column
-                                        % figures in two-column mode.
-\dbltextfloatsep 18pt plus 2pt minus 4pt% \textfloatsep for double-column
-                                        % floats.
-\@ifundefined{@dblmaxsep}{\newdimen\@dblmaxsep}{}% this is for LaTeX2e
-\@dblmaxsep 18pt                        % The maximum of \dblfloatsep and
-                                        % \dbltexfloatsep.
-\@fptop 0pt plus 1fil    % Stretch at top of float page/column. (Must be
-                         % 0pt plus ...)
-\@fpsep 8pt plus 2fil    % Space between floats on float page/column.
-\@fpbot 0pt plus 1fil    % Stretch at bottom of float page/column. (Must be
-                         % 0pt plus ... )
-\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
-\@dblfpsep 8pt plus 2fil % Space between floats on float page.
-\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
-                         % 0pt plus ... )
-\marginparpush 5pt       % Minimum vertical separation between two marginal
-                         % notes.
-
-\parskip 0pt                % Extra vertical space between paragraphs.
-                    % Set to 0pt outside sections, to keep section heads
-                    % uniformly spaced.  The value of parskip is set
-                    % to leading value _within_ sections.
-                    % 12 Jan 2000 gkmt
-\parindent 0pt                % Width of paragraph indentation.
-\partopsep 2pt plus 1pt minus 1pt% Extra vertical space, in addition to
-                                 % \parskip and \topsep, added when user
-                                 % leaves blank line before environment.
-
-\@lowpenalty   51       % Produced by \nopagebreak[1] or \nolinebreak[1]
-\@medpenalty  151       % Produced by \nopagebreak[2] or \nolinebreak[2]
-\@highpenalty 301       % Produced by \nopagebreak[3] or \nolinebreak[3]
-
-\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
-\@endparpenalty   -\@lowpenalty % After a list or paragraph environment.
-\@itempenalty     -\@lowpenalty % Between list items.
-
-%\@namedef{ds@10pt}{\@latexerr{The `10pt' option is not allowed in the `acmconf'
-\@namedef{ds@10pt}{\ClassError{The `10pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-%\@namedef{ds@11pt}{\@latexerr{The `11pt' option is not allowed in the `acmconf'
-\@namedef{ds@11pt}{\ClassError{The `11pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-%\@namedef{ds@12pt}{\@latexerr{The `12pt' option is not allowed in the `acmconf'
-\@namedef{ds@12pt}{\ClassError{The `12pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-
-\@options
-
-\lineskip 2pt           % \lineskip is 1pt for all font sizes.
-\normallineskip 2pt
-\def\baselinestretch{1}
-
-\abovedisplayskip 9pt plus2pt minus4.5pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip  \z@ plus3pt%
-\belowdisplayshortskip  5.4pt plus3pt minus3pt%
-\let\@listi\@listI     % Setting of \@listi added 9 Jun 87
-
-\def\small{\@setsize\small{9pt}\viiipt\@viiipt
-\abovedisplayskip 7.6pt plus 3pt minus 4pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip \z@ plus2pt%
-\belowdisplayshortskip 3.6pt plus2pt minus 2pt
-\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
-\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
-\itemsep \parsep}}
-
-\def\footnotesize{\@setsize\footnotesize{9pt}\ixpt\@ixpt
-\abovedisplayskip 6.4pt plus 2pt minus 4pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip \z@ plus 1pt%
-\belowdisplayshortskip 2.7pt plus 1pt minus 2pt
-\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
-\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
-\itemsep \parsep}}
-
-\newcount\aucount
-\newcount\originalaucount
-\newdimen\auwidth
-\auwidth=\textwidth
-\newdimen\auskip
-\newcount\auskipcount
-\newdimen\auskip
-\global\auskip=1pc
-\newdimen\allauboxes
-\allauboxes=\auwidth
-\newtoks\addauthors
-\newcount\addauflag
-\global\addauflag=0 %Haven't shown additional authors yet
-
-\newtoks\subtitletext
-\gdef\subtitle#1{\subtitletext={#1}}
-
-\gdef\additionalauthors#1{\addauthors={#1}}
-
-\gdef\numberofauthors#1{\global\aucount=#1
-\ifnum\aucount>3\global\originalaucount=\aucount \global\aucount=3\fi %g}  % 3 OK - Gerry March 2007
-\global\auskipcount=\aucount\global\advance\auskipcount by 1
-\global\multiply\auskipcount by 2
-\global\multiply\auskip by \auskipcount
-\global\advance\auwidth by -\auskip
-\global\divide\auwidth by \aucount}
-
-% \and was modified to count the number of authors.  GKMT 12 Aug 1999
-\def\alignauthor{%                  % \begin{tabular}
-\end{tabular}%
-  \begin{tabular}[t]{p{\auwidth}}\centering}%
-
-
-%  *** NOTE *** NOTE *** NOTE *** NOTE ***
-%  If you have 'font problems' then you may need
-%  to change these, e.g. 'arialb' instead of "arialbd".
-%  Gerry Murray 11/11/1999
-%  *** OR ** comment out block A and activate block B or vice versa.
-% **********************************************
-%
-%  -- Start of block A -- (Type 1 or Truetype fonts)
-%\newfont{\secfnt}{timesbd at 12pt} % was timenrb originally - now is timesbd
-%\newfont{\secit}{timesbi at 12pt}   %13 Jan 00 gkmt
-%\newfont{\subsecfnt}{timesi at 11pt} % was timenrri originally - now is timesi
-%\newfont{\subsecit}{timesbi at 11pt} % 13 Jan 00 gkmt -- was times changed to timesbi gm 2/4/2000
-%                         % because "normal" is italic, "italic" is Roman
-%\newfont{\ttlfnt}{arialbd at 18pt} % was arialb originally - now is arialbd
-%\newfont{\ttlit}{arialbi at 18pt}    % 13 Jan 00 gkmt
-%\newfont{\subttlfnt}{arial at 14pt} % was arialr originally - now is arial
-%\newfont{\subttlit}{ariali at 14pt} % 13 Jan 00 gkmt
-%\newfont{\subttlbf}{arialbd at 14pt}  % 13 Jan 00 gkmt
-%\newfont{\aufnt}{arial at 12pt} % was arialr originally - now is arial
-%\newfont{\auit}{ariali at 12pt} % 13 Jan 00 gkmt
-%\newfont{\affaddr}{arial at 10pt} % was arialr originally - now is arial
-%\newfont{\affaddrit}{ariali at 10pt} %13 Jan 00 gkmt
-%\newfont{\eaddfnt}{arial at 12pt} % was arialr originally - now is arial
-%\newfont{\ixpt}{times at 9pt} % was timenrr originally - now is times
-%\newfont{\confname}{timesi at 8pt} % was timenrri - now is timesi
-%\newfont{\crnotice}{times at 8pt} % was timenrr originally - now is times
-%\newfont{\ninept}{times at 9pt} % was timenrr originally - now is times
-% *********************************************
-%  -- End of block A --
-%
-%
-% -- Start of block B -- UPDATED FONT NAMES
-% *********************************************
-% Gerry Murray 11/30/2006
-% *********************************************
-\newfont{\secfnt}{ptmb8t at 12pt}
-\newfont{\secit}{ptmbi8t at 12pt}    %13 Jan 00 gkmt
-\newfont{\subsecfnt}{ptmri8t at 11pt}
-\newfont{\subsecit}{ptmbi8t at 11pt}  % 
-\newfont{\ttlfnt}{phvb8t at 18pt}
-\newfont{\ttlit}{phvbo8t at 18pt}    % GM 2/4/2000
-\newfont{\subttlfnt}{phvr8t at 14pt}
-\newfont{\subttlit}{phvro8t at 14pt} % GM 2/4/2000
-\newfont{\subttlbf}{phvb8t at 14pt}  % 13 Jan 00 gkmt
-\newfont{\aufnt}{phvr8t at 12pt}
-\newfont{\auit}{phvro8t at 12pt}     % GM 2/4/2000
-\newfont{\affaddr}{phvr8t at 10pt}
-\newfont{\affaddrit}{phvro8t at 10pt} % GM 2/4/2000
-\newfont{\eaddfnt}{phvr8t at 12pt}
-\newfont{\ixpt}{ptmr8t at 9pt}
-\newfont{\confname}{ptmri8t at 8pt}
-\newfont{\crnotice}{ptmr8t at 8pt}
-\newfont{\ninept}{ptmr8t at 9pt}
-% +++++++++++++++++++++++++++++++++++++++++++++
-% -- End of block B --
-
-%\def\email#1{{{\eaddfnt{\vskip 4pt#1}}}}
-% If we have an email, inside a "shared affiliation" then we need the following instead
-\def\email#1{{{\eaddfnt{\par #1}}}}       % revised  - GM - 11/30/2006
-
-\def\addauthorsection{\ifnum\originalaucount>6  % was 3 - Gerry March 2007
-    \section{Additional Authors}\the\addauthors
-  \fi}
-
-\newcount\savesection
-\newcount\sectioncntr
-\global\sectioncntr=1
-
-\setcounter{secnumdepth}{3}
-
-\def\appendix{\par
-\section*{APPENDIX}
-\setcounter{section}{0}
- \setcounter{subsection}{0}
- \def\thesection{\Alph{section}} }
-
-
-\leftmargini 22.5pt
-\leftmarginii 19.8pt    % > \labelsep + width of '(m)'
-\leftmarginiii 16.8pt   % > \labelsep + width of 'vii.'
-\leftmarginiv 15.3pt    % > \labelsep + width of 'M.'
-\leftmarginv 9pt
-\leftmarginvi 9pt
-
-\leftmargin\leftmargini
-\labelsep 4.5pt
-\labelwidth\leftmargini\advance\labelwidth-\labelsep
-
-\def\@listI{\leftmargin\leftmargini \parsep 3.6pt plus 2pt minus 1pt%
-\topsep 7.2pt plus 2pt minus 4pt%
-\itemsep 3.6pt plus 2pt minus 1pt}
-
-\let\@listi\@listI
-\@listi
-
-\def\@listii{\leftmargin\leftmarginii
-   \labelwidth\leftmarginii\advance\labelwidth-\labelsep
-   \topsep 3.6pt plus 2pt minus 1pt
-   \parsep 1.8pt plus 0.9pt minus 0.9pt
-   \itemsep \parsep}
-
-\def\@listiii{\leftmargin\leftmarginiii
-    \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
-    \topsep 1.8pt plus 0.9pt minus 0.9pt
-    \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
-    \itemsep \topsep}
-
-\def\@listiv{\leftmargin\leftmarginiv
-     \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
-
-\def\@listv{\leftmargin\leftmarginv
-     \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
-
-\def\@listvi{\leftmargin\leftmarginvi
-     \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
-
-\def\labelenumi{\theenumi.}
-\def\theenumi{\arabic{enumi}}
-
-\def\labelenumii{(\theenumii)}
-\def\theenumii{\alph{enumii}}
-\def\p@enumii{\theenumi}
-
-\def\labelenumiii{\theenumiii.}
-\def\theenumiii{\roman{enumiii}}
-\def\p@enumiii{\theenumi(\theenumii)}
-
-\def\labelenumiv{\theenumiv.}
-\def\theenumiv{\Alph{enumiv}}
-\def\p@enumiv{\p@enumiii\theenumiii}
-
-\def\labelitemi{$\bullet$}
-\def\labelitemii{\bf --}
-\def\labelitemiii{$\ast$}
-\def\labelitemiv{$\cdot$}
-
-\def\verse{\let\\=\@centercr
-  \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
-          \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
-\let\endverse\endlist
-
-\def\quotation{\list{}{\listparindent 1.5em
-    \itemindent\listparindent
-    \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
-\let\endquotation=\endlist
-
-\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
-\let\endquote=\endlist
-
-\def\descriptionlabel#1{\hspace\labelsep \bf #1}
-\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
-       \let\makelabel\descriptionlabel}}
-
-\let\enddescription\endlist
-
-\def\theequation{\arabic{equation}}
-
-\arraycolsep 4.5pt   % Half the space between columns in an array environment.
-\tabcolsep 5.4pt     % Half the space between columns in a tabular environment.
-\arrayrulewidth .5pt % Width of rules in array and tabular environment. % (was .4) updated Gerry March 20 2007
-\doublerulesep 1.8pt % Space between adjacent rules in array or tabular env.
-
-\tabbingsep \labelsep   % Space used by the \' command.  (See LaTeX manual.)
-
-\skip\@mpfootins =\skip\footins
-
-\fboxsep =2.7pt      % Space left between box and text by \fbox and \framebox.
-\fboxrule =.5pt      % Width of rules in box made by \fbox and \framebox. % (was .4) updated Gerry March 20 2007
-
-\def\thepart{\Roman{part}} % Roman numeral part numbers.
-\def\thesection       {\arabic{section}}
-\def\thesubsection    {\thesection.\arabic{subsection}}
-%\def\thesubsubsection {\thesubsection.\arabic{subsubsection}} % GM 7/30/2002
-%\def\theparagraph     {\thesubsubsection.\arabic{paragraph}}  % GM 7/30/2002
-\def\thesubparagraph  {\theparagraph.\arabic{subparagraph}}
-
-\def\@pnumwidth{1.55em}
-\def\@tocrmarg {2.55em}
-\def\@dotsep{4.5}
-\setcounter{tocdepth}{3}
-
-%\def\tableofcontents{\@latexerr{\tableofcontents: Tables of contents are not
-%  allowed in the `acmconf' document style.}\@eha}
-
-\def\tableofcontents{\ClassError{%
-    \string\tableofcontents\space is not allowed in the `acmconf' document	% January 2008
-    style}\@eha}
-
-\def\l@part#1#2{\addpenalty{\@secpenalty}
-   \addvspace{2.25em plus 1pt}  % space above part line
-   \begingroup
-   \@tempdima 3em       % width of box holding part number, used by
-     \parindent \z@ \rightskip \@pnumwidth      %% \numberline
-     \parfillskip -\@pnumwidth
-     {\large \bf        % set line in \large boldface
-     \leavevmode        % TeX command to enter horizontal mode.
-     #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
-     \nobreak           % Never break after part entry
-   \endgroup}
-
-\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
-   \addvspace{1.0em plus 1pt}   % space above toc entry
-   \@tempdima 1.5em             % width of box holding section number
-   \begingroup
-     \parindent \z@ \rightskip \@pnumwidth
-     \parfillskip -\@pnumwidth
-     \bf                        % Boldface.
-     \leavevmode                % TeX command to enter horizontal mode.
-      \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
-      \hskip -\leftskip           %% 25 Jan 88 change to \numberline
-     #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
-   \endgroup}
-
-
-\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
-\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
-\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
-\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
-
-%\def\listoffigures{\@latexerr{\listoffigures: Lists of figures are not
-%  allowed in the `acmconf' document style.}\@eha}
-
-\def\listoffigures{\ClassError{%
-    \string\listoffigures\space is not allowed in the `acmconf' document	% January 2008
-    style}\@eha}
-
-\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
-
-%\def\listoftables{\@latexerr{\listoftables: Lists of tables are not
-%  allowed in the `acmconf' document style.}\@eha}
-%\let\l@table\l@figure
-
-\def\listoftables{\ClassError{%
-    \string\listoftables\space is not allowed in the `acmconf' document		% January 2008
-    style}\@eha}
- \let\l@table\l@figure
-
-\def\footnoterule{\kern-3\p@
-  \hrule width .5\columnwidth   % (was .4) updated Gerry March 20 2007
-  \kern 2.6\p@}                 % The \hrule has default height of .4pt % (was .4) updated Gerry March 20 2007
-% ------
-\long\def\@makefntext#1{\noindent 
-%\hbox to .5em{\hss$^{\@thefnmark}$}#1}   % original
-\hbox to .5em{\hss\textsuperscript{\@thefnmark}}#1}  % C. Clifton / GM Oct. 2nd. 2002
-% -------
-
-\long\def\@maketntext#1{\noindent
-#1}
-
-\long\def\@maketitlenotetext#1#2{\noindent
-            \hbox to 1.8em{\hss$^{#1}$}#2}
-
-\setcounter{topnumber}{2}
-\def\topfraction{.7}
-\setcounter{bottomnumber}{1}
-\def\bottomfraction{.3}
-\setcounter{totalnumber}{3}
-\def\textfraction{.2}
-\def\floatpagefraction{.5}
-\setcounter{dbltopnumber}{2}
-\def\dbltopfraction{.7}
-\def\dblfloatpagefraction{.5}
-
-\long\def\@makecaption#1#2{
-   \vskip \baselineskip
-   \setbox\@tempboxa\hbox{\textbf{#1: #2}}
-   \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
-       \textbf{#1: #2}\par               %   THEN set as ordinary paragraph.
-     \else                      %   ELSE  center.
-       \hbox to\hsize{\hfil\box\@tempboxa\hfil}\par
-   \fi}
-
-\@ifundefined{figure}{\newcounter {figure}} % this is for LaTeX2e
-
-\def\fps@figure{tbp}
-\def\ftype@figure{1}
-\def\ext@figure{lof}
-\def\fnum@figure{Figure \thefigure}
-\def\figure{\@float{figure}}
-%\let\endfigure\end@float
-\def\endfigure{\end@float} 		% Gerry January 2008
-\@namedef{figure*}{\@dblfloat{figure}}
-\@namedef{endfigure*}{\end@dblfloat}
-
-\@ifundefined{table}{\newcounter {table}} % this is for LaTeX2e
-
-\def\fps@table{tbp}
-\def\ftype@table{2}
-\def\ext@table{lot}
-\def\fnum@table{Table \thetable}
-\def\table{\@float{table}}
-%\let\endtable\end@float
-\def\endtable{\end@float}		% Gerry January 2008
-\@namedef{table*}{\@dblfloat{table}}
-\@namedef{endtable*}{\end@dblfloat}
-
-\newtoks\titleboxnotes
-\newcount\titleboxnoteflag
-
-\def\maketitle{\par
- \begingroup
-   \def\thefootnote{\fnsymbol{footnote}}
-   \def\@makefnmark{\hbox
-       to 0pt{$^{\@thefnmark}$\hss}}
-     \twocolumn[\@maketitle]
-\@thanks
- \endgroup
- \setcounter{footnote}{0}
- \let\maketitle\relax
- \let\@maketitle\relax
- \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}\let\thanks\relax
- \@copyrightspace}
-
-%% CHANGES ON NEXT LINES
-\newif\if@ll % to record which version of LaTeX is in use
-
-\expandafter\ifx\csname LaTeXe\endcsname\relax % LaTeX2.09 is used
-\else% LaTeX2e is used, so set ll to true
-\global\@lltrue
-\fi
-
-\if@ll
-  \NeedsTeXFormat{LaTeX2e}
-  \ProvidesClass{acm_proc_article-sp} [2009/04/22 - V3.2SP - based on esub2acm.sty <23 April 96>]
-  \RequirePackage{latexsym}% QUERY: are these two really needed?
-  \let\dooptions\ProcessOptions
-\else
-  \let\dooptions\@options
-\fi
-%% END CHANGES
-
-\def\@height{height}
-\def\@width{width}
-\def\@minus{minus}
-\def\@plus{plus}
-\def\hb@xt@{\hbox to}
-\newif\if@faircopy
-\@faircopyfalse
-\def\ds@faircopy{\@faircopytrue}
-
-\def\ds@preprint{\@faircopyfalse}
-
-\@twosidetrue
-\@mparswitchtrue
-\def\ds@draft{\overfullrule 5\p@}
-%% CHANGE ON NEXT LINE
-\dooptions
-
-\lineskip \p@
-\normallineskip \p@
-\def\baselinestretch{1}
-\def\@ptsize{0} %needed for amssymbols.sty
-
-%% CHANGES ON NEXT LINES
-\if@ll% allow use of old-style font change commands in LaTeX2e
-\@maxdepth\maxdepth
-%
-\DeclareOldFontCommand{\rm}{\ninept\rmfamily}{\mathrm}
-\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
-\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
-\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
-\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
-\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
-\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
-\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
-\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
-\fi
-%
-\if@ll
- \renewcommand{\rmdefault}{cmr}  % was 'ttm'
-% Note! I have also found 'mvr' to work ESPECIALLY well.
-% Gerry - October 1999
-% You may need to change your LV1times.fd file so that sc is
-% mapped to cmcsc - -for smallcaps -- that is if you decide
-% to change {cmr} to {times} above. (Not recommended)
-  \renewcommand{\@ptsize}{}
-  \renewcommand{\normalsize}{%
-    \@setfontsize\normalsize\@ixpt{10.5\p@}%\ninept%
-    \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
-    \belowdisplayskip \abovedisplayskip
-    \abovedisplayshortskip 6\p@ \@minus 3\p@
-    \belowdisplayshortskip 6\p@ \@minus 3\p@
-    \let\@listi\@listI
-  }
-\else
-  \def\@normalsize{%changed next to 9 from 10
-    \@setsize\normalsize{9\p@}\ixpt\@ixpt
-   \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
-    \belowdisplayskip \abovedisplayskip
-    \abovedisplayshortskip 6\p@ \@minus 3\p@
-    \belowdisplayshortskip 6\p@ \@minus 3\p@
-    \let\@listi\@listI
-  }%
-\fi
-\if@ll
-  \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt{8\p@}}
-  \newcommand\tiny{\@setfontsize\tiny\@vpt{6\p@}}
-  \newcommand\large{\@setfontsize\large\@xiipt{14\p@}}
-  \newcommand\Large{\@setfontsize\Large\@xivpt{18\p@}}
-  \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20\p@}}
-  \newcommand\huge{\@setfontsize\huge\@xxpt{25\p@}}
-  \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30\p@}}
-\else
-  \def\scriptsize{\@setsize\scriptsize{8\p@}\viipt\@viipt}
-  \def\tiny{\@setsize\tiny{6\p@}\vpt\@vpt}
-  \def\large{\@setsize\large{14\p@}\xiipt\@xiipt}
-  \def\Large{\@setsize\Large{18\p@}\xivpt\@xivpt}
-  \def\LARGE{\@setsize\LARGE{20\p@}\xviipt\@xviipt}
-  \def\huge{\@setsize\huge{25\p@}\xxpt\@xxpt}
-  \def\Huge{\@setsize\Huge{30\p@}\xxvpt\@xxvpt}
-\fi
-\normalsize
-
-% make aubox hsize/number of authors up to 3, less gutter
-% then showbox gutter showbox gutter showbox -- GKMT Aug 99
-\newbox\@acmtitlebox
-\def\@maketitle{\newpage
- \null
- \setbox\@acmtitlebox\vbox{%
-\baselineskip 20pt
-\vskip 2em                   % Vertical space above title.
-   \begin{center}
-    {\ttlfnt \@title\par}       % Title set in 18pt Helvetica (Arial) bold size.
-    \vskip 1.5em                % Vertical space after title.
-%This should be the subtitle.
-{\subttlfnt \the\subtitletext\par}\vskip 1.25em%\fi
-    {\baselineskip 16pt\aufnt   % each author set in \12 pt Arial, in a
-     \lineskip .5em             % tabular environment
-     \begin{tabular}[t]{c}\@author
-     \end{tabular}\par}
-    \vskip 1.5em               % Vertical space after author.
-   \end{center}}
- \dimen0=\ht\@acmtitlebox
- \advance\dimen0 by -12.75pc\relax % Increased space for title box -- KBT
- \unvbox\@acmtitlebox
- \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi}
-
-
-\newcount\titlenotecount
-\global\titlenotecount=0
-\newtoks\tntoks
-\newtoks\tntokstwo
-\newtoks\tntoksthree
-\newtoks\tntoksfour
-\newtoks\tntoksfive
-
-\def\abstract{
-\ifnum\titlenotecount>0 % was =1
-    \insert\footins{%
-    \reset@font\footnotesize
-        \interlinepenalty\interfootnotelinepenalty
-        \splittopskip\footnotesep
-        \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-        \hsize\columnwidth \@parboxrestore
-        \protected@edef\@currentlabel{%
-        }%
-        \color@begingroup
-\ifnum\titlenotecount=1
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=2
-      \@maketntext{%
-      \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=3
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=4
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=5
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\P$}\rule\z@\footnotesep\ignorespaces\the\tntoksfive\@finalstrut\strutbox}%
-\fi
-   \color@endgroup} %g}
-\fi
-\setcounter{footnote}{0}
-\section*{ABSTRACT}\normalsize %\the\parskip \the\baselineskip%\ninept
-}
-
-\def\endabstract{\if@twocolumn\else\endquotation\fi}
-
-\def\keywords{\if@twocolumn
-\section*{Keywords}
-\else \small
-\quotation
-\fi}
-
-% I've pulled the check for 2 cols, since proceedings are _always_
-% two-column  11 Jan 2000 gkmt
-\def\terms{%\if@twocolumn
-\section*{General Terms}
-%\else \small
-%\quotation\the\parskip
-%\fi}
-}
-
-% -- Classification needs to be a bit smart due to optionals - Gerry/Georgia November 2nd. 1999
-\newcount\catcount
-\global\catcount=1
-
-\def\category#1#2#3{%
-\ifnum\catcount=1
-\section*{Categories and Subject Descriptors}
-\advance\catcount by 1\else{\unskip; }\fi
-    \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}%
-}
-
-\def\@category#1#2#3[#4]{%
-    \begingroup
-        \let\and\relax
-            #1 [\textbf{#2}]%
-            \if!#4!%
-                \if!#3!\else : #3\fi
-            \else
-                :\space
-                \if!#3!\else #3\kern\z@---\hskip\z@\fi
-                \textit{#4}%
-            \fi
-    \endgroup
-}
-%
-
-%%% This section (written by KBT) handles the 1" box in the lower left
-%%% corner of the left column of the first page by creating a picture,
-%%% and inserting the predefined string at the bottom (with a negative
-%%% displacement to offset the space allocated for a non-existent
-%%% caption).
-%%%
-\newtoks\copyrightnotice
-\def\ftype@copyrightbox{8}
-\def\@copyrightspace{
-\@float{copyrightbox}[b]
-\begin{center}
-\setlength{\unitlength}{1pc}
-\begin{picture}(20,6) %Space for copyright notice
-\put(0,-0.95){\crnotice{\@toappear}}
-\end{picture}
-\end{center}
-\end@float}
-
-\def\@toappear{} % Default setting blank - commands below change this.
-\long\def\toappear#1{\def\@toappear{\parbox[b]{20pc}{\baselineskip 9pt#1}}}
-\def\toappearbox#1{\def\@toappear{\raisebox{5pt}{\framebox[20pc]{\parbox[b]{19pc}{#1}}}}}
-
-\newtoks\conf
-\newtoks\confinfo
-\def\conferenceinfo#1#2{\global\conf={#1}\global\confinfo{#2}}
-
-
-%\def\marginpar{\@latexerr{The \marginpar command is not allowed in the
-%  `acmconf' document style.}\@eha}
-
-\def\marginpar{\ClassError{%
-    \string\marginpar\space is not allowed in the `acmconf' document		% January 2008
-    style}\@eha}
-
-\mark{{}{}}     % Initializes TeX's marks
-
-\def\today{\ifcase\month\or
-  January\or February\or March\or April\or May\or June\or
-  July\or August\or September\or October\or November\or December\fi
-  \space\number\day, \number\year}
-
-\def\@begintheorem#1#2{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {{\sc #1}\hskip 5\p@\relax#2.}%
-    ]
-    \it
-}
-\def\@opargbegintheorem#1#2#3{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\sc #1\ #2\             % This mod by Gerry to enumerate corollaries
-   \setbox\@tempboxa\hbox{(#3)}  % and bracket the 'corollary title'
-        \ifdim \wd\@tempboxa>\z@ % and retain the correct numbering of e.g. theorems
-            \hskip 5\p@\relax    % if they occur 'around' said corollaries.
-            \box\@tempboxa       % Gerry - Nov. 1999.
-        \fi.}%
-    ]
-    \it
-}
-\newif\if@qeded
-\global\@qededfalse
-
-% -- original
-%\def\proof{%
-%  \vspace{-\parskip} % GM July 2000 (for tighter spacing)
-%    \global\@qededfalse
-%    \@ifnextchar[{\@xproof}{\@proof}%
-%}
-% -- end of original
-
-% (JSS) Fix for vertical spacing bug - Gerry Murray July 30th. 2002
-\def\proof{%
-\vspace{-\lastskip}\vspace{-\parsep}\penalty-51%
-\global\@qededfalse
-\@ifnextchar[{\@xproof}{\@proof}%
-}
-
-\def\endproof{%
-    \if@qeded\else\qed\fi
-    \endtrivlist
-}
-\def\@proof{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\sc Proof.}%
-    ]
-    \ignorespaces
-}
-\def\@xproof[#1]{%
-    \trivlist
-    \item[\hskip 10\p@\hskip \labelsep{\sc Proof #1.}]%
-    \ignorespaces
-}
-\def\qed{%
-    \unskip
-    \kern 10\p@
-    \begingroup
-        \unitlength\p@
-        \linethickness{.4\p@}%
-        \framebox(6,6){}%
-    \endgroup
-    \global\@qededtrue
-}
-
-\def\newdef#1#2{%
-    \expandafter\@ifdefinable\csname #1\endcsname
-        {\@definecounter{#1}%
-         \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
-         \global\@namedef{#1}{\@defthm{#1}{#2}}%
-         \global\@namedef{end#1}{\@endtheorem}%
-    }%
-}
-\def\@defthm#1#2{%
-    \refstepcounter{#1}%
-    \@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}%
-}
-\def\@xdefthm#1#2{%
-    \@begindef{#2}{\csname the#1\endcsname}%
-    \ignorespaces
-}
-\def\@ydefthm#1#2[#3]{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\it #2%
-%         \savebox\@tempboxa{#3}%
-         \saveb@x\@tempboxa{#3}%		% January 2008
-         \ifdim \wd\@tempboxa>\z@
-            \ \box\@tempboxa
-         \fi.%
-        }]%
-    \ignorespaces
-}
-\def\@begindef#1#2{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\it #1\ \rm #2.}%
-    ]%
-}
-\def\theequation{\arabic{equation}}
-
-\newcounter{part}
-\newcounter{section}
-\newcounter{subsection}[section]
-\newcounter{subsubsection}[subsection]
-\newcounter{paragraph}[subsubsection]
-\def\thepart{\Roman{part}}
-\def\thesection{\arabic{section}}
-\def\thesubsection{\thesection.\arabic{subsection}}
-\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} %removed \subsecfnt 29 July 2002 gkmt
-\def\theparagraph{\thesubsubsection.\arabic{paragraph}} %removed \subsecfnt 29 July 2002 gkmt
-
-\newif\if@uchead
-\@ucheadfalse
-
-%% CHANGES: NEW NOTE
-%% NOTE: OK to use old-style font commands below, since they were
-%% suitably redefined for LaTeX2e
-%% END CHANGES
-\setcounter{secnumdepth}{3}
-\def\part{%
-    \@startsection{part}{9}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}
-        {4\p@}{\normalsize\@ucheadtrue}%
-}
-
-% Rationale for changes made in next four definitions:
-% "Before skip" is made elastic to provide some give in setting columns (vs.
-% parskip, which is non-elastic to keep section headers "anchored" to their
-% subsequent text.
-%
-% "After skip" is minimized -- BUT setting it to 0pt resulted in run-in heads, despite
-% the documentation asserted only after-skip < 0pt would have result.
-%
-% Baselineskip added to style to ensure multi-line section titles, and section heads
-% followed by another section head rather than text, are decently spaced vertically.
-% 12 Jan 2000 gkmt
-\def\section{%
-    \@startsection{section}{1}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}%
-    {0.5pt}{\baselineskip=14pt\secfnt\@ucheadtrue}%
-}
-
-\def\subsection{%
-    \@startsection{subsection}{2}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}
-    {0.5pt}{\baselineskip=14pt\secfnt}%
-}
-\def\subsubsection{%
-    \@startsection{subsubsection}{3}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}%
-    {0.5pt}{\baselineskip=14pt\subsecfnt}%
-}
-
-%\def\paragraph{%
-%    \vskip 12pt\@startsection{paragraph}{3}{\z@}{6\p@ \@plus \p@}% original
-%    {-5\p@}{\subsecfnt}%
-%}
-%  If one wants sections, subsections and subsubsections numbered,
-%  but not paragraphs, one usually sets secnumepth to 3.
-%  For that, the "depth" of paragraphs must be given correctly
-%  in the definition (``4'' instead of ``3'' as second argument
-%  of @startsection):
-\def\paragraph{%
-    \vskip 12pt\@startsection{paragraph}{4}{\z@}{6\p@ \@plus \p@}%    % GM and Wolfgang May - 11/30/06
-    {-5\p@}{\subsecfnt}%
-}
-
-\let\@period=.
-\def\@startsection#1#2#3#4#5#6{%
-        \if@noskipsec  %gkmt, 11 aug 99
-        \global\let\@period\@empty
-        \leavevmode
-        \global\let\@period.%
-    \fi
-    \par
-    \@tempskipa #4\relax
-    \@afterindenttrue
-    \ifdim \@tempskipa <\z@
-        \@tempskipa -\@tempskipa
-        \@afterindentfalse
-    \fi
-    %\if@nobreak  11 Jan 00 gkmt
-        %\everypar{}
-    %\else
-        \addpenalty\@secpenalty
-        \addvspace\@tempskipa
-    %\fi
-    \parskip=0pt
-    \@ifstar
-        {\@ssect{#3}{#4}{#5}{#6}}
-        {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
-}
-
-
-\def\@ssect#1#2#3#4#5{%
-  \@tempskipa #3\relax
-  \ifdim \@tempskipa>\z@
-    \begingroup
-      #4{%
-        \@hangfrom{\hskip #1}%
-          \interlinepenalty \@M #5\@@par}%
-    \endgroup
-  \else
-    \def\@svsechd{#4{\hskip #1\relax #5}}%
-  \fi
-  \vskip -10.5pt  %gkmt, 7 jan 00 -- had been -14pt, now set to parskip
-  \@xsect{#3}\parskip=10.5pt} % within the starred section, parskip = leading 12 Jan 2000 gkmt
-
-
-\def\@sect#1#2#3#4#5#6[#7]#8{%
-    \ifnum #2>\c@secnumdepth
-        \let\@svsec\@empty
-    \else
-        \refstepcounter{#1}%
-        \edef\@svsec{%
-            \begingroup
-                %\ifnum#2>2 \noexpand\rm \fi % changed to next 29 July 2002 gkmt
-            \ifnum#2>2 \noexpand#6 \fi
-                \csname the#1\endcsname
-            \endgroup
-            \ifnum #2=1\relax .\fi
-            \hskip 1em
-        }%
-    \fi
-    \@tempskipa #5\relax
-    \ifdim \@tempskipa>\z@
-        \begingroup
-            #6\relax
-            \@hangfrom{\hskip #3\relax\@svsec}%
-            \begingroup
-                \interlinepenalty \@M
-                \if@uchead
-                    \uppercase{#8}%
-                \else
-                    #8%
-                \fi
-                \par
-            \endgroup
-        \endgroup
-        \csname #1mark\endcsname{#7}%
-        \vskip -10.5pt  % -14pt gkmt, 11 aug 99 -- changed to -\parskip 11 Jan 2000
-      \addcontentsline{toc}{#1}{%
-            \ifnum #2>\c@secnumdepth \else
-                \protect\numberline{\csname the#1\endcsname}%
-            \fi
-            #7%
-        }%
-    \else
-        \def\@svsechd{%
-            #6%
-            \hskip #3\relax
-            \@svsec
-            \if@uchead
-                \uppercase{#8}%
-            \else
-                #8%
-            \fi
-            \csname #1mark\endcsname{#7}%
-            \addcontentsline{toc}{#1}{%
-                \ifnum #2>\c@secnumdepth \else
-                    \protect\numberline{\csname the#1\endcsname}%
-                \fi
-                #7%
-            }%
-        }%
-    \fi
-    \@xsect{#5}\parskip=10.5pt% within the section, parskip = leading 12 Jan 2000 gkmt
-}
-\def\@xsect#1{%
-    \@tempskipa #1\relax
-    \ifdim \@tempskipa>\z@
-        \par
-        \nobreak
-        \vskip \@tempskipa
-        \@afterheading
-    \else
-        \global\@nobreakfalse
-        \global\@noskipsectrue
-        \everypar{%
-            \if@noskipsec
-                \global\@noskipsecfalse
-                \clubpenalty\@M
-                \hskip -\parindent
-                \begingroup
-                    \@svsechd
-                    \@period
-                \endgroup
-                \unskip
-                \@tempskipa #1\relax
-                \hskip -\@tempskipa
-            \else
-                \clubpenalty \@clubpenalty
-                \everypar{}%
-            \fi
-        }%
-    \fi
-    \ignorespaces
-}
-
-\def\@trivlist{%
-    \@topsepadd\topsep
-    \if@noskipsec
-        \global\let\@period\@empty
-        \leavevmode
-        \global\let\@period.%
-    \fi
-    \ifvmode
-        \advance\@topsepadd\partopsep
-    \else
-        \unskip
-        \par
-    \fi
-    \if@inlabel
-        \@noparitemtrue
-        \@noparlisttrue
-    \else
-        \@noparlistfalse
-        \@topsep\@topsepadd
-    \fi
-    \advance\@topsep \parskip
-    \leftskip\z@skip
-    \rightskip\@rightskip
-    \parfillskip\@flushglue
-    \@setpar{\if@newlist\else{\@@par}\fi}
-    \global\@newlisttrue
-    \@outerparskip\parskip
-}
-
-%%% Actually, 'abbrev' works just fine as the default - Gerry Feb. 2000
-%%% Bibliography style.
-
-\parindent 0pt
-\typeout{Using 'Abbrev' bibliography style}
-\newcommand\bibyear[2]{%
-    \unskip\quad\ignorespaces#1\unskip
-    \if#2..\quad \else \quad#2 \fi
-}
-\newcommand{\bibemph}[1]{{\em#1}}
-\newcommand{\bibemphic}[1]{{\em#1\/}}
-\newcommand{\bibsc}[1]{{\sc#1}}
-\def\@normalcite{%
-    \def\@cite##1##2{[##1\if@tempswa , ##2\fi]}%
-}
-\def\@citeNB{%
-    \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
-}
-\def\@citeRB{%
-    \def\@cite##1##2{##1\if@tempswa , ##2\fi]}%
-}
-\def\start@cite#1#2{%
-    \edef\citeauthoryear##1##2##3{%
-        ###1%
-        \ifnum#2=\z@ \else\ ###2\fi
-    }%
-    \ifnum#1=\thr@@
-        \let\@@cite\@citeyear
-    \else
-        \let\@@cite\@citenormal
-    \fi
-    \@ifstar{\@citeNB\@@cite}{\@normalcite\@@cite}%
-}
-%\def\cite{\start@cite23}
-\DeclareRobustCommand\cite{\start@cite23}		% January 2008
-\def\citeNP{\cite*}					% No Parentheses e.g. 5
-%\def\citeA{\start@cite10}
-\DeclareRobustCommand\citeA{\start@cite10}		% January 2008
-\def\citeANP{\citeA*}
-%\def\shortcite{\start@cite23}				
-\DeclareRobustCommand\shortcite{\start@cite23}		% January 2008
-\def\shortciteNP{\shortcite*}
-%\def\shortciteA{\start@cite20}
-\DeclareRobustCommand\shortciteA{\start@cite20}		% January 2008
-\def\shortciteANP{\shortciteA*}
-%\def\citeyear{\start@cite30}
-\DeclareRobustCommand\citeyear{\start@cite30}		% January 2008
-\def\citeyearNP{\citeyear*}
-%\def\citeN{%
-\DeclareRobustCommand\citeN{%				% January 2008
-    \@citeRB
-    \def\citeauthoryear##1##2##3{##1\ [##3%
-        \def\reserved@a{##1}%
-        \def\citeauthoryear####1####2####3{%
-            \def\reserved@b{####1}%
-            \ifx\reserved@a\reserved@b
-                ####3%
-            \else
-                \errmessage{Package acmart Error: author mismatch
-                         in \string\citeN^^J^^J%
-                    See the acmart package documentation for explanation}%
-            \fi
-        }%
-    }%
-    \@ifstar\@citeyear\@citeyear
-}
-%\def\shortciteN{%
-\DeclareRobustCommand\shortciteN{%			% January 2008
-    \@citeRB
-    \def\citeauthoryear##1##2##3{##2\ [##3%
-        \def\reserved@a{##2}%
-        \def\citeauthoryear####1####2####3{%
-            \def\reserved@b{####2}%
-            \ifx\reserved@a\reserved@b
-                ####3%
-            \else
-                \errmessage{Package acmart Error: author mismatch
-                         in \string\shortciteN^^J^^J%
-                    See the acmart package documentation for explanation}%
-            \fi
-        }%
-    }%
-    \@ifstar\@citeyear\@citeyear % changed from  "\@ifstart" 12 Jan 2000 gkmt
-}
-
-\def\@citenormal{%
-    \@ifnextchar [{\@tempswatrue\@citex;}%
-% original                 {\@tempswafalse\@citex,[]}% was ; Gerry 2/24/00
-{\@tempswafalse\@citex[]}%  	% GERRY FIX FOR BABEL 3/20/2009
-}
-
-\def\@citeyear{%
-    \@ifnextchar [{\@tempswatrue\@citex,}%
-% original                  {\@tempswafalse\@citex,[]}%
-{\@tempswafalse\@citex[]}%	%  GERRY FIX FOR BABEL 3/20/2009
-}
-
-\def\@citex#1[#2]#3{%
-    \let\@citea\@empty
-    \@cite{%
-        \@for\@citeb:=#3\do{%
-            \@citea
-% original            \def\@citea{#1 }%
-            \def\@citea{#1, }% 	% GERRY FIX FOR BABEL 3/20/2009 -- SO THAT YOU GET [1, 2] IN THE BODY TEXT
-            \edef\@citeb{\expandafter\@iden\@citeb}%
-            \if@filesw
-                \immediate\write\@auxout{\string\citation{\@citeb}}%
-            \fi
-            \@ifundefined{b@\@citeb}{%
-                {\bf ?}%
-                \@warning{%
-                    Citation `\@citeb' on page \thepage\space undefined%
-                }%
-            }%
-            {\csname b@\@citeb\endcsname}%
-        }%
-    }{#2}%
-}
-%\let\@biblabel\@gobble   % Dec. 2008 - Gerry
-% ----
-\def\@biblabelnum#1{[#1]} % Gerry's solution #1 - for Natbib 
-\let\@biblabel=\@biblabelnum  % Gerry's solution #1 - for Natbib
-\def\newblock{\relax} % Gerry Dec. 2008
-% ---
-\newdimen\bibindent
-\setcounter{enumi}{1}
-\bibindent=0em
-\def\thebibliography#1{% 
-\ifnum\addauflag=0\addauthorsection\global\addauflag=1\fi
-     \section[References]{%    <=== OPTIONAL ARGUMENT ADDED HERE
-        {References} % was uppercased but this affects pdf bookmarks (SP/GM October 2004)
-         \@mkboth{{\refname}}{{\refname}}%
-     }%
-     \list{[\arabic{enumi}]}{%
-         \settowidth\labelwidth{[#1]}%
-         \leftmargin\labelwidth
-         \advance\leftmargin\labelsep
-         \advance\leftmargin\bibindent
-         \parsep=0pt\itemsep=1pt % GM July 2000
-         \itemindent -\bibindent
-         \listparindent \itemindent
-         \usecounter{enumi}
-     }%
-     \let\newblock\@empty
-     \raggedright % GM July 2000
-     \sloppy
-     \sfcode`\.=1000\relax
-}
-
-
-\gdef\balancecolumns
-{\vfill\eject
-\global\@colht=\textheight
-\global\ht\@cclv=\textheight
-}
-
-\newcount\colcntr
-\global\colcntr=0
-%\newbox\savebox
-\newbox\saveb@x				% January 2008
-
-\gdef \@makecol {%
-\global\advance\colcntr by 1
-\ifnum\colcntr>2 \global\colcntr=1\fi
-   \ifvoid\footins
-     \setbox\@outputbox \box\@cclv
-   \else
-     \setbox\@outputbox \vbox{%
-\boxmaxdepth \@maxdepth
-       \@tempdima\dp\@cclv
-       \unvbox \@cclv
-       \vskip-\@tempdima
-       \vskip \skip\footins
-       \color@begingroup
-         \normalcolor
-         \footnoterule
-         \unvbox \footins
-       \color@endgroup
-       }%
-   \fi
-   \xdef\@freelist{\@freelist\@midlist}%
-   \global \let \@midlist \@empty
-   \@combinefloats
-   \ifvbox\@kludgeins
-     \@makespecialcolbox
-   \else
-     \setbox\@outputbox \vbox to\@colht {%
-\@texttop
-       \dimen@ \dp\@outputbox
-       \unvbox \@outputbox
-   \vskip -\dimen@
-       \@textbottom
-       }%
-   \fi
-   \global \maxdepth \@maxdepth
-}
-\def\titlenote{\@ifnextchar[\@xtitlenote{\stepcounter\@mpfn
-\global\advance\titlenotecount by 1
-\ifnum\titlenotecount=1
-    \raisebox{9pt}{$\ast$}
-\fi
-\ifnum\titlenotecount=2
-    \raisebox{9pt}{$\dagger$}
-\fi
-\ifnum\titlenotecount=3
-    \raisebox{9pt}{$\ddagger$}
-\fi
-\ifnum\titlenotecount=4
-\raisebox{9pt}{$\S$}
-\fi
-\ifnum\titlenotecount=5
-\raisebox{9pt}{$\P$}
-\fi
-         \@titlenotetext
-}}
-
-\long\def\@titlenotetext#1{\insert\footins{%
-\ifnum\titlenotecount=1\global\tntoks={#1}\fi
-\ifnum\titlenotecount=2\global\tntokstwo={#1}\fi
-\ifnum\titlenotecount=3\global\tntoksthree={#1}\fi
-\ifnum\titlenotecount=4\global\tntoksfour={#1}\fi
-\ifnum\titlenotecount=5\global\tntoksfive={#1}\fi
-    \reset@font\footnotesize
-    \interlinepenalty\interfootnotelinepenalty
-    \splittopskip\footnotesep
-    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-    \hsize\columnwidth \@parboxrestore
-    \protected@edef\@currentlabel{%
-    }%
-    \color@begingroup
-   \color@endgroup}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%
-\ps@plain
-\baselineskip=11pt
-\let\thepage\relax % For  NO page numbers - Gerry Nov. 30th. 1999
-\def\setpagenumber#1{\global\setcounter{page}{#1}}
-%\pagenumbering{arabic}  % Arabic page numbers but commented out for NO page numbes - Gerry Nov. 30th. 1999
-\twocolumn             % Double column.
-\flushbottom           % Even bottom -- alas, does not balance columns at end of document
-\pagestyle{plain}
-
-% Need Copyright Year and Copyright Data to be user definable (in .tex file).
-% Gerry Nov. 30th. 1999
-\newtoks\copyrtyr
-\newtoks\acmcopyr
-\newtoks\boilerplate
-\def\CopyrightYear#1{\global\copyrtyr{#1}}
-\def\crdata#1{\global\acmcopyr{#1}}
-\def\permission#1{\global\boilerplate{#1}}
-%
-\newtoks\copyrightetc
-\global\copyrightetc{\ } %  Need to have 'something' so that adequate space is left for pasting in a line if "confinfo" is supplied.
-
-\toappear{\the\boilerplate\par
-{\confname{\the\conf}} \the\confinfo\par \the\copyrightetc}
-% End of ACM_PROC_ARTICLE-SP.CLS -- V3.2SP - 04/22/2009 --
-% Gerry Murray -- Wednesday April 22nd. 2009
-%
-% The following section (i.e. 3 .sty inclusions) was added in May 2007 so as to fix the problems that many
-% authors were having with accents. Sometimes accents would occur, but the letter-character would be of a different
-% font. Conversely the letter-character font would be correct but, e.g. a 'bar' would appear superimposed on the
-% character instead of, say, an unlaut/diaresis. Sometimes the letter-character would NOT appear at all.
-% Using [T1]{fontenc} outright was not an option as this caused 99% of the authors to 'produce' a Type-3 (bitmapped)
-% PDF file - useless for production. 
-%
-% For proper (font) accenting we NEED these packages to be part of the .cls file i.e. 'ae', 'aecompl' and 'aeguil' 
-% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-%% This is file `ae.sty' 
-\def\fileversion{1.3}
-\def\filedate{2001/02/12}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{ae}[\filedate\space\fileversion\space  % GM
-% Almost European Computer Modern]                       % GM - keeping the log file clean(er)
-\newif\if@ae@slides \@ae@slidesfalse
-\DeclareOption{slides}{\@ae@slidestrue}
-\ProcessOptions
-\fontfamily{aer}
-\RequirePackage[T1]{fontenc}
-\if@ae@slides
-    \renewcommand{\sfdefault}{laess}
-    \renewcommand{\rmdefault}{laess} % no roman
-    \renewcommand{\ttdefault}{laett}
-\else
-    \renewcommand{\sfdefault}{aess}
-    \renewcommand{\rmdefault}{aer}
-    \renewcommand{\ttdefault}{aett}
-\fi
-\endinput
-%% 
-%% End of file `ae.sty'.
-%
-%
-\def\fileversion{0.9}
-\def\filedate{1998/07/23}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{aecompl}[\filedate\space\fileversion\space   % GM
-%T1 Complements for AE fonts (D. Roegel)]                      % GM -- keeping the log file clean(er)
- 
-\def\@ae@compl#1{{\fontencoding{T1}\fontfamily{cmr}\selectfont\symbol{#1}}}
-\def\guillemotleft{\@ae@compl{19}}
-\def\guillemotright{\@ae@compl{20}}
-\def\guilsinglleft{\@ae@compl{14}}
-\def\guilsinglright{\@ae@compl{15}}
-\def\TH{\@ae@compl{222}}
-\def\NG{\@ae@compl{141}}
-\def\ng{\@ae@compl{173}}
-\def\th{\@ae@compl{254}}
-\def\DJ{\@ae@compl{208}}
-\def\dj{\@ae@compl{158}}
-\def\DH{\@ae@compl{208}}
-\def\dh{\@ae@compl{240}}
-\def\@perthousandzero{\@ae@compl{24}}
-\def\textperthousand{\%\@perthousandzero}
-\def\textpertenthousand{\%\@perthousandzero\@perthousandzero}
-\endinput
-%
-%
-%% This is file `aeguill.sty' 
-% This file gives french guillemets (and not guillemots!)
-% built with the Polish CMR fonts (default), WNCYR fonts, the LASY fonts 
-% or with the EC fonts. 
-% This is useful in conjunction with the ae package
-% (this package loads the ae package in case it has not been loaded)
-%  and with or without the french(le) package.
-%
-% In order to get the guillemets, it is necessary to either type
-% \guillemotleft and \guillemotright, or to use an 8 bit encoding
-% (such as ISO-Latin1) which selects these two commands, 
-% or, if you use the french package (but not the frenchle package), 
-% to type << or >>.
-%
-% By default, you get the Polish CMR guillemets; if this package is loaded
-% with the `cm' option, you get the LASY guillemets; with `ec,' you
-% get the EC guillemets, and with `cyr,' you get the cyrillic guillemets.
-%
-% In verbatim mode, you always get the EC/TT guillemets.
-%
-% The default option is interesting in conjunction with PDF,
-% because there is a Type 1 version of the Polish CMR fonts
-% and these guillemets are very close in shape to the EC guillemets.
-% There are no free Type 1 versions of the EC fonts.
-%
-% Support for Polish CMR guillemets was kindly provided by 
-% Rolf Niepraschk <niepraschk@ptb.de> in version 0.99 (2000/05/22).
-% Bernd Raichle provided extensive simplifications to the code
-% for version 1.00.
-%
-% This package is released under the LPPL.
-%
-% Changes:
-%   Date        version
-%   2001/04/12  1.01    the frenchle and french package are now distinguished.
-%
-\def\fileversion{1.01}
-\def\filedate{2001/04/12}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{aeguill}[2001/04/12 1.01 %    % GM
-%AE fonts with french guillemets (D. Roegel)]   % GM - keeping the log file clean(er)
-%\RequirePackage{ae}  % GM May 2007 - already embedded here
-
-\newcommand{\@ae@switch}[4]{#4}
-\DeclareOption{ec}{\renewcommand\@ae@switch[4]{#1}}
-\DeclareOption{cm}{\renewcommand\@ae@switch[4]{#2}}
-\DeclareOption{cyr}{\renewcommand\@ae@switch[4]{#3}}
-\DeclareOption{pl}{\renewcommand\@ae@switch[4]{#4}}
-\ExecuteOptions{pl}
-\ProcessOptions
-
-%
-% Load necessary packages
-%
-\@ae@switch{% ec
-  % do nothing
-}{% cm
-  \RequirePackage{latexsym}%  GM - May 2007 - already 'mentioned as required' up above
-}{% cyr
-  \RequirePackage[OT2,T1]{fontenc}%
-}{% pl
-  \RequirePackage[OT4,T1]{fontenc}%
-}
-
-% The following command will be compared to \frenchname,
-% as defined in french.sty and frenchle.sty.
-\def\aeguillfrenchdefault{french}%
-
-\let\guill@verbatim@font\verbatim@font
-\def\verbatim@font{\guill@verbatim@font\ecguills{cmtt}%
-                   \let\guillemotleft\@oguills\let\guillemotright\@fguills}
-
-\begingroup \catcode`\<=13 \catcode`\>=13
-\def\x{\endgroup
- \def\ae@lfguill{<<}%
- \def\ae@rfguill{>>}%
-}\x
-
-\newcommand{\ecguills}[1]{%
-  \def\selectguillfont{\fontencoding{T1}\fontfamily{#1}\selectfont}%
-  \def\@oguills{{\selectguillfont\symbol{19}}}%
-  \def\@fguills{{\selectguillfont\symbol{20}}}%
-  } 
-
-\newcommand{\aeguills}{%
-  \ae@guills
-  % We redefine \guillemotleft and \guillemotright
-  % in order to catch them when they are used 
-  % with \DeclareInputText (in latin1.def for instance)
-  % We use \auxWARNINGi as a safe indicator that french.sty is used.
-  \gdef\guillemotleft{\ifx\auxWARNINGi\undefined
-                         \@oguills % neither french.sty nor frenchle.sty
-                      \else
-                         \ifx\aeguillfrenchdefault\frenchname
-                           \ae@lfguill  % french.sty
-                         \else
-                           \@oguills    % frenchle.sty
-                         \fi
-                      \fi}%
-  \gdef\guillemotright{\ifx\auxWARNINGi\undefined
-                         \@fguills % neither french.sty nor frenchle.sty
-                       \else
-                         \ifx\aeguillfrenchdefault\frenchname
-                           \ae@rfguill  % french.sty
-                         \else
-                           \@fguills    % frenchle.sty
-                         \fi
-                       \fi}%
-  }
-
-%
-% Depending on the class option
-% define the internal command \ae@guills
-\@ae@switch{% ec
-  \newcommand{\ae@guills}{%
-    \ecguills{cmr}}%
-}{% cm
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{U}\fontfamily{lasy}%
-            \fontseries{m}\fontshape{n}\selectfont}%
-    \def\@oguills{\leavevmode\nobreak
-                \hbox{\selectguillfont (\kern-.20em(\kern.20em}\nobreak}%
-    \def\@fguills{\leavevmode\nobreak
-                \hbox{\selectguillfont \kern.20em)\kern-.2em)}%
-                \ifdim\fontdimen\@ne\font>\z@\/\fi}}%
-}{% cyr
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{OT2}\fontfamily{wncyr}\selectfont}%
-    \def\@oguills{{\selectguillfont\symbol{60}}}%
-    \def\@fguills{{\selectguillfont\symbol{62}}}}
-}{% pl
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{OT4}\fontfamily{cmr}\selectfont}%
-    \def\@oguills{{\selectguillfont\symbol{174}}}%
-    \def\@fguills{{\selectguillfont\symbol{175}}}}
-}
-
-
-\AtBeginDocument{%
-  \ifx\GOfrench\undefined
-    \aeguills
-  \else
-    \let\aeguill@GOfrench\GOfrench
-    \gdef\GOfrench{\aeguill@GOfrench \aeguills}%
-  \fi
-  }
-
-\endinput
-%
-
-

BIN
papers/ipfs-ttpw/ipfs-toward-the-permanent-web.pdf


+ 0 - 92
papers/ipfs-ttpw/ipfs-ttpw.tex

@@ -1,92 +0,0 @@
-\documentclass{sig-alternate}
-
-\usepackage{tikz}
-\usetikzlibrary{arrows}
-\usetikzlibrary{trees}
-\usetikzlibrary{positioning}
-
-\usepackage{array}
-\usepackage{amstext}
-\usepackage{mathtools}
-\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil}
-
-\begin{document}
-
-\title{IPFS - Toward The Permanet Web (DRAFT 1)}
-\subtitle{}
-
-\numberofauthors{1}
-
-\author{
-% You can go ahead and credit any number of authors here,
-% e.g. one 'row of three' or two rows (consisting of one row of three
-% and a second row of one, two or three).
-%
-% The command \alignauthor (no curly braces needed) should
-% precede each author name, affiliation/snail-mail address and
-% e-mail address. Additionally, tag each line of
-% affiliation/address with \affaddr, and tag the
-% e-mail address with \email.
-%
-% 1st. author
-\alignauthor
-  Juan Benet\\
-  \email{juan@benet.ai}
-}
-
-\maketitle
-\begin{abstract}
-The InterPlanetary File System (IPFS) is a peer-to-peer distributed file system
-capable of sharing the same files with millions of nodes. It features a completely decentralized architecture, secure and efficient peer-to-peer block distribution, and a path-based naming system supporting distinguishing mutable and immutable names. The Web today still uses HTTP as the main data transport. IPFS is capable of evolving the web to take advantage of versioning, p2p distribution, cryptographic operations, and decentralized publishing. Moreover, it presents an opportunity to construct a web whose links do not rot, whose files are deduplicated globally, and whose websites are no longer ``sites''. IPFS is a step toward The Permanent Web.
-\end{abstract}
-
-\section{Introduction}
-
-[Motivate IPFS Web. Introduce problems. Describe HTTP problems. Link rot. Inefficient communication. Duplicate data. Integrity concerns. Centralized hosting. ]
-
-\section{IPFS and IPNS}
-
-Short overview of IPFS, IPNS, and their properties.
-
-\section{Permanence}
-
-\subsection{Permanent Links}
-\subsection{Deduplication}
-\subsection{Distributed Serving}
-\subsection{Publishing, Not Hosting}
-\subsection{New Applications}
-
-\section{Toward Permanence}
-
-Discuss implementation and deployment of the IPFS Web
-
-\subsection{Gateways}
-
-https?:\/\/ipfs.io\/<ipfs-path>
-
-\subsection{Browsers}
-\subsubsection{Javascript}
-\subsubsection{Extensions}
-\subsubsection{Browser}
-
-\subsection{Incentives}
-\subsubsection{Applications}
-\subsubsection{Cheaper Bandwidth}
-\subsubsection{Safer Browsing}
-\subsubsection{Safer Publishing}
-
-
-\section{The Permanent Future}
-
-
-
-\section{Acknowledgements}
-
-% Special thanks to David Mazieres, whose ideas are giants themselves.
-
-
-%\bibliographystyle{abbrv}
-%\bibliography{gfs}
-%\balancecolumns
-%\subsection{References}
-\end{document}

+ 0 - 6
papers/ipfs-ttpw/ipfs.bib

@@ -1,6 +0,0 @@
-@article{mrx05,
-auTHor = "Mr. X",
-Title = {Something Great},
-publisher = "nob" # "ody"},
-YEAR = 2005,
-}

+ 0 - 1651
papers/ipfs-ttpw/sig-alternate.cls

@@ -1,1651 +0,0 @@
-% SIG-ALTERNATE.CLS - VERSION 2.5
-% "COMPATIBLE" WITH THE "ACM_PROC_ARTICLE-SP.CLS" V3.2SP
-% Gerald Murray - May 23rd 2012
-%
-% ---- Start of 'updates'  ----
-% Changed $10 fee to $15 -- May 2012  --  Gerry
-% Changed $5 fee to $10 --  April 2009 -- Gerry
-% April 22nd. 2009 - Fixed 'Natbib' incompatibility problem - Gerry
-% April 22nd. 2009 - Fixed 'Babel' incompatibility problem - Gerry
-% April 22nd. 2009 - Inserted various bug-fixes and improvements - Gerry
-%
-% To produce Type 1 fonts in the document plus allow for 'normal LaTeX accenting' in the critical areas;
-% title, author block, section-heads, confname, etc. etc. 
-% i.e. the whole purpose of this version update is to NOT resort to 'inelegant accent patches'.
-% After much research, three extra .sty packages were added to the the tail (ae, aecompl, aeguill) to solve,
-% in particular, the accenting problem(s). We _could_ ask authors (via instructions/sample file) to 'include' these in
-% the source .tex file - in the preamble - but if everything is already provided ('behind the scenes' - embedded IN the .cls)
-% then this is less work for authors and also makes everything appear 'vanilla'.
-% NOTE: all 'patchwork accenting" has been commented out (here) and is no longer 'used' in the sample .tex file (either).
-% Gerry June 2007
-%
-% Patch for accenting in conference name/location. Gerry May 3rd. 2007
-% Rule widths changed to .5, author count (>6) fixed, roll-back for Type 3 problem. Gerry March 20th. 2007
-% Changes made to 'modernize' the fontnames but esp. for MikTeX users V2.4/2.5 - Nov. 30th. 2006
-% Updated the \email definition to allow for its use inside of 'shared affiliations' - Nov. 30th. 2006
-% Fixed the 'section number depth value' - Nov. 30th. 2006
-%
-% Footnotes inside table cells using \minipage (Oct. 2002)
-% Georgia fixed bug in sub-sub-section numbering in paragraphs (July 29th. 2002)
-% JS/GM fix to vertical spacing before Proofs (July 30th. 2002)
-%
-% Made the Permission Statement / Conference Info / Copyright Info
-% 'user definable' in the source .tex file OR automatic if
-% not specified.
-%
-% Allowance made to switch default fonts between those systems using
-% normal/modern font names and those using 'Type 1' or 'Truetype' fonts.
-% See LINE NUMBER 255 for details.
-% Also provided for enumerated/annotated Corollaries 'surrounded' by
-% enumerated Theorems (line 848).
-% Gerry November 11th. 1999
-%
-% ---- End of 'updates' ----
-%
-\def\fileversion{v2.5}          % for ACM's tracking purposes
-\def\filedate{May 23, 2012}    % Gerry Murray's tracking data
-\def\docdate {Wednesday 23rd. May 2012} % Gerry Murray (with deltas to doc}
-\usepackage{epsfig}
-\usepackage{amssymb}
-\usepackage{amsmath}
-\usepackage{amsfonts}
-% Need this for accents in Arial/Helvetica
-%\usepackage[T1]{fontenc}  % Gerry March 12, 2007 - causes Type 3 problems (body text)
-%\usepackage{textcomp}
-%
-% SIG-ALTERNATE DOCUMENT STYLE
-% G.K.M. Tobin August-October 1999
-%    adapted from ARTICLE document style by Ken Traub, Olin Shivers
-%    also using elements of esub2acm.cls
-% HEAVILY MODIFIED, SUBSEQUENTLY, BY GERRY MURRAY 2000
-% ARTICLE DOCUMENT STYLE -- Released 16 March 1988
-%    for LaTeX version 2.09
-% Copyright (C) 1988 by Leslie Lamport
-%
-%
-%%% sig-alternate.cls is an 'ALTERNATE' document style for producing
-%%% two-column camera-ready pages for ACM conferences.
-%%% THIS FILE DOES NOT STRICTLY ADHERE TO THE SIGS (BOARD-ENDORSED)
-%%% PROCEEDINGS STYLE. It has been designed to produce a 'tighter'
-%%% paper in response to concerns over page budgets.
-%%% The main features of this style are:
-%%%
-%%% 1)  Two columns.
-%%% 2)  Side and top margins of 4.5pc, bottom margin of 6pc, column gutter of
-%%%     2pc, hence columns are 20pc wide and 55.5pc tall.  (6pc =3D 1in, approx)
-%%% 3)  First page has title information, and an extra 6pc of space at the
-%%%     bottom of the first column for the ACM copyright notice.
-%%% 4)  Text is 9pt on 10pt baselines; titles (except main) are 9pt bold.
-%%%
-%%%
-%%% There are a few restrictions you must observe:
-%%%
-%%% 1)  You cannot change the font size; ACM wants you to use 9pt.
-%%% 3)  You must start your paper with the \maketitle command.  Prior to the
-%%%     \maketitle you must have \title and \author commands.  If you have a
-%%%     \date command it will be ignored; no date appears on the paper, since
-%%%     the proceedings will have a date on the front cover.
-%%% 4)  Marginal paragraphs, tables of contents, lists of figures and tables,
-%%%     and page headings are all forbidden.
-%%% 5)  The `figure' environment will produce a figure one column wide; if you
-%%%     want one that is two columns wide, use `figure*'.
-%%%
-%
-%%% Copyright Space:
-%%% This style automatically reserves 1" blank space at the bottom of page 1/
-%%% column 1.  This space can optionally be filled with some text using the
-%%% \toappear{...} command.  If used, this command must be BEFORE the \maketitle
-%%% command.  If this command is defined AND [preprint] is on, then the
-%%% space is filled with the {...} text (at the bottom); otherwise, it is
-%%% blank.  If you use \toappearbox{...} instead of \toappear{...} then a
-%%% box will be drawn around the text (if [preprint] is on).
-%%%
-%%% A typical usage looks like this:
-%%%     \toappear{To appear in the Ninth AES Conference on Medievil Lithuanian
-%%%               Embalming Technique, June 1991, Alfaretta, Georgia.}
-%%% This will be included in the preprint, and left out of the conference
-%%% version.
-%%%
-%%% WARNING:
-%%% Some dvi-ps converters heuristically allow chars to drift from their
-%%% true positions a few pixels. This may be noticeable with the 9pt sans-serif
-%%% bold font used for section headers.
-%%% You may turn this hackery off via the -e option:
-%%%     dvips -e 0 foo.dvi >foo.ps
-%%%
-\typeout{Document Class 'sig-alternate' <23rd. May '12>.  Modified by G.K.M. Tobin/Gerry Murray}
-\typeout{Based in part upon document Style `acmconf' <22 May 89>. Hacked 4/91 by}
-\typeout{shivers@cs.cmu.edu, 4/93 by theobald@cs.mcgill.ca}
-\typeout{Excerpts were taken from (Journal Style) 'esub2acm.cls'.}
-\typeout{****** Bugs/comments/suggestions/technicalities to Gerry Murray -- murray@hq.acm.org ******}
-\typeout{Questions on the style, SIGS policies, etc. to Adrienne Griscti griscti@acm.org}
-\oddsidemargin 4.5pc
-\evensidemargin 4.5pc
-\advance\oddsidemargin by -1in  % Correct for LaTeX gratuitousness
-\advance\evensidemargin by -1in % Correct for LaTeX gratuitousness
-\marginparwidth 0pt             % Margin pars are not allowed.
-\marginparsep 11pt              % Horizontal space between outer margin and
-                                % marginal note
-
-                                % Top of page:
-\topmargin 4.5pc                % Nominal distance from top of page to top of
-                                % box containing running head.
-\advance\topmargin by -1in      % Correct for LaTeX gratuitousness
-\headheight 0pt                 % Height of box containing running head.
-\headsep 0pt                    % Space between running head and text.
-                                % Bottom of page:
-\footskip 30pt                  % Distance from baseline of box containing foot
-                                % to baseline of last line of text.
-\@ifundefined{footheight}{\newdimen\footheight}{}% this is for LaTeX2e
-\footheight 12pt                % Height of box containing running foot.
-
-%% Must redefine the top margin so there's room for headers and
-%% page numbers if you are using the preprint option. Footers
-%% are OK as is. Olin.
-\advance\topmargin by -37pt     % Leave 37pt above text for headers
-\headheight 12pt                % Height of box containing running head.
-\headsep 25pt                   % Space between running head and text.
-
-\textheight 666pt       % 9 1/4 column height
-\textwidth 42pc         % Width of text line.
-                        % For two-column mode:
-\columnsep 2pc          %    Space between columns
-\columnseprule 0pt      %    Width of rule between columns.
-\hfuzz 1pt              % Allow some variation in column width, otherwise it's
-                        % too hard to typeset in narrow columns.
-
-\footnotesep 5.6pt      % Height of strut placed at the beginning of every
-                        % footnote =3D height of normal \footnotesize strut,
-                        % so no extra space between footnotes.
-
-\skip\footins 8.1pt plus 4pt minus 2pt  % Space between last line of text and
-                                        % top of first footnote.
-\floatsep 11pt plus 2pt minus 2pt       % Space between adjacent floats moved
-                                        % to top or bottom of text page.
-\textfloatsep 18pt plus 2pt minus 4pt   % Space between main text and floats
-                                        % at top or bottom of page.
-\intextsep 11pt plus 2pt minus 2pt      % Space between in-text figures and
-                                        % text.
-\@ifundefined{@maxsep}{\newdimen\@maxsep}{}% this is for LaTeX2e
-\@maxsep 18pt                           % The maximum of \floatsep,
-                                        % \textfloatsep and \intextsep (minus
-                                        % the stretch and shrink).
-\dblfloatsep 11pt plus 2pt minus 2pt    % Same as \floatsep for double-column
-                                        % figures in two-column mode.
-\dbltextfloatsep 18pt plus 2pt minus 4pt% \textfloatsep for double-column
-                                        % floats.
-\@ifundefined{@dblmaxsep}{\newdimen\@dblmaxsep}{}% this is for LaTeX2e
-\@dblmaxsep 18pt                        % The maximum of \dblfloatsep and
-                                        % \dbltexfloatsep.
-\@fptop 0pt plus 1fil    % Stretch at top of float page/column. (Must be
-                         % 0pt plus ...)
-\@fpsep 8pt plus 2fil    % Space between floats on float page/column.
-\@fpbot 0pt plus 1fil    % Stretch at bottom of float page/column. (Must be
-                         % 0pt plus ... )
-\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
-\@dblfpsep 8pt plus 2fil % Space between floats on float page.
-\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
-                         % 0pt plus ... )
-\marginparpush 5pt       % Minimum vertical separation between two marginal
-                         % notes.
-
-\parskip 0pt plus 1pt            % Extra vertical space between paragraphs.
-\parindent 9pt  % GM July 2000 / was 0pt - width of paragraph indentation.
-\partopsep 2pt plus 1pt minus 1pt% Extra vertical space, in addition to
-                                 % \parskip and \topsep, added when user
-                                 % leaves blank line before environment.
-
-\@lowpenalty   51       % Produced by \nopagebreak[1] or \nolinebreak[1]
-\@medpenalty  151       % Produced by \nopagebreak[2] or \nolinebreak[2]
-\@highpenalty 301       % Produced by \nopagebreak[3] or \nolinebreak[3]
-
-\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
-\@endparpenalty   -\@lowpenalty % After a list or paragraph environment.
-\@itempenalty     -\@lowpenalty % Between list items.
-
-%\@namedef{ds@10pt}{\@latexerr{The `10pt' option is not allowed in the `acmconf'
-\@namedef{ds@10pt}{\ClassError{The `10pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-%\@namedef{ds@11pt}{\@latexerr{The `11pt' option is not allowed in the `acmconf'
-\@namedef{ds@11pt}{\ClassError{The `11pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-%\@namedef{ds@12pt}{\@latexerr{The `12pt' option is not allowed in the `acmconf'
-\@namedef{ds@12pt}{\ClassError{The `12pt' option is not allowed in the `acmconf'	% January 2008
-  document style.}\@eha}
-
-\@options
-
-\lineskip 2pt           % \lineskip is 1pt for all font sizes.
-\normallineskip 2pt
-\def\baselinestretch{1}
-
-\abovedisplayskip 9pt plus2pt minus4.5pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip  \z@ plus3pt%
-\belowdisplayshortskip  5.4pt plus3pt minus3pt%
-\let\@listi\@listI     % Setting of \@listi added 9 Jun 87
-
-\def\small{\@setsize\small{9pt}\viiipt\@viiipt
-\abovedisplayskip 7.6pt plus 3pt minus 4pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip \z@ plus2pt%
-\belowdisplayshortskip 3.6pt plus2pt minus 2pt
-\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
-\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
-\itemsep \parsep}}
-
-\def\footnotesize{\@setsize\footnotesize{9pt}\ixpt\@ixpt
-\abovedisplayskip 6.4pt plus 2pt minus 4pt%
-\belowdisplayskip \abovedisplayskip
-\abovedisplayshortskip \z@ plus 1pt%
-\belowdisplayshortskip 2.7pt plus 1pt minus 2pt
-\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
-\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
-\itemsep \parsep}}
-
-\newcount\aucount
-\newcount\originalaucount
-\newdimen\auwidth
-\auwidth=\textwidth
-\newdimen\auskip
-\newcount\auskipcount
-\newdimen\auskip
-\global\auskip=1pc
-\newdimen\allauboxes
-\allauboxes=\auwidth
-\newtoks\addauthors
-\newcount\addauflag
-\global\addauflag=0 %Haven't shown additional authors yet
-
-\newtoks\subtitletext
-\gdef\subtitle#1{\subtitletext={#1}}
-
-\gdef\additionalauthors#1{\addauthors={#1}}
-
-\gdef\numberofauthors#1{\global\aucount=#1
-\ifnum\aucount>3\global\originalaucount=\aucount \global\aucount=3\fi %g}  % 3 OK - Gerry March 2007
-\global\auskipcount=\aucount\global\advance\auskipcount by 1
-\global\multiply\auskipcount by 2
-\global\multiply\auskip by \auskipcount
-\global\advance\auwidth by -\auskip
-\global\divide\auwidth by \aucount}
-
-% \and was modified to count the number of authors.  GKMT 12 Aug 1999
-\def\alignauthor{%                  % \begin{tabular}
-\end{tabular}%
-  \begin{tabular}[t]{p{\auwidth}}\centering}%
-
-%  *** NOTE *** NOTE *** NOTE *** NOTE ***
-%  If you have 'font problems' then you may need
-%  to change these, e.g. 'arialb' instead of "arialbd".
-%  Gerry Murray 11/11/1999
-%  *** OR ** comment out block A and activate block B or vice versa.
-% **********************************************
-%
-%  -- Start of block A -- (Type 1 or Truetype fonts)
-%\newfont{\secfnt}{timesbd at 12pt} % was timenrb originally - now is timesbd
-%\newfont{\secit}{timesbi at 12pt}   %13 Jan 00 gkmt
-%\newfont{\subsecfnt}{timesi at 11pt} % was timenrri originally - now is timesi
-%\newfont{\subsecit}{timesbi at 11pt} % 13 Jan 00 gkmt -- was times changed to timesbi gm 2/4/2000
-%                         % because "normal" is italic, "italic" is Roman
-%\newfont{\ttlfnt}{arialbd at 18pt} % was arialb originally - now is arialbd
-%\newfont{\ttlit}{arialbi at 18pt}    % 13 Jan 00 gkmt
-%\newfont{\subttlfnt}{arial at 14pt} % was arialr originally - now is arial
-%\newfont{\subttlit}{ariali at 14pt} % 13 Jan 00 gkmt
-%\newfont{\subttlbf}{arialbd at 14pt}  % 13 Jan 00 gkmt
-%\newfont{\aufnt}{arial at 12pt} % was arialr originally - now is arial
-%\newfont{\auit}{ariali at 12pt} % 13 Jan 00 gkmt
-%\newfont{\affaddr}{arial at 10pt} % was arialr originally - now is arial
-%\newfont{\affaddrit}{ariali at 10pt} %13 Jan 00 gkmt
-%\newfont{\eaddfnt}{arial at 12pt} % was arialr originally - now is arial
-%\newfont{\ixpt}{times at 9pt} % was timenrr originally - now is times
-%\newfont{\confname}{timesi at 8pt} % was timenrri - now is timesi
-%\newfont{\crnotice}{times at 8pt} % was timenrr originally - now is times
-%\newfont{\ninept}{times at 9pt} % was timenrr originally - now is times
-
-% *********************************************
-%  -- End of block A --
-%
-%
-% -- Start of block B -- UPDATED FONT NAMES
-% *********************************************
-% Gerry Murray 11/30/2006
-% *********************************************
-\newfont{\secfnt}{ptmb8t at 12pt}
-\newfont{\secit}{ptmbi8t at 12pt}    %13 Jan 00 gkmt
-\newfont{\subsecfnt}{ptmri8t at 11pt}
-\newfont{\subsecit}{ptmbi8t at 11pt}  % 
-\newfont{\ttlfnt}{phvb8t at 18pt}
-\newfont{\ttlit}{phvbo8t at 18pt}    % GM 2/4/2000
-\newfont{\subttlfnt}{phvr8t at 14pt}
-\newfont{\subttlit}{phvro8t at 14pt} % GM 2/4/2000
-\newfont{\subttlbf}{phvb8t at 14pt}  % 13 Jan 00 gkmt
-\newfont{\aufnt}{phvr8t at 12pt}
-\newfont{\auit}{phvro8t at 12pt}     % GM 2/4/2000
-\newfont{\affaddr}{phvr8t at 10pt}
-\newfont{\affaddrit}{phvro8t at 10pt} % GM 2/4/2000
-\newfont{\eaddfnt}{phvr8t at 12pt}
-\newfont{\ixpt}{ptmr8t at 9pt}
-\newfont{\confname}{ptmri8t at 8pt}
-\newfont{\crnotice}{ptmr8t at 8pt}
-\newfont{\ninept}{ptmr8t at 9pt}
-% +++++++++++++++++++++++++++++++++++++++++++++
-% -- End of block B --
-
-%\def\email#1{{{\eaddfnt{\vskip 4pt#1}}}}
-% If we have an email, inside a "shared affiliation" then we need the following instead
-\def\email#1{{{\eaddfnt{\par #1}}}}       % revised  - GM - 11/30/2006
-
-\def\addauthorsection{\ifnum\originalaucount>6  % was 3 - Gerry March 2007
-    \section{Additional Authors}\the\addauthors
-  \fi}
-
-\newcount\savesection
-\newcount\sectioncntr
-\global\sectioncntr=1
-
-\setcounter{secnumdepth}{3}
-
-\def\appendix{\par
-\section*{APPENDIX}
-\setcounter{section}{0}
- \setcounter{subsection}{0}
- \def\thesection{\Alph{section}} }
-
-\leftmargini 22.5pt
-\leftmarginii 19.8pt    % > \labelsep + width of '(m)'
-\leftmarginiii 16.8pt   % > \labelsep + width of 'vii.'
-\leftmarginiv 15.3pt    % > \labelsep + width of 'M.'
-\leftmarginv 9pt
-\leftmarginvi 9pt
-
-\leftmargin\leftmargini
-\labelsep 4.5pt
-\labelwidth\leftmargini\advance\labelwidth-\labelsep
-
-\def\@listI{\leftmargin\leftmargini \parsep 3.6pt plus 2pt minus 1pt%
-\topsep 7.2pt plus 2pt minus 4pt%
-\itemsep 3.6pt plus 2pt minus 1pt}
-
-\let\@listi\@listI
-\@listi
-
-\def\@listii{\leftmargin\leftmarginii
-   \labelwidth\leftmarginii\advance\labelwidth-\labelsep
-   \topsep 3.6pt plus 2pt minus 1pt
-   \parsep 1.8pt plus 0.9pt minus 0.9pt
-   \itemsep \parsep}
-
-\def\@listiii{\leftmargin\leftmarginiii
-    \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
-    \topsep 1.8pt plus 0.9pt minus 0.9pt
-    \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
-    \itemsep \topsep}
-
-\def\@listiv{\leftmargin\leftmarginiv
-     \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
-
-\def\@listv{\leftmargin\leftmarginv
-     \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
-
-\def\@listvi{\leftmargin\leftmarginvi
-     \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
-
-\def\labelenumi{\theenumi.}
-\def\theenumi{\arabic{enumi}}
-
-\def\labelenumii{(\theenumii)}
-\def\theenumii{\alph{enumii}}
-\def\p@enumii{\theenumi}
-
-\def\labelenumiii{\theenumiii.}
-\def\theenumiii{\roman{enumiii}}
-\def\p@enumiii{\theenumi(\theenumii)}
-
-\def\labelenumiv{\theenumiv.}
-\def\theenumiv{\Alph{enumiv}}
-\def\p@enumiv{\p@enumiii\theenumiii}
-
-\def\labelitemi{$\bullet$}
-\def\labelitemii{\bf --}
-\def\labelitemiii{$\ast$}
-\def\labelitemiv{$\cdot$}
-
-\def\verse{\let\\=\@centercr
-  \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
-          \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
-\let\endverse\endlist
-
-\def\quotation{\list{}{\listparindent 1.5em
-    \itemindent\listparindent
-    \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
-\let\endquotation=\endlist
-
-\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
-\let\endquote=\endlist
-
-\def\descriptionlabel#1{\hspace\labelsep \bf #1}
-\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
-       \let\makelabel\descriptionlabel}}
-
-\let\enddescription\endlist
-
-\def\theequation{\arabic{equation}}
-
-\arraycolsep 4.5pt   % Half the space between columns in an array environment.
-\tabcolsep 5.4pt    % Half the space between columns in a tabular environment.
-\arrayrulewidth .5pt % Width of rules in array and tabular environment. % (was .4) updated Gerry March 20 2007
-\doublerulesep 1.8pt % Space between adjacent rules in array or tabular env.
-
-\tabbingsep \labelsep   % Space used by the \' command.  (See LaTeX manual.)
-
-\skip\@mpfootins =\skip\footins
-
-\fboxsep =2.7pt      % Space left between box and text by \fbox and \framebox.
-\fboxrule =.5pt      % Width of rules in box made by \fbox and \framebox. % (was .4) updated Gerry March 20 2007
-
-\def\thepart{\Roman{part}} % Roman numeral part numbers.
-\def\thesection       {\arabic{section}}
-\def\thesubsection    {\thesection.\arabic{subsection}}
-%\def\thesubsubsection {\thesubsection.\arabic{subsubsection}} % GM 7/30/2002
-%\def\theparagraph     {\thesubsubsection.\arabic{paragraph}}  % GM 7/30/2002
-\def\thesubparagraph  {\theparagraph.\arabic{subparagraph}}
-
-\def\@pnumwidth{1.55em}
-\def\@tocrmarg {2.55em}
-\def\@dotsep{4.5}
-\setcounter{tocdepth}{3}
-
-%\def\tableofcontents{\@latexerr{\tableofcontents: Tables of contents are not
-%  allowed in the `acmconf' document style.}\@eha}
-
-\def\tableofcontents{\ClassError{%
-    \string\tableofcontents\space is not allowed in the `acmconf' document	% January 2008
-    style}\@eha}
-
-\def\l@part#1#2{\addpenalty{\@secpenalty}
-   \addvspace{2.25em plus 1pt}  % space above part line
-   \begingroup
-   \@tempdima 3em       % width of box holding part number, used by
-     \parindent \z@ \rightskip \@pnumwidth      %% \numberline
-     \parfillskip -\@pnumwidth
-     {\large \bf        % set line in \large boldface
-     \leavevmode        % TeX command to enter horizontal mode.
-     #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
-     \nobreak           % Never break after part entry
-   \endgroup}
-
-\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
-   \addvspace{1.0em plus 1pt}   % space above toc entry
-   \@tempdima 1.5em             % width of box holding section number
-   \begingroup
-    \parindent  \z@ \rightskip \@pnumwidth
-     \parfillskip -\@pnumwidth
-     \bf                        % Boldface.
-     \leavevmode                % TeX command to enter horizontal mode.
-      \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
-      \hskip -\leftskip           %% 25 Jan 88 change to \numberline
-     #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
-   \endgroup}
-
-
-\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
-\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
-\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
-\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
-
-%\def\listoffigures{\@latexerr{\listoffigures: Lists of figures are not
-%  allowed in the `acmconf' document style.}\@eha}
-
-\def\listoffigures{\ClassError{%
-    \string\listoffigures\space is not allowed in the `acmconf' document	% January 2008
-    style}\@eha}
-
-\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
-
-%\def\listoftables{\@latexerr{\listoftables: Lists of tables are not
-%  allowed in the `acmconf' document style.}\@eha}
-%\let\l@table\l@figure
-
-\def\listoftables{\ClassError{%
-    \string\listoftables\space is not allowed in the `acmconf' document		% January 2008
-    style}\@eha}
- \let\l@table\l@figure
-
-\def\footnoterule{\kern-3\p@
-  \hrule width .5\columnwidth   % (was .4) updated Gerry March 20 2007
-  \kern 2.6\p@}                 % The \hrule has default height of .4pt % (was .4) updated Gerry March 20 2007
-% ------
-\long\def\@makefntext#1{\noindent 
-%\hbox to .5em{\hss$^{\@thefnmark}$}#1}   % original
-\hbox to .5em{\hss\textsuperscript{\@thefnmark}}#1}  % C. Clifton / GM Oct. 2nd. 2002
-% -------
-
-\long\def\@maketntext#1{\noindent
-#1}
-
-\long\def\@maketitlenotetext#1#2{\noindent
-            \hbox to 1.8em{\hss$^{#1}$}#2}
-
-\setcounter{topnumber}{2}
-\def\topfraction{.7}
-\setcounter{bottomnumber}{1}
-\def\bottomfraction{.3}
-\setcounter{totalnumber}{3}
-\def\textfraction{.2}
-\def\floatpagefraction{.5}
-\setcounter{dbltopnumber}{2}
-\def\dbltopfraction{.7}
-\def\dblfloatpagefraction{.5}
-
-%
-\long\def\@makecaption#1#2{
-   \vskip \baselineskip
-   \setbox\@tempboxa\hbox{\textbf{#1: #2}}
-   \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
-       \textbf{#1: #2}\par               %   THEN set as ordinary paragraph.
-     \else                      %   ELSE  center.
-       \hbox to\hsize{\hfil\box\@tempboxa\hfil}\par
-   \fi}
-
-%
-
-\long\def\@makecaption#1#2{
-   \vskip 10pt
-   \setbox\@tempboxa\hbox{\textbf{#1: #2}}
-   \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
-       \textbf{#1: #2}\par                %   THEN set as ordinary paragraph.
-     \else                      %   ELSE  center.
-       \hbox to\hsize{\hfil\box\@tempboxa\hfil}
-   \fi}
-
-\@ifundefined{figure}{\newcounter {figure}} % this is for LaTeX2e
-
-\def\fps@figure{tbp}
-\def\ftype@figure{1}
-\def\ext@figure{lof}
-\def\fnum@figure{Figure \thefigure}
-\def\figure{\@float{figure}}
-%\let\endfigure\end@float
-\def\endfigure{\end@float} 		% Gerry January 2008
-\@namedef{figure*}{\@dblfloat{figure}}
-\@namedef{endfigure*}{\end@dblfloat}
-
-\@ifundefined{table}{\newcounter {table}} % this is for LaTeX2e
-
-\def\fps@table{tbp}
-\def\ftype@table{2}
-\def\ext@table{lot}
-\def\fnum@table{Table \thetable}
-\def\table{\@float{table}}
-%\let\endtable\end@float
-\def\endtable{\end@float}		% Gerry January 2008
-\@namedef{table*}{\@dblfloat{table}}
-\@namedef{endtable*}{\end@dblfloat}
-
-\newtoks\titleboxnotes
-\newcount\titleboxnoteflag
-
-\def\maketitle{\par
- \begingroup
-   \def\thefootnote{\fnsymbol{footnote}}
-   \def\@makefnmark{\hbox
-       to 0pt{$^{\@thefnmark}$\hss}}
-     \twocolumn[\@maketitle]
-\@thanks
- \endgroup
- \setcounter{footnote}{0}
- \let\maketitle\relax
- \let\@maketitle\relax
- \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}\let\thanks\relax
-}
-
-%% CHANGES ON NEXT LINES
-\newif\if@ll % to record which version of LaTeX is in use
-
-\expandafter\ifx\csname LaTeXe\endcsname\relax % LaTeX2.09 is used
-\else% LaTeX2e is used, so set ll to true
-\global\@lltrue
-\fi
-
-\if@ll
-  \NeedsTeXFormat{LaTeX2e}
-  \ProvidesClass{sig-alternate} [2012/05/23 - V2.5 - based on acmproc.cls V1.3 <Nov. 30 '99>]
-  \RequirePackage{latexsym}% QUERY: are these two really needed?
-  \let\dooptions\ProcessOptions
-\else
-  \let\dooptions\@options
-\fi
-%% END CHANGES
-
-\def\@height{height}
-\def\@width{width}
-\def\@minus{minus}
-\def\@plus{plus}
-\def\hb@xt@{\hbox to}
-\newif\if@faircopy
-\@faircopyfalse
-\def\ds@faircopy{\@faircopytrue}
-
-\def\ds@preprint{\@faircopyfalse}
-
-\@twosidetrue
-\@mparswitchtrue
-\def\ds@draft{\overfullrule 5\p@}
-%% CHANGE ON NEXT LINE
-\dooptions
-
-\lineskip \p@
-\normallineskip \p@
-\def\baselinestretch{1}
-\def\@ptsize{0} %needed for amssymbols.sty
-
-%% CHANGES ON NEXT LINES
-\if@ll% allow use of old-style font change commands in LaTeX2e
-\@maxdepth\maxdepth
-%
-\DeclareOldFontCommand{\rm}{\ninept\rmfamily}{\mathrm}
-\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
-\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
-\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
-\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
-\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
-\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
-\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
-\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
-\fi
-%
-\if@ll
- \renewcommand{\rmdefault}{cmr}  % was 'ttm'
-% Note! I have also found 'mvr' to work ESPECIALLY well.
-% Gerry - October 1999
-% You may need to change your LV1times.fd file so that sc is
-% mapped to cmcsc - -for smallcaps -- that is if you decide
-% to change {cmr} to {times} above. (Not recommended)
-  \renewcommand{\@ptsize}{}
-  \renewcommand{\normalsize}{%
-    \@setfontsize\normalsize\@ixpt{10.5\p@}%\ninept%
-    \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
-    \belowdisplayskip \abovedisplayskip
-    \abovedisplayshortskip 6\p@ \@minus 3\p@
-    \belowdisplayshortskip 6\p@ \@minus 3\p@
-    \let\@listi\@listI
-  }
-\else
-  \def\@normalsize{%changed next to 9 from 10
-    \@setsize\normalsize{9\p@}\ixpt\@ixpt
-   \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
-    \belowdisplayskip \abovedisplayskip
-    \abovedisplayshortskip 6\p@ \@minus 3\p@
-    \belowdisplayshortskip 6\p@ \@minus 3\p@
-    \let\@listi\@listI
-  }%
-\fi
-\if@ll
-  \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt{8\p@}}
-  \newcommand\tiny{\@setfontsize\tiny\@vpt{6\p@}}
-  \newcommand\large{\@setfontsize\large\@xiipt{14\p@}}
-  \newcommand\Large{\@setfontsize\Large\@xivpt{18\p@}}
-  \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20\p@}}
-  \newcommand\huge{\@setfontsize\huge\@xxpt{25\p@}}
-  \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30\p@}}
-\else
-  \def\scriptsize{\@setsize\scriptsize{8\p@}\viipt\@viipt}
-  \def\tiny{\@setsize\tiny{6\p@}\vpt\@vpt}
-  \def\large{\@setsize\large{14\p@}\xiipt\@xiipt}
-  \def\Large{\@setsize\Large{18\p@}\xivpt\@xivpt}
-  \def\LARGE{\@setsize\LARGE{20\p@}\xviipt\@xviipt}
-  \def\huge{\@setsize\huge{25\p@}\xxpt\@xxpt}
-  \def\Huge{\@setsize\Huge{30\p@}\xxvpt\@xxvpt}
-\fi
-\normalsize
-
-% make aubox hsize/number of authors up to 3, less gutter
-% then showbox gutter showbox gutter showbox -- GKMT Aug 99
-\newbox\@acmtitlebox
-\def\@maketitle{\newpage
- \null
- \setbox\@acmtitlebox\vbox{%
-\baselineskip 20pt
-\vskip 2em                   % Vertical space above title.
-   \begin{center}
-    {\ttlfnt \@title\par}       % Title set in 18pt Helvetica (Arial) bold size.
-    \vskip 1.5em                % Vertical space after title.
-%This should be the subtitle.
-{\subttlfnt \the\subtitletext\par}\vskip 1.25em%\fi
-    {\baselineskip 16pt\aufnt   % each author set in \12 pt Arial, in a
-     \lineskip .5em             % tabular environment
-     \begin{tabular}[t]{c}\@author
-     \end{tabular}\par}
-    \vskip 1.5em               % Vertical space after author.
-   \end{center}}
- \dimen0=\ht\@acmtitlebox
- \advance\dimen0 by -12.75pc\relax % Increased space for title box -- KBT
- \unvbox\@acmtitlebox
- \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi}
-
-
-\newcount\titlenotecount
-\global\titlenotecount=0
-\newtoks\tntoks
-\newtoks\tntokstwo
-\newtoks\tntoksthree
-\newtoks\tntoksfour
-\newtoks\tntoksfive
-
-\def\abstract{
-\ifnum\titlenotecount>0 % was =1
-    \insert\footins{%
-    \reset@font\footnotesize
-        \interlinepenalty\interfootnotelinepenalty
-        \splittopskip\footnotesep
-        \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-        \hsize\columnwidth \@parboxrestore
-        \protected@edef\@currentlabel{%
-        }%
-        \color@begingroup
-\ifnum\titlenotecount=1
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=2
-      \@maketntext{%
-      \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=3
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=4
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\@finalstrut\strutbox}%
-\fi
-\ifnum\titlenotecount=5
-      \@maketntext{%
-         \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\par\@finalstrut\strutbox}%
-\@maketntext{%
-         \raisebox{4pt}{$\P$}\rule\z@\footnotesep\ignorespaces\the\tntoksfive\@finalstrut\strutbox}%
-\fi
-   \color@endgroup} %g}
-\fi
-\setcounter{footnote}{0}
-\section*{ABSTRACT}\normalsize%\ninept
-}
-
-\def\endabstract{\if@twocolumn\else\endquotation\fi}
-
-\def\keywords{\if@twocolumn
-\section*{Keywords}
-\else \small
-\quotation
-\fi}
-
-\def\terms{\if@twocolumn
-\section*{General Terms}
-\else \small
-\quotation
-\fi}
-
-% -- Classification needs to be a bit smart due to optionals - Gerry/Georgia November 2nd. 1999
-\newcount\catcount
-\global\catcount=1
-
-\def\category#1#2#3{%
-\ifnum\catcount=1
-\section*{Categories and Subject Descriptors}
-\advance\catcount by 1\else{\unskip; }\fi
-    \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}%
-}
-
-\def\@category#1#2#3[#4]{%
-    \begingroup
-        \let\and\relax
-            #1 [\textbf{#2}]%
-            \if!#4!%
-                \if!#3!\else : #3\fi
-            \else
-                :\space
-                \if!#3!\else #3\kern\z@---\hskip\z@\fi
-                \textit{#4}%
-            \fi
-    \endgroup
-}
-%
-
-%%% This section (written by KBT) handles the 1" box in the lower left
-%%% corner of the left column of the first page by creating a picture,
-%%% and inserting the predefined string at the bottom (with a negative
-%%% displacement to offset the space allocated for a non-existent
-%%% caption).
-%%%
-%\newtoks\copyrightnotice
-%\def\ftype@copyrightbox{8}
-%\def\@copyrightspace{
-%\@float{copyrightbox}[b]
-%\begin{center}
-%\setlength{\unitlength}{1pc}
-%\begin{picture}(20,6) %Space for copyright notice
-%\put(0,-0.95){\crnotice{\@toappear}}
-%\end{picture}
-%\end{center}
-%\end@float}
-
-%\def\@toappear{} % Default setting blank - commands below change this.
-%\long\def\toappear#1{\def\@toappear{\parbox[b]{20pc}{\baselineskip 9pt#1}}}
-%\def\toappearbox#1{\def\@toappear{\raisebox{5pt}{\framebox[20pc]{\parbox[b]{19pc}{#1}}}}}
-
-%\newtoks\conf
-%\newtoks\confinfo
-%\def\conferenceinfo#1#2{\global\conf={#1}\global\confinfo{#2}}
-
-
-%\def\marginpar{\@latexerr{The \marginpar command is not allowed in the
-%  `acmconf' document style.}\@eha}
-
-\def\marginpar{\ClassError{%
-    \string\marginpar\space is not allowed in the `acmconf' document		% January 2008
-    style}\@eha}
-
-\mark{{}{}}     % Initializes TeX's marks
-
-\def\today{\ifcase\month\or
-  January\or February\or March\or April\or May\or June\or
-  July\or August\or September\or October\or November\or December\fi
-  \space\number\day, \number\year}
-
-\def\@begintheorem#1#2{%
-    \parskip 0pt % GM July 2000 (for tighter spacing)
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {{\sc #1}\hskip 5\p@\relax#2.}%
-    ]
-    \it
-}
-\def\@opargbegintheorem#1#2#3{%
-    \parskip 0pt % GM July 2000 (for tighter spacing)
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\sc #1\ #2\             % This mod by Gerry to enumerate corollaries
-   \setbox\@tempboxa\hbox{(#3)}  % and bracket the 'corollary title'
-        \ifdim \wd\@tempboxa>\z@ % and retain the correct numbering of e.g. theorems
-            \hskip 5\p@\relax    % if they occur 'around' said corollaries.
-            \box\@tempboxa       % Gerry - Nov. 1999.
-        \fi.}%
-    ]
-    \it
-}
-\newif\if@qeded
-\global\@qededfalse
-
-% -- original
-%\def\proof{%
-%  \vspace{-\parskip} % GM July 2000 (for tighter spacing)
-%    \global\@qededfalse
-%    \@ifnextchar[{\@xproof}{\@proof}%
-%}
-% -- end of original
-
-% (JSS) Fix for vertical spacing bug - Gerry Murray July 30th. 2002
-\def\proof{%
-\vspace{-\lastskip}\vspace{-\parsep}\penalty-51%
-\global\@qededfalse
-\@ifnextchar[{\@xproof}{\@proof}%
-}
-
-\def\endproof{%
-    \if@qeded\else\qed\fi
-    \endtrivlist
-}
-\def\@proof{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\sc Proof.}%
-    ]
-    \ignorespaces
-}
-\def\@xproof[#1]{%
-    \trivlist
-    \item[\hskip 10\p@\hskip \labelsep{\sc Proof #1.}]%
-    \ignorespaces
-}
-\def\qed{%
-    \unskip
-    \kern 10\p@
-    \begingroup
-        \unitlength\p@
-        \linethickness{.4\p@}%
-        \framebox(6,6){}%
-    \endgroup
-    \global\@qededtrue
-}
-
-\def\newdef#1#2{%
-    \expandafter\@ifdefinable\csname #1\endcsname
-        {\@definecounter{#1}%
-         \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
-         \global\@namedef{#1}{\@defthm{#1}{#2}}%
-         \global\@namedef{end#1}{\@endtheorem}%
-    }%
-}
-\def\@defthm#1#2{%
-    \refstepcounter{#1}%
-    \@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}%
-}
-\def\@xdefthm#1#2{%
-    \@begindef{#2}{\csname the#1\endcsname}%
-    \ignorespaces
-}
-\def\@ydefthm#1#2[#3]{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\it #2%
-%         \savebox\@tempboxa{#3}%
-         \saveb@x\@tempboxa{#3}%		% January 2008
-         \ifdim \wd\@tempboxa>\z@
-            \ \box\@tempboxa
-         \fi.%
-        }]%
-    \ignorespaces
-}
-\def\@begindef#1#2{%
-    \trivlist
-    \item[%
-        \hskip 10\p@
-        \hskip \labelsep
-        {\it #1\ \rm #2.}%
-    ]%
-}
-\def\theequation{\arabic{equation}}
-
-\newcounter{part}
-\newcounter{section}
-\newcounter{subsection}[section]
-\newcounter{subsubsection}[subsection]
-\newcounter{paragraph}[subsubsection]
-\def\thepart{\Roman{part}}
-\def\thesection{\arabic{section}}
-\def\thesubsection{\thesection.\arabic{subsection}}
-\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} %removed \subsecfnt 29 July 2002 gkmt
-\def\theparagraph{\thesubsubsection.\arabic{paragraph}} %removed \subsecfnt 29 July 2002 gkmt
-\newif\if@uchead
-\@ucheadfalse
-
-%% CHANGES: NEW NOTE
-%% NOTE: OK to use old-style font commands below, since they were
-%% suitably redefined for LaTeX2e
-%% END CHANGES
-\setcounter{secnumdepth}{3}
-\def\part{%
-    \@startsection{part}{9}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}
-        {4\p@}{\normalsize\@ucheadtrue}%
-}
-\def\section{%
-    \@startsection{section}{1}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}% GM
-    {4\p@}{\baselineskip 14pt\secfnt\@ucheadtrue}%
-}
-
-\def\subsection{%
-    \@startsection{subsection}{2}{\z@}{-8\p@ \@plus -2\p@ \@minus -\p@}
-    {4\p@}{\secfnt}%
-}
-\def\subsubsection{%
-    \@startsection{subsubsection}{3}{\z@}{-8\p@ \@plus -2\p@ \@minus -\p@}%
-    {4\p@}{\subsecfnt}%
-}
-%\def\paragraph{%
-%    \vskip 12pt\@startsection{paragraph}{3}{\z@}{6\p@ \@plus \p@}% original
-%    {-5\p@}{\subsecfnt}%
-%}
-%  If one wants sections, subsections and subsubsections numbered,
-%  but not paragraphs, one usually sets secnumepth to 3.
-%  For that, the "depth" of paragraphs must be given correctly
-%  in the definition (``4'' instead of ``3'' as second argument
-%  of @startsection):
-\def\paragraph{%
-    \vskip 12pt\@startsection{paragraph}{4}{\z@}{6\p@ \@plus \p@}%    % GM and Wolfgang May - 11/30/06
-    {-5\p@}{\subsecfnt}%
-}
-\let\@period=.
-\def\@startsection#1#2#3#4#5#6{%
-        \if@noskipsec  %gkmt, 11 aug 99
-        \global\let\@period\@empty
-        \leavevmode
-        \global\let\@period.%
-    \fi
-      \par %
-    \@tempskipa #4\relax
-    \@afterindenttrue
-    \ifdim \@tempskipa <\z@
-        \@tempskipa -\@tempskipa
-        \@afterindentfalse
-    \fi
-    \if@nobreak
-    \everypar{}%
-    \else
-        \addpenalty\@secpenalty
-        \addvspace\@tempskipa
-    \fi
-\parskip=0pt % GM July 2000 (non numbered) section heads
-    \@ifstar
-        {\@ssect{#3}{#4}{#5}{#6}}
-        {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
-}
-\def\@sect#1#2#3#4#5#6[#7]#8{%
-    \ifnum #2>\c@secnumdepth
-        \let\@svsec\@empty
-    \else
-        \refstepcounter{#1}%
-        \edef\@svsec{%
-            \begingroup
-                %\ifnum#2>2 \noexpand\rm \fi % changed to next 29 July 2002 gkmt
-            \ifnum#2>2 \noexpand#6 \fi
-                \csname the#1\endcsname
-            \endgroup
-            \ifnum #2=1\relax .\fi
-            \hskip 1em
-        }%
-    \fi
-    \@tempskipa #5\relax
-    \ifdim \@tempskipa>\z@
-        \begingroup
-            #6\relax
-            \@hangfrom{\hskip #3\relax\@svsec}%
-            \begingroup
-                \interlinepenalty \@M
-                \if@uchead
-                    \uppercase{#8}%
-                \else
-                    #8%
-                \fi
-                \par
-            \endgroup
-        \endgroup
-        \csname #1mark\endcsname{#7}%
-        \vskip -12pt  %gkmt, 11 aug 99 and GM July 2000 (was -14) - numbered section head spacing
-\addcontentsline{toc}{#1}{%
-            \ifnum #2>\c@secnumdepth \else
-                \protect\numberline{\csname the#1\endcsname}%
-            \fi
-            #7%
-        }%
-    \else
-        \def\@svsechd{%
-            #6%
-            \hskip #3\relax
-            \@svsec
-            \if@uchead
-                \uppercase{#8}%
-            \else
-                #8%
-            \fi
-            \csname #1mark\endcsname{#7}%
-            \addcontentsline{toc}{#1}{%
-                \ifnum #2>\c@secnumdepth \else
-                    \protect\numberline{\csname the#1\endcsname}%
-                \fi
-                #7%
-            }%
-        }%
-    \fi
-    \@xsect{#5}\hskip 1pt
-    \par
-}
-\def\@xsect#1{%
-    \@tempskipa #1\relax
-    \ifdim \@tempskipa>\z@
-        \par
-        \nobreak
-        \vskip \@tempskipa
-        \@afterheading
-    \else
-        \global\@nobreakfalse
-        \global\@noskipsectrue
-        \everypar{%
-            \if@noskipsec
-                \global\@noskipsecfalse
-                \clubpenalty\@M
-                \hskip -\parindent
-                \begingroup
-                    \@svsechd
-                    \@period
-                \endgroup
-                \unskip
-                \@tempskipa #1\relax
-                \hskip -\@tempskipa
-            \else
-                \clubpenalty \@clubpenalty
-                \everypar{}%
-            \fi
-        }%
-    \fi
-    \ignorespaces
-}
-\def\@trivlist{%
-    \@topsepadd\topsep
-    \if@noskipsec
-        \global\let\@period\@empty
-        \leavevmode
-        \global\let\@period.%
-    \fi
-    \ifvmode
-        \advance\@topsepadd\partopsep
-    \else
-        \unskip
-        \par
-    \fi
-    \if@inlabel
-        \@noparitemtrue
-        \@noparlisttrue
-    \else
-        \@noparlistfalse
-        \@topsep\@topsepadd
-    \fi
-    \advance\@topsep \parskip
-    \leftskip\z@skip
-    \rightskip\@rightskip
-    \parfillskip\@flushglue
-    \@setpar{\if@newlist\else{\@@par}\fi}
-    \global\@newlisttrue
-    \@outerparskip\parskip
-}
-
-%%% Actually, 'abbrev' works just fine as the default
-%%% Bibliography style.
-
-\typeout{Using 'Abbrev' bibliography style}
-\newcommand\bibyear[2]{%
-    \unskip\quad\ignorespaces#1\unskip
-    \if#2..\quad \else \quad#2 \fi
-}
-\newcommand{\bibemph}[1]{{\em#1}}
-\newcommand{\bibemphic}[1]{{\em#1\/}}
-\newcommand{\bibsc}[1]{{\sc#1}}
-\def\@normalcite{%
-    \def\@cite##1##2{[##1\if@tempswa , ##2\fi]}%
-}
-\def\@citeNB{%
-    \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
-}
-\def\@citeRB{%
-    \def\@cite##1##2{##1\if@tempswa , ##2\fi]}%
-}
-\def\start@cite#1#2{%
-    \edef\citeauthoryear##1##2##3{%
-        ###1%
-        \ifnum#2=\z@ \else\ ###2\fi
-    }%
-    \ifnum#1=\thr@@
-        \let\@@cite\@citeyear
-    \else
-        \let\@@cite\@citenormal
-    \fi
-    \@ifstar{\@citeNB\@@cite}{\@normalcite\@@cite}%
-}
-%\def\cite{\start@cite23}
-\DeclareRobustCommand\cite{\start@cite23}		% January 2008
-\def\citeNP{\cite*}					% No Parentheses e.g. 5
-%\def\citeA{\start@cite10}
-\DeclareRobustCommand\citeA{\start@cite10}		% January 2008
-\def\citeANP{\citeA*}
-%\def\shortcite{\start@cite23}				
-\DeclareRobustCommand\shortcite{\start@cite23}		% January 2008
-\def\shortciteNP{\shortcite*}
-%\def\shortciteA{\start@cite20}
-\DeclareRobustCommand\shortciteA{\start@cite20}		% January 2008
-\def\shortciteANP{\shortciteA*}
-%\def\citeyear{\start@cite30}
-\DeclareRobustCommand\citeyear{\start@cite30}		% January 2008
-\def\citeyearNP{\citeyear*}
-%\def\citeN{%
-\DeclareRobustCommand\citeN{%				% January 2008
-    \@citeRB
-    \def\citeauthoryear##1##2##3{##1\ [##3%
-        \def\reserved@a{##1}%
-        \def\citeauthoryear####1####2####3{%
-            \def\reserved@b{####1}%
-            \ifx\reserved@a\reserved@b
-                ####3%
-            \else
-                \errmessage{Package acmart Error: author mismatch
-                         in \string\citeN^^J^^J%
-                    See the acmart package documentation for explanation}%
-            \fi
-        }%
-    }%
-    \@ifstar\@citeyear\@citeyear
-}
-%\def\shortciteN{%
-\DeclareRobustCommand\shortciteN{%			% January 2008
-    \@citeRB
-    \def\citeauthoryear##1##2##3{##2\ [##3%
-        \def\reserved@a{##2}%
-        \def\citeauthoryear####1####2####3{%
-            \def\reserved@b{####2}%
-            \ifx\reserved@a\reserved@b
-                ####3%
-            \else
-                \errmessage{Package acmart Error: author mismatch
-                         in \string\shortciteN^^J^^J%
-                    See the acmart package documentation for explanation}%
-            \fi
-        }%
-    }%
-    \@ifstar\@citeyear\@citeyear  % GM July 2000
-}
-
-\def\@citenormal{%
-    \@ifnextchar [{\@tempswatrue\@citex;}%
-% original                 {\@tempswafalse\@citex,[]}% was ; Gerry 2/24/00
-{\@tempswafalse\@citex[]}%  	% GERRY FIX FOR BABEL 3/20/2009
-}
-
-\def\@citeyear{%
-    \@ifnextchar [{\@tempswatrue\@citex,}%
-% original                  {\@tempswafalse\@citex,[]}%
-{\@tempswafalse\@citex[]}%	%  GERRY FIX FOR BABEL 3/20/2009
-}
-
-\def\@citex#1[#2]#3{%
-    \let\@citea\@empty
-    \@cite{%
-        \@for\@citeb:=#3\do{%
-            \@citea
-% original            \def\@citea{#1 }%
-            \def\@citea{#1, }% 	% GERRY FIX FOR BABEL 3/20/2009 -- SO THAT YOU GET [1, 2] IN THE BODY TEXT
-            \edef\@citeb{\expandafter\@iden\@citeb}%
-            \if@filesw
-                \immediate\write\@auxout{\string\citation{\@citeb}}%
-            \fi
-            \@ifundefined{b@\@citeb}{%
-                {\bf ?}%
-                \@warning{%
-                    Citation `\@citeb' on page \thepage\space undefined%
-                }%
-            }%
-            {\csname b@\@citeb\endcsname}%
-        }%
-    }{#2}%
-}
-%\let\@biblabel\@gobble   % Dec. 2008 - Gerry
-% ----
-\def\@biblabelnum#1{[#1]} % Gerry's solution #1 - for Natbib -- April 2009
-\let\@biblabel=\@biblabelnum  % Gerry's solution #1 - for Natbib -- April 2009
-\def\newblock{\relax} % Gerry Dec. 2008
-% ---
-\newdimen\bibindent
-\setcounter{enumi}{1}
-\bibindent=0em
-\def\thebibliography#1{% 
-\ifnum\addauflag=0\addauthorsection\global\addauflag=1\fi
-     \section[References]{%    <=== OPTIONAL ARGUMENT ADDED HERE
-        {References} % was uppercased but this affects pdf bookmarks (SP/GM October 2004)
-          {\vskip -9pt plus 1pt} % GM Nov. 2006 / GM July 2000 (for somewhat tighter spacing) 
-         \@mkboth{{\refname}}{{\refname}}%
-     }%
-     \list{[\arabic{enumi}]}{%
-         \settowidth\labelwidth{[#1]}%
-         \leftmargin\labelwidth
-         \advance\leftmargin\labelsep
-         \advance\leftmargin\bibindent
-         \parsep=0pt\itemsep=1pt % GM July 2000
-         \itemindent -\bibindent
-         \listparindent \itemindent
-         \usecounter{enumi}
-     }%
-     \let\newblock\@empty
-     \raggedright % GM July 2000
-     \sloppy
-     \sfcode`\.=1000\relax
-}
-
-
-\gdef\balancecolumns
-{\vfill\eject
-\global\@colht=\textheight
-\global\ht\@cclv=\textheight
-}
-
-\newcount\colcntr
-\global\colcntr=0
-%\newbox\savebox
-\newbox\saveb@x				% January 2008
-
-\gdef \@makecol {%
-\global\advance\colcntr by 1
-\ifnum\colcntr>2 \global\colcntr=1\fi
-   \ifvoid\footins
-     \setbox\@outputbox \box\@cclv
-   \else
-     \setbox\@outputbox \vbox{%
-\boxmaxdepth \@maxdepth
-       \@tempdima\dp\@cclv
-       \unvbox \@cclv
-       \vskip-\@tempdima
-       \vskip \skip\footins
-       \color@begingroup
-         \normalcolor
-         \footnoterule
-         \unvbox \footins
-       \color@endgroup
-       }%
-   \fi
-   \xdef\@freelist{\@freelist\@midlist}%
-   \global \let \@midlist \@empty
-   \@combinefloats
-   \ifvbox\@kludgeins
-     \@makespecialcolbox
-   \else
-     \setbox\@outputbox \vbox to\@colht {%
-\@texttop
-       \dimen@ \dp\@outputbox
-       \unvbox \@outputbox
-   \vskip -\dimen@
-       \@textbottom
-       }%
-   \fi
-   \global \maxdepth \@maxdepth
-}
-\def\titlenote{\@ifnextchar[\@xtitlenote{\stepcounter\@mpfn
-\global\advance\titlenotecount by 1
-\ifnum\titlenotecount=1
-    \raisebox{9pt}{$\ast$}
-\fi
-\ifnum\titlenotecount=2
-    \raisebox{9pt}{$\dagger$}
-\fi
-\ifnum\titlenotecount=3
-    \raisebox{9pt}{$\ddagger$}
-\fi
-\ifnum\titlenotecount=4
-\raisebox{9pt}{$\S$}
-\fi
-\ifnum\titlenotecount=5
-\raisebox{9pt}{$\P$}
-\fi
-         \@titlenotetext
-}}
-
-\long\def\@titlenotetext#1{\insert\footins{%
-\ifnum\titlenotecount=1\global\tntoks={#1}\fi
-\ifnum\titlenotecount=2\global\tntokstwo={#1}\fi
-\ifnum\titlenotecount=3\global\tntoksthree={#1}\fi
-\ifnum\titlenotecount=4\global\tntoksfour={#1}\fi
-\ifnum\titlenotecount=5\global\tntoksfive={#1}\fi
-    \reset@font\footnotesize
-    \interlinepenalty\interfootnotelinepenalty
-    \splittopskip\footnotesep
-    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
-    \hsize\columnwidth \@parboxrestore
-    \protected@edef\@currentlabel{%
-    }%
-    \color@begingroup
-   \color@endgroup}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%
-\ps@plain
-\baselineskip=11pt
-\let\thepage\relax % For NO page numbers - GM Nov. 30th. 1999 and July 2000
-\def\setpagenumber#1{\global\setcounter{page}{#1}}
-%\pagenumbering{arabic}  % Arabic page numbers GM July 2000
-\twocolumn             % Double column.
-\flushbottom           % Even bottom -- alas, does not balance columns at end of document
-\pagestyle{plain}
-
-% Need Copyright Year and Copyright Data to be user definable (in .tex file).
-% Gerry Nov. 30th. 1999
-\newtoks\copyrtyr
-\newtoks\acmcopyr
-\newtoks\boilerplate
-\global\acmcopyr={X-XXXXX-XX-X/XX/XX}  % Default - 5/11/2001 *** Gerry
-\global\copyrtyr={20XX}                % Default - 3/3/2003 *** Gerry
-\def\CopyrightYear#1{\global\copyrtyr{#1}}
-\def\crdata#1{\global\acmcopyr{#1}}
-\def\permission#1{\global\boilerplate{#1}}
-
-% Comment this out as this is not an ACM paper
-%\global\boilerplate={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.}
-%\newtoks\copyrightetc
-%\global\copyrightetc{Copyright \the\copyrtyr\ ACM \the\acmcopyr\ ...\$15.00} % Gerry changed to 15 May 2012
-%\toappear{\the\boilerplate\par
-%{\confname{\the\conf}} \the\confinfo\par \the\copyrightetc.}
-
-%\DeclareFixedFont{\altcrnotice}{OT1}{tmr}{m}{n}{8}  % << patch needed for accenting e.g. Montreal - Gerry, May 2007
-%\DeclareFixedFont{\altconfname}{OT1}{tmr}{m}{it}{8}  % << patch needed for accenting in italicized confname - Gerry, May 2007
-%
-%{\altconfname{{\the\conf}}} {\altcrnotice\the\confinfo\par} \the\copyrightetc.}  % << Gerry, May 2007
-%
-% The following section (i.e. 3 .sty inclusions) was added in May 2007 so as to fix the problems that many
-% authors were having with accents. Sometimes accents would occur, but the letter-character would be of a different
-% font. Conversely the letter-character font would be correct but, e.g. a 'bar' would appear superimposed on the
-% character instead of, say, an unlaut/diaresis. Sometimes the letter-character would NOT appear at all.
-% Using [T1]{fontenc} outright was not an option as this caused 99% of the authors to 'produce' a Type-3 (bitmapped)
-% PDF file - useless for production. 
-%
-% For proper (font) accenting we NEED these packages to be part of the .cls file i.e. 'ae', 'aecompl' and 'aeguil' 
-% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-%% This is file `ae.sty' 
-\def\fileversion{1.3}
-\def\filedate{2001/02/12}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{ae}[\filedate\space\fileversion\space  % GM
-% Almost European Computer Modern]                       % GM - keeping the log file clean(er)
-\newif\if@ae@slides \@ae@slidesfalse
-\DeclareOption{slides}{\@ae@slidestrue}
-\ProcessOptions
-\fontfamily{aer}
-\RequirePackage[T1]{fontenc}
-\if@ae@slides
-    \renewcommand{\sfdefault}{laess}
-    \renewcommand{\rmdefault}{laess} % no roman
-    \renewcommand{\ttdefault}{laett}
-\else
-    \renewcommand{\sfdefault}{aess}
-    \renewcommand{\rmdefault}{aer}
-    \renewcommand{\ttdefault}{aett}
-\fi
-\endinput
-%% 
-%% End of file `ae.sty'.
-%
-%
-\def\fileversion{0.9}
-\def\filedate{1998/07/23}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{aecompl}[\filedate\space\fileversion\space   % GM
-%T1 Complements for AE fonts (D. Roegel)]                      % GM -- keeping the log file clean(er)
- 
-\def\@ae@compl#1{{\fontencoding{T1}\fontfamily{cmr}\selectfont\symbol{#1}}}
-\def\guillemotleft{\@ae@compl{19}}
-\def\guillemotright{\@ae@compl{20}}
-\def\guilsinglleft{\@ae@compl{14}}
-\def\guilsinglright{\@ae@compl{15}}
-\def\TH{\@ae@compl{222}}
-\def\NG{\@ae@compl{141}}
-\def\ng{\@ae@compl{173}}
-\def\th{\@ae@compl{254}}
-\def\DJ{\@ae@compl{208}}
-\def\dj{\@ae@compl{158}}
-\def\DH{\@ae@compl{208}}
-\def\dh{\@ae@compl{240}}
-\def\@perthousandzero{\@ae@compl{24}}
-\def\textperthousand{\%\@perthousandzero}
-\def\textpertenthousand{\%\@perthousandzero\@perthousandzero}
-\endinput
-%
-%
-%% This is file `aeguill.sty' 
-% This file gives french guillemets (and not guillemots!)
-% built with the Polish CMR fonts (default), WNCYR fonts, the LASY fonts 
-% or with the EC fonts. 
-% This is useful in conjunction with the ae package
-% (this package loads the ae package in case it has not been loaded)
-%  and with or without the french(le) package.
-%
-% In order to get the guillemets, it is necessary to either type
-% \guillemotleft and \guillemotright, or to use an 8 bit encoding
-% (such as ISO-Latin1) which selects these two commands, 
-% or, if you use the french package (but not the frenchle package), 
-% to type << or >>.
-%
-% By default, you get the Polish CMR guillemets; if this package is loaded
-% with the `cm' option, you get the LASY guillemets; with `ec,' you
-% get the EC guillemets, and with `cyr,' you get the cyrillic guillemets.
-%
-% In verbatim mode, you always get the EC/TT guillemets.
-%
-% The default option is interesting in conjunction with PDF,
-% because there is a Type 1 version of the Polish CMR fonts
-% and these guillemets are very close in shape to the EC guillemets.
-% There are no free Type 1 versions of the EC fonts.
-%
-% Support for Polish CMR guillemets was kindly provided by 
-% Rolf Niepraschk <niepraschk@ptb.de> in version 0.99 (2000/05/22).
-% Bernd Raichle provided extensive simplifications to the code
-% for version 1.00.
-%
-% This package is released under the LPPL.
-%
-% Changes:
-%   Date        version
-%   2001/04/12  1.01    the frenchle and french package are now distinguished.
-%
-\def\fileversion{1.01}
-\def\filedate{2001/04/12}
-\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{aeguill}[2001/04/12 1.01 %    % GM
-%AE fonts with french guillemets (D. Roegel)]   % GM - keeping the log file clean(er)
-%\RequirePackage{ae}  % GM May 2007 - already embedded here
-
-\newcommand{\@ae@switch}[4]{#4}
-\DeclareOption{ec}{\renewcommand\@ae@switch[4]{#1}}
-\DeclareOption{cm}{\renewcommand\@ae@switch[4]{#2}}
-\DeclareOption{cyr}{\renewcommand\@ae@switch[4]{#3}}
-\DeclareOption{pl}{\renewcommand\@ae@switch[4]{#4}}
-\ExecuteOptions{pl}
-\ProcessOptions
-
-%
-% Load necessary packages
-%
-\@ae@switch{% ec
-  % do nothing
-}{% cm
-  \RequirePackage{latexsym}%  GM - May 2007 - already 'mentioned as required' up above
-}{% cyr
-  \RequirePackage[OT2,T1]{fontenc}%
-}{% pl
-  \RequirePackage[OT4,T1]{fontenc}%
-}
-
-% The following command will be compared to \frenchname,
-% as defined in french.sty and frenchle.sty.
-\def\aeguillfrenchdefault{french}%
-
-\let\guill@verbatim@font\verbatim@font
-\def\verbatim@font{\guill@verbatim@font\ecguills{cmtt}%
-                   \let\guillemotleft\@oguills\let\guillemotright\@fguills}
-
-\begingroup \catcode`\<=13 \catcode`\>=13
-\def\x{\endgroup
- \def\ae@lfguill{<<}%
- \def\ae@rfguill{>>}%
-}\x
-
-\newcommand{\ecguills}[1]{%
-  \def\selectguillfont{\fontencoding{T1}\fontfamily{#1}\selectfont}%
-  \def\@oguills{{\selectguillfont\symbol{19}}}%
-  \def\@fguills{{\selectguillfont\symbol{20}}}%
-  } 
-
-\newcommand{\aeguills}{%
-  \ae@guills
-  % We redefine \guillemotleft and \guillemotright
-  % in order to catch them when they are used 
-  % with \DeclareInputText (in latin1.def for instance)
-  % We use \auxWARNINGi as a safe indicator that french.sty is used.
-  \gdef\guillemotleft{\ifx\auxWARNINGi\undefined
-                         \@oguills % neither french.sty nor frenchle.sty
-                      \else
-                         \ifx\aeguillfrenchdefault\frenchname
-                           \ae@lfguill  % french.sty
-                         \else
-                           \@oguills    % frenchle.sty
-                         \fi
-                      \fi}%
-  \gdef\guillemotright{\ifx\auxWARNINGi\undefined
-                         \@fguills % neither french.sty nor frenchle.sty
-                       \else
-                         \ifx\aeguillfrenchdefault\frenchname
-                           \ae@rfguill  % french.sty
-                         \else
-                           \@fguills    % frenchle.sty
-                         \fi
-                       \fi}%
-  }
-
-%
-% Depending on the class option
-% define the internal command \ae@guills
-\@ae@switch{% ec
-  \newcommand{\ae@guills}{%
-    \ecguills{cmr}}%
-}{% cm
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{U}\fontfamily{lasy}%
-            \fontseries{m}\fontshape{n}\selectfont}%
-    \def\@oguills{\leavevmode\nobreak
-                \hbox{\selectguillfont (\kern-.20em(\kern.20em}\nobreak}%
-    \def\@fguills{\leavevmode\nobreak
-                \hbox{\selectguillfont \kern.20em)\kern-.2em)}%
-                \ifdim\fontdimen\@ne\font>\z@\/\fi}}%
-}{% cyr
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{OT2}\fontfamily{wncyr}\selectfont}%
-    \def\@oguills{{\selectguillfont\symbol{60}}}%
-    \def\@fguills{{\selectguillfont\symbol{62}}}}
-}{% pl
-  \newcommand{\ae@guills}{%
-    \def\selectguillfont{\fontencoding{OT4}\fontfamily{cmr}\selectfont}%
-    \def\@oguills{{\selectguillfont\symbol{174}}}%
-    \def\@fguills{{\selectguillfont\symbol{175}}}}
-}
-
-
-\AtBeginDocument{%
-  \ifx\GOfrench\undefined
-    \aeguills
-  \else
-    \let\aeguill@GOfrench\GOfrench
-    \gdef\GOfrench{\aeguill@GOfrench \aeguills}%
-  \fi
-  }
-
-\endinput
-%
-

+ 0 - 78
papers/other_papers.md

@@ -1,78 +0,0 @@
-# IPFS Research Constellation
-
-ipfs suggests many research routes:
-
-## IPFS - Towards The Permanent Web
-
-Paper with:
-- design + discussion
-- measurements in production
-
-## IPNS - Decentralized Mutable Names for IPFS
-
-- SFS inspired decentralized name service
-
-## BitSwap: block exchange protocol
-
-Lots of experimentation can be done with BitSwap:
-- find (near) optimal swap strategies
-- security
-- efficiency
-- robustness
-- game theory (like propshare paper)
-- other strategies/clients
-- BitSwap with bittorrent?
-
-## SERFS or MetaFS
-
-a meta filesystem. One global filesystem. Allows mounting of other filesystems seamlessly. Users download FS code on demand. E.g.
-
-		/serfs/s3.amazon.com/<bucket>/
-		/serfs/bittorrent/<torrent hash>/<filename>
-		/serfs/http/<domain>/<path>
-		/serfs/memcached/<host>/<key>
-		/serfs/redis/<host>/<key>
-		/serfs/afs/<path>/
-		/serfs/facebook/<userid>
-		/serfs/gfs/<path>
-		/serfs/spotify/<track hash>
-
-## DataGen: compression through functions
-
-Blocks can include pure functions which generate the block's data.
-Creates an incentive to design better compression functions.
-
-## IPFS Incentive: FileCoin: proof-of-retrievability
-
-Blockchain currency with proof-of-retrievability.
-Incentivizes IPFS storage.
-
-## IPFS App: Web gateway
-
-## IPFS App: movie viewer, music player
-
-Spotify: modified client to just send all blocks asap, if user is allowed to.
-
-## IPFS App: New Web (only gfs)
-
-## IPFS App: Version Control (git)
-
-## IPFS App: Dat + Datadex
-
-## IPFS App: Global Directory
-
-## IPFS App: git-like shared docs
-
-## IPFS App: distributed dropbox replacement
-
-## IPFS App: code hosting (source + bins)
-
-## IPFS App: Package Managers (apt, npm, etc)
-
-## IPFS App: CDN
-
-## IPFS App: Publications
-
-## IPFS App: Arxiv clone
-
-## IPFS Incentives: Distributed S3