Random surfaces enumerating algebraic curves
Andrei Okounkov \thanks{Partially supported by NSF and Packard Foundation}
4ECM.tex
\documentclass[12pt]{article}
\usepackage{amsmath,amssymb,amsfonts,amsthm,pifont}
\usepackage{eucal} 
\usepackage[dvips]{graphics}
\usepackage{pstricks,pst-plot,pst-node}
\newpsobject{showgrid}{psgrid}{subgriddiv=1,griddots=10,gridlabels=0pt}
\input epsf.tex

\newcommand{\C}{\mathbb{C}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\cO}{\mathcal{O}}
\newcommand{\Pl}{\mathbf{P}^1}
\newcommand{\Pp}{\mathbf{P}^2}
\newcommand{\Ps}{\mathbf{P}^3}
\newcommand{\bP}{\mathbf{P}}
\newcommand{\cI}{\mathcal{I}}
\newcommand{\bT}{\mathbf{T}}
\newcommand{\Mb}{\overline{\mathcal{M}}}
\newcommand{\lan}{\left\langle}
\newcommand{\ran}{\right\rangle}
\newcommand{\bw}{\mathsf{w}}
\newcommand{\bW}{\mathsf{W}}
\newcommand{\cb}{\textup{\ding{114}}}
\newcommand{\bV}{\mathsf{V}}
\newcommand{\bp}{\mathbf{p}}

\DeclareMathOperator{\vdim}{vir\,\,dim}
\DeclareMathOperator{\codim}{codim}
\DeclareMathOperator{\Hilb}{Hilb}
\DeclareMathOperator{\Ext}{Ext}
\DeclareMathOperator{\ev}{ev}
\DeclareMathOperator{\ch}{ch}
\DeclareMathOperator{\tr}{tr}


\newtheorem{Theorem}{Theorem}
\newtheorem{Lemma}{Lemma}
\newtheorem{Corollary}[Lemma]{Corollary}
%\newtheorem{Corollary*}[Lemma]{Corollary${}^*$}
\newtheorem{Proposition}[Lemma]{Proposition}
\newtheorem{Conjecture}{Conjecture}


\begin{document}
\title{Random surfaces enumerating algebraic curves}
\author{Andrei Okounkov
\thanks{Partially supported by NSF and Packard Foundation}}
\date{} \maketitle


\section{Overview}

The discovery that a relation exists between the two topics 
in the title was made by physicists who viewed 
them as two approaches
to Feynman integral over all surfaces in string theory: one 
via direct discretization, the other through topological 
methods. A famous example 
is the celebrated conjecture by Witten connecting 
combinatorial tessellations of surfaces (conveniently 
enumerated by random matrix integrals) with intersection 
theory on the moduli spaces of curves, see \cite{W}.
Several mathematical proofs of this 
conjecture are now available \cite{Kon1,OP1,Mir}, but the 
exact mathematical match between the two theories
remains miraculous. 

The goal of this lecture is to describe an a 
priori different connection between enumeration
of algebraic curves and random surfaces. The 
underlying mathematical conjectures relating
Gromov-Witten and Donaldson-Thomas theory of 
a complex projective threefold $X$ were made in \cite{mnop}.  
Related physical proposal, first 
made in \cite{ORV} and developed in \cite{INOV}, played
an important role in development of these ideas.
A link to matrix integrals will be 
briefly explained at the end of the lecture. 

An occasion like this calls for 
a review, but instead
I chose to present
views that are largely conjectural, definitely 
not in their final form, but appealing 
and with large unifying power. These ideas were 
developed in collaboration with A.~Iqbal, D.~Maulik, 
N.~Nekrasov, R.~Pandharipande, N.~Reshetikhin, and 
C.~Vafa. I would like to thank the organizers for 
the opportunity to present them here and my coauthors 
for the joy of joint work. 



\section{Enumerative geometry of curves}





Let $X$ be a smooth complex projective threefold
such as e.g.\ the projective space $\Ps$. We 
are interested in algebraic curves $C$ in $X$. 
For example, (the real locus of) a degree 4 
genus 0 curve in $\Ps$ may look like the one 
plotted in Figure \ref{f1}
%
\begin{figure}[hbtp]
  \begin{center}
   \scalebox{0.4}{\includegraphics{ratcurve.ps}}     
    \caption{A degree 4 rational curve in $\R\Ps$}\label{f1}
     \end{center}
\end{figure}
%

Specifically, we are interested in enumerative 
geometry of curves in $X$. For example, we would like
to know how many curves
of given degree and genus meet given 
subvarieties of $X$, assuming we expect this number 
to be finite. 


\subsection{Parametrized curves and stable maps}



\subsubsection{}

A rational curve $C$ in $X=\Ps$ like the one in Figure \ref{f1} 
is the image of the Riemann 
sphere $\Pl$ under a map
%
\begin{equation}
  \label{mapP}
  \Pl \in z \mapsto f(z)=\left[f_0(z) : f_1(z) : f_2(z) : f_3(z)\right]
\end{equation}
%
given in homogeneous coordinates 
by polynomials $f_i$ of degree $d$. Modulo reparameterization 
of $\Pl$, this leaves $4d$ complex parameters for $C$. 

To pass through a point in a threefold is a codimension 2  
condition on $C$. We, therefore, expect that finitely many
degree $d$ rational curves will meet $2d$ points 
in general position.  For example, there is obviously a unique 
line through two points. Similarly, since any conic 
lies in a plane, there will be none such 
passing through 4 generic points. In general, the number of 
degree $d=1,2,\dots$ rational curves through $2d$ general points
of $\Ps$ equals 
$$
1,0,1,4,105,2576,122129,\dots\,, 
$$
see for example \cite{CK,fp} on how to do such computations.
 
An important ingredient 
is a compactification of the space of maps \eqref{mapP} to 
the \emph{moduli space of stable maps}, introduced by 
Kontsevich. The domain of a stable map need not be 
irreducible, it may sprout off additional $\Pl$'s like 
in the case of a smooth conic degenerating to a union of 
two lines. 


\subsubsection{}



In general, the moduli spaces $\Mb_{g,n}(X,\beta)$ of 
pointed stable maps to $X$ (where $X$ may be of any 
dimension) consist of data 
$$
(C,p_1,\dots,p_n,f)
$$
where $C$ is a complete curve of arithmetic genus $g$ with at 
worst nodal singularities, $p_1,\dots,p_n$ are smooth 
marked points of $C$, and $f:C\to X$ is an algebraic map 
of given degree 
$$
\beta = f_*([C])\in H_2(X)\,.
$$ 
Two such 
objects are identified if they differ by a reparameterization 
of the domain. One further requirement is that the 
group of automorphisms (that is, self-isomorphisms) should
be finite; this is the stability condition. 


\subsubsection{}



The space $\Mb_{g,n}(X,\beta)$ carries a canonical 
\emph{virtual fundamental class} \cite{Beh,BehFan,LiTian} of dimension 
%
\begin{equation}
  \label{vdGW}
  \vdim \Mb_{g,n}(X,\beta) = 
- \beta \cdot  K_X + (g-1)(3-\dim X) + n \,, 
\end{equation}
%
where $K_X$ is the canonical class of $X$. 
The Gromov-Witten 
invariants of $X$ are defined as intersections of 
cohomology classes on $\Mb_{g,n}(X,\beta)$ defined
by conditions we impose on $f$ (e.g.\  by constraining 
the images $f(p_i)$ of the marked points) against the virtual fundamental 
class. In exceptionally good cases, for example when
$X=\Ps$ and $g=0$, the virtual fundamental class is 
the usual fundamental class. 


Even for $X=\Ps$, the situation with higher genus curves 
is considerably more involved, both in foundational
aspects as well as in combinatorial complexity. 
It is, therefore, remarkable that conjectural 
correspondence with Donaldson-Thomas theory, to be 
described momentarily,  gives all-genera
fixed-degree 
answers with finite amount of computation. 



\subsection{Equations of curves and Hilbert scheme}

Instead of giving a  parameterization, one can describe 
algebraic curves $C\subset X$ by their equations. 


\subsubsection{}
Concretely, if $X\subset\bP^N$ for some $N$ and 
$[x_0:x_1:\dots:x_N]$ are homogeneous coordinates on 
$\bP^N$ then homogeneous 
polynomials $f$ 
vanishing on $C$ form a graded ideal 
$$
I(C) \subset \C[x_0,\dots,x_N] \,,
$$
containing the ideal $I(X)$ of $X$. This ideal is 
what replaces parametrization of $C$ in the world of 
equations. For example, the curve in Figure \ref{f1} is 
cut out (that is, its ideal is generated) 
by one quadratic and 3 cubic equations. 


\subsubsection{}



Let 
$
I(C)_k \subset \C[x_0,\dots,x_N]_k
$
denote subspaces formed by polynomials of degree $k$. 
The codimension of $I(C)_k$ is the number of linearly 
independent degree $k$ polynomials on $C$. 
By Hilbert's theorem, 
%
\begin{equation}
  \label{HilbF}
  \codim I(C)_k = (\beta \cdot h) \, k + \chi(\cO_C) \,, \quad k\gg 0 \,,
\end{equation}
%
where $\beta\in H_2(X)$ is the class of $C$ and $h$ is the hyperplane 
class induced from the ambient $\bP^N$. The number 
$$
\chi(\cO_C)=\dim H^0(C,\cO_C) - \dim H^1(C,\cO_C)
$$ 
is the 
holomorphic Euler characteristic of $C$. By definition, 
$g=1-\chi$ is the arithmetic genus of $C$. 

It is easy to see that $C$ is 
uniquely determined by any $I(C)_k$ provided $k\gg 0$. 
A natural parameter space for ideals $I$ with given 
Hilbert function \eqref{HilbF} is the Hilbert
scheme $\Hilb(X;\beta,\chi)$ constructed by 
Grothendieck. It is defined by certain 
natural equations in the Grassmannian
of all possible linear subspaces 
$I_k\subset \C[x_0,\dots,x_N]_k$ 
of given codimension \eqref{HilbF}. 



\subsubsection{}



While $\Hilb(X;\beta,\chi)$ and  $\Mb_{g,n}(X,\beta)$ 
play the same role of a compact parameter space in 
the world of equations and parameterizations, 
respectively, it should be stressed that there is no 
direct geometric relation between the two. This is 
most apparent in the case $\beta=0$. In degree $0$ 
case, the stable map moduli spaces become 
essentially Deligne-Mumford spaces of stable curves
--- very nice and well-understood varieties. 
The Hilbert scheme of points in a $3$-fold $X$, 
by contrast, seems very complicated. 
Even the number of its irreducible components, or
their dimensions, is not known. 



\subsubsection{}




All of what we said so far about the Hilbert 
scheme applied very generally, in any dimension. 
The case of curves in a 3-fold, however, is 
special: in this case $\Hilb(X;\beta, \chi)$ 
carries a virtual fundamental class 
constructed by R.~Thomas \cite{Thom}. 
The technically important thing about 3-folds is
that Serre duality limits the number of interesting 
$\Ext^i$-group from an ideal sheaf to itself 
to just $i=1,2$. From \eqref{vdGW} we see that 
the case $\dim X=3$ is special for Gromov-Witten 
theory, too. In fact, we have
%
\begin{equation}
  \label{vdH}
  \vdim \Hilb(X;\beta,\chi) = \vdim \Mb_{g}(X,\beta) = - \beta \cdot  K_X \,.
\end{equation}
%
As we will see in the next section, it is very 
fortunate that this dimension depends only on $\beta$. 


\subsection{Gromov-Witten and Donaldson-Thomas invariants}

Let $\beta\in H_2(X)$ be such that 
$-\beta \cdot  K_X \ge 0$. 
Let $\gamma_1,\dots,\gamma_n\in H_*(X)$ be a collection 
of cycles in $X$ such that 
$$
\sum (\codim \gamma_i -1)= -  \beta \cdot  K_X \,.
$$ 
By the dimension formula \eqref{vdH}, 
the virtual number of degree $\beta$ curves of some 
fixed genus meeting all of $\gamma_i$'s is expected
to be finite. 

The precise technical definition of this virtual 
number is different for stable maps and the Hilbert
scheme. 

\subsubsection{}



On the stable maps side, we can use marked 
points $p_i$ to say ``curve meets $\gamma_i$'' in 
the language of cohomology. Namely, 
imposing the condition $f(p_i)\in \gamma_i$ can be interpreted 
as pulling back the Poincar\'e dual class $\gamma_i^\vee$ 
via the evaluation map
%
\begin{equation}
 \ev_i : (C,p_1,\dots,p_n,f)\mapsto f(p_i)\,.
\end{equation}
%
The Gromov-Witten invariants are defined by 
%
\begin{equation}
  \label{GWi}
  \lan \gamma_1,\dots,\gamma_n \ran^{GW}_{\beta,g} = 
\int_{\left[\Mb_{g,n}(X,\beta)^\bullet\right]_{vir}}
\prod_{i=1}^n \ev_i^*\left(\gamma_i^\vee\right) \,. 
\end{equation}
% 
The bullet here stands for  moduli space
with possibly disconnected domain and 
$[\quad]_{vir}$ is its virtual fundamental 
class. The disconnected theory contains, 
of course, the same information as the connected one, but has
slightly better formal properties. Most importantly, since 
connected curves don't form a component of the Hilbert scheme, 
we prefer to work with possibly
disconnected curves on the Gromov-Witten side as well.


\subsubsection{}\label{s_unis}



On the Hilbert scheme side, instead of marked points, it 
is natural to use characteristic classes of the universal 
ideal sheaf 
$$
\cI \to \Hilb(X) \times X \,, 
$$
which has the property that for any 
point $I\in \Hilb(X)$, the restriction of $\cI$ to 
$I \times X\cong X$ is $I$ itself. We have $c_1(\cI)=0$ and 
$$
c_2(\cI)\in H^2\left(\Hilb(X) \times X\right)
$$
can be interpreted as the class of locus
$$
\{(I,\text{point of the curve defined by $I$})\} \subset \Hilb(X) \times X \,.
$$
The class of curves $I\in\Hilb(X)$ meeting $\gamma\in H_*(X)$ can 
be described as the coefficient of $\gamma^\vee$ in the 
K\"unneth decomposition of $c_2(\cI)$. We denote this 
component by
$$
c_2(\gamma) \in H^{\codim \gamma -1}(\Hilb(X))
$$
and define 
%
\begin{equation}
  \label{DTi}
\lan \gamma_1,\dots,\gamma_n \ran^{DT}_{\beta,\chi} = 
\int_{\left[\Hilb(X;\beta,\chi)\right]_{vir}}
\prod_{i=1}^n  c_2(\gamma_i)\,. 
  \end{equation}
%
We call these numbers the Donaldson-Thomas invariants 
of $X$. 


\subsection{Main conjecture}


\subsubsection{}



As already pointed out, there is no reason for the 
corresponding invariants \eqref{GWi}
and \eqref{DTi} to agree and, in fact, they don't. 
For one thing, the moduli spaces are empty and, hence, 
integrals vanish if $g,\chi\ll 0$, which goes
in the opposite directions via $\chi=1-g$. Also,  
the Donaldson-Thomas invariants are
integers while the Gromov-Witten invariants are typically 
fractions (because stable maps can have finite 
automorphisms). However, a conjecture proposed in \cite{mnop}
equates natural generating functions for the two kinds 
of invariants after a nontrivial change of variables. 


\subsubsection{}



Concretely, set
$$
Z_{GW}(\gamma_1,\dots,\gamma_n;u)_\beta = \sum_{g} u^{2g-2} \, 
\lan \gamma_1,\dots,\gamma_n \ran^{GW}_{\beta,g}
$$
and define the reduced partition function by
$$
Z'_{GW}(\gamma;u)_\beta  = 
Z_{GW}(\gamma;u)_\beta \big/ Z_{GW}(\varnothing;u)_0 \,.
$$
This reduced partition function counts maps without 
collapsed connected components. The degree zero 
function $Z_{GW}(\varnothing;u)_0$ is known 
explicitly for any 3-fold $X$ by the results of \cite{FabPan}, 
see below. Define $Z_{DT}(\gamma;q)_\beta$
and its reduced version by the same formula, with 
$q^\chi$ replacing $u^{2g-2}$. 

\begin{Conjecture}\label{c_m} The reduced Donaldson-Thomas 
partition function $Z'_{DT}(\gamma;q)_\beta$ is 
a rational function of $q$. The change of variables
$$
\boxed{q=-e^{iu}}
$$
relates it to the Gromov-Witten partition functions
$$
(-iu)^{-\vdim} Z'_{GW}(\gamma;u)_\beta  = 
(-q)^{-\vdim/2} Z'_{DT}(\gamma;q)_\beta \,,
$$
where $\vdim=-\beta\cdot K_X$ is the virtual 
dimension.  
\end{Conjecture}

\subsubsection{}
Conjecture \ref{c_m} has been established 
when $X$ is either a local curve, that is, an 
arbitrary rank 2 bundle over a smooth curve \cite{GWDT} or 
the total space of canonical bundle over a 
smooth toric surface \cite{mnop,LLZ2}. 
In the local curve case, 
equivariant theory is needed \cite{jbrp}. In my
opinion, this provides substantial evidence
for the ``GW=DT''  
correspondence. 


\subsubsection{}



Conjecture \ref{c_m} is actually a special 
case of more general conjectures proposed 
in \cite{mnop} that extend the GW/DT correspondence
to the relative context and descendent 
invariants. On the Gromov-Witten side, the 
descendent insertions are defined by  
$$
\tau_k(\gamma_i) = \ev_i^*(\gamma_i^\vee) \, \psi_i^{k}
\in H^{\codim \gamma_i + k}(\Mb_{g,n}(X;\beta))\,,
$$
where $\psi_i$ is the 1st Chern class of the 
line bundle $L_i$ over $\Mb_{g,n}(X;\beta)$ 
with fiber the cotangent line $T^*_{p_i}C$ to 
the curve $C$ at the marked point $p_i$.  
These should correspond to K\"unneth components
of characteristic classes of the universal 
sheaf $\cI$. For example, we conjecture that
$$
\tau_k(pt) \xrightarrow{\quad\textup{GW=DT}\quad}(-1)^{k+1} \ch_{k+2}(pt)\,,
$$
provided $\codim \gamma_i >0 $ for all 
other insertions. Here 
$$
\ch_{k+2}(\cI) \in H^{k+2}(\Hilb(X)\times X) 
$$ 
are the components of the Chern character of $\cI$ and 
$\ch_{k+2}(pt)$ are the coefficient of
$pt^\vee = 1\in H^*(X)$ in their K\"unneth 
decomposition.  



\subsubsection{}

In the degree $0$ case, which is left out by Conjecture
\ref{c_m}, we expect the following simple answer 
which depends only on characteristic numbers of $X$. 
Denote the Chern classes of $TX$ by $c_i$ and 
let 
%
\begin{equation}
  \label{McM}
  M(q) = \prod_{n>0} (1-q^n)^{-n} 
\end{equation}
%
be the McMahon function.

\begin{Conjecture} \label{ZDT0}
$\displaystyle \quad 
Z_{DT}(X,q)_0 = M(-q)^{\int_X(c_3-c_1 c_2)}\,. 
$
\end{Conjecture}

This conjecture has been proven for a large class of 
3-folds including all toric ones \cite{mnop}. 

Comparing the asymptotic expansion 
%
\begin{equation}
  \label{McMa}
   \ln M(e^{-u}) \sim \sum_{g=0}^{\infty} 
\frac{\zeta(3-2g) \zeta(1-2g)}{(2g-2)!} \, u^{2g-2} \,, 
\quad u\to +0 \,. 
\end{equation}
%
in which the singular $g=1$ term is understood 
as the second term in 
$$
\frac{\zeta(3-2g) \zeta(1-2g)}{(2g-2)!} \, u^{2g-2} =
\frac{1}{24}\frac{1}{g-1} + 
\left(\frac1{12}\ln u + \zeta'(-1)\right) + O(g-1) \,, 
$$
to evaluation of $Z_{GW}(X,u)_0$ obtained
in \cite{FabPan}, we find 
$$
\ln Z_{DT}(X,-e^{iu})_0 \sim \dots + 2 
\ln Z_{GW}(X,u)_0 \,,
$$
where dots stand for singular or constant terms in 
the asymptotic expansion. 
There are some plausible explanations for the unexpected 
factor of $2$ in this formula, but none convincing enough to be 
presented here. 

McMahon's discovery was that the function $M(q)$ is
 the generating 
function for 3-dimensional partitions. We will see
momentarily how 3-dimensional partitions arise in 
Donaldson-Thomas theory. 


\section{Random surfaces}


\subsection{Localization and dissolving crystals}


\subsubsection{}



For the rest of this lecture, we will assume that 
$X$ is a smooth toric $3$-fold, such as $\Ps$ or $(\Pl)^3$. 
By definition, this means, that the torus $\bT=(\C^*)^3$ 
acts on $X$ with an open orbit. Since anything that acts on $X$
naturally acts on both $\Mb_{g,n}(X;\beta)$ and $\Hilb(X;\beta,\chi)$, 
localization in $\bT$-equivariant cohomology \cite{AtBo} can 
be used to compute intersections on these moduli spaces, see 
\cite{ES,Kon2,GP}. 

Localization reduces intersection computations
to certain integrals over the loci of $\bT$-fixed points. 
On the Gromov-Witten side, these fixed loci are, 
essentially, moduli spaces of curves and the 
integrals in question are the so-called Hodge
integrals. While any fixed-genus Hodge integral can, 
in principle, be evaluated in finite time, 
a better structural understanding of the totality 
of these numbers remains an important challenge. 
By contrast, the $\bT$-fixed loci in the Hilbert 
scheme are isolated points. Together with the 
conjectural rationality of $Z'_{DT}$, this 
reduces, for fixed degree, the
all-genera answer to a finite sum. 

\subsubsection{}
It is the localization sum in the Donaldson-Thomas 
theory that can be interpreted as the partition 
function of a certain random surface ensemble. 
The link is provided by the combinatorial geometry 
of the $\bT$-fixed points in the Hilbert scheme,
which is standard and will be quickly reviewed 
now.  


\subsubsection{}

As a warm-up, let us start with surfaces instead of $3$-folds and 
look at the Hilbert scheme $\Hilb(\C^2;d,n)$ formed
by ideals $I\subset \C[x,y]$ such that
%
\begin{equation}
  \label{dnH}
  \codim I_{\le k} = d k + n \,, \quad k \gg 0 \,, 
\end{equation}
%
where $I_{\le k}$ stands for subspace of polynomials
of degree $\le k$. The torus $(\C^*)^2$ acts on 
$\Hilb(\C^2;d,n)$ by rescaling $x$ and $y$. The 
monomials $x^i y^j$ are eigenvectors of the 
torus action with distinct eigenvalues. Any 
torus-fixed linear subspace $I\subset \C[x,y]$ 
is, therefore, spanned by monomials. Since
$I$ is also an ideal, together 
with any monomial $x^i y^j$ it contains all 
monomials $x^a y^b$ with $a\ge i$ and $b\ge j$.  


\begin{figure}[hbtp]\psset{unit=1.1 cm}
  \begin{center}
    \begin{pspicture}(0,0)(10,7)
\newgray{lightgray}{.90}
\psframe[fillstyle=solid,linewidth=0,fillcolor=lightgray,
linecolor=white](1,0)(10,3)
\psframe[fillstyle=solid,linewidth=0,fillcolor=lightgray,
linecolor=white](3,3)(10,4)
\psframe[fillstyle=solid,linewidth=0,fillcolor=lightgray,
linecolor=white](4,4)(10,5)
\psframe[fillstyle=solid,linewidth=0,fillcolor=lightgray,
linecolor=white](6,5)(10,6)
\showgrid
\psline[linewidth=0.05](1,0)(1,3)(3,3)(3,4)(4,4)(4,5)(6,5)(6,6)(10,6)
\pscircle(1.5,2.5){0.5}
\pscircle(3.5,3.5){0.5}
\pscircle(4.5,4.5){0.5}
\pscircle(6.5,5.5){0.5}
\rput[c](0.5,6.5){$1$}
\rput[c](0.5,5.5){$y$}
\rput[c](0.5,4.5){$y^{2}$}
\rput[c](0.5,3.5){$y^{3}$}
\rput[c](0.5,2.5){$y^{4}$}
\rput[c](0.5,1.5){$y^{5}$}
\rput[c](0.5,0.5){$y^{6}$}
\rput[c](1.5,6.5){$x$}
\rput[c](1.5,5.5){$xy$}
\rput[c](1.5,4.5){$xy^{2}$}
\rput[c](1.5,3.5){$xy^{3}$}
\rput[c](1.5,2.5){$xy^{4}$}
\rput[c](1.5,1.5){$xy^{5}$}
\rput[c](1.5,0.5){$xy^{6}$}
\rput[c](2.5,6.5){$x^{2}$}
\rput[c](2.5,5.5){$x^{2}y$}
\rput[c](2.5,4.5){$x^{2}y^{2}$}
\rput[c](2.5,3.5){$x^{2}y^{3}$}
\rput[c](2.5,2.5){$x^{2}y^{4}$}
\rput[c](2.5,1.5){$x^{2}y^{5}$}
\rput[c](2.5,0.5){$x^{2}y^{6}$}
\rput[c](3.5,6.5){$x^{3}$}
\rput[c](3.5,5.5){$x^{3}y$}
\rput[c](3.5,4.5){$x^{3}y^{2}$}
\rput[c](3.5,3.5){$x^{3}y^{3}$}
\rput[c](3.5,2.5){$x^{3}y^{4}$}
\rput[c](3.5,1.5){$x^{3}y^{5}$}
\rput[c](3.5,0.5){$x^{3}y^{6}$}
\rput[c](4.5,6.5){$x^{4}$}
\rput[c](4.5,5.5){$x^{4}y$}
\rput[c](4.5,4.5){$x^{4}y^{2}$}
\rput[c](4.5,3.5){$x^{4}y^{3}$}
\rput[c](4.5,2.5){$x^{4}y^{4}$}
\rput[c](4.5,1.5){$x^{4}y^{5}$}
\rput[c](4.5,0.5){$x^{4}y^{6}$}
\rput[c](5.5,6.5){$x^{5}$}
\rput[c](5.5,5.5){$x^{5}y$}
\rput[c](5.5,4.5){$x^{5}y^{2}$}
\rput[c](5.5,3.5){$x^{5}y^{3}$}
\rput[c](5.5,2.5){$x^{5}y^{4}$}
\rput[c](5.5,1.5){$x^{5}y^{5}$}
\rput[c](5.5,0.5){$x^{5}y^{6}$}
\rput[c](6.5,6.5){$x^{6}$}
\rput[c](6.5,5.5){$x^{6}y$}
\rput[c](6.5,4.5){$x^{6}y^{2}$}
\rput[c](6.5,3.5){$x^{6}y^{3}$}
\rput[c](6.5,2.5){$x^{6}y^{4}$}
\rput[c](6.5,1.5){$x^{6}y^{5}$}
\rput[c](6.5,0.5){$x^{6}y^{6}$}
\rput[c](7.5,6.5){$x^{7}$}
\rput[c](7.5,5.5){$x^{7}y$}
\rput[c](7.5,4.5){$x^{7}y^{2}$}
\rput[c](7.5,3.5){$x^{7}y^{3}$}
\rput[c](7.5,2.5){$x^{7}y^{4}$}
\rput[c](7.5,1.5){$x^{7}y^{5}$}
\rput[c](7.5,0.5){$x^{7}y^{6}$}
\rput[c](8.5,6.5){$x^{8}$}
\rput[c](8.5,5.5){$x^{8}y$}
\rput[c](8.5,4.5){$x^{8}y^{2}$}
\rput[c](8.5,3.5){$x^{8}y^{3}$}
\rput[c](8.5,2.5){$x^{8}y^{4}$}
\rput[c](8.5,1.5){$x^{8}y^{5}$}
\rput[c](8.5,0.5){$x^{8}y^{6}$}
\rput[c](9.5,6.5){$x^{9}$}
\rput[c](9.5,5.5){$x^{9}y$}
\rput[c](9.5,4.5){$x^{9}y^{2}$}
\rput[c](9.5,3.5){$x^{9}y^{3}$}
\rput[c](9.5,2.5){$x^{9}y^{4}$}
\rput[c](9.5,1.5){$x^{9}y^{5}$}
\rput[c](9.5,0.5){$x^{9}y^{6}$}
\end{pspicture}
 \caption{A typical monomial ideal $I\subset \C[x,y]$.}
    \label{f2}
\end{center}
\end{figure}

See Figure \ref{f2} for an image of a typical torus-fixed ideal
$I$. Monomials in the ideal $I$ are
shaded gray; the generators of $I$ are circled. 
Monomials not in $I$ form a shape similar to the 
diagram of a partition, except that it has some infinite
rows and columns. The total width of these infinite
rows and columns ($2$, in this example) is the degree 
$d$ in \eqref{dnH}. The constant term $\chi$ ($=9$ here) 
can be interpreted as the ``renormalized area'' of this infinite 
diagram. 


\subsubsection{}

For $\Hilb(\C^3;d,\chi)$, the 
description of $\bT$-fixed points $I$ is similar, but now 
in terms of 3-dimensional partitions, with 
possibly infinite legs along the coordinate axes, 
see Figure \ref{f3}.  The 2D 
partitions $\lambda_1,\lambda_2,\lambda_3$, 
on which the infinite legs end, describe the 
nonreduced structure of $I$ along the coordinate axes.
The degree 
$$
d=|\lambda_1|+|\lambda_2|+|\lambda_3|
$$
is the total cross-section 
of the infinite legs; the number $\chi$ is
the renormalized volume of this 3D partition. 
%
\begin{figure}[hbtp]
  \begin{center}
   \scalebox{0.7}{\includegraphics{partition_legs.ps}}     
    \caption{A monomial ideal in $\Hilb(C^3;d,\chi)$}\label{f3}
     \end{center}
\end{figure}
%

A general projective toric $X$ corresponds to 
lattice polytope $\Delta_X$, with vertices corresponding to 
$\bT$-fixed points, edges --- to $\bT$-invariants $\Pl$'s et
cetera. For example, $(\Pl)^3$ and $\Ps$ corresponds to a cube
and simplex, respectively. To specify a $\bT$-fixed point in $\Hilb(X;\beta,\chi)$, 
we place a 3D partition at every vertex of $\Delta_X$. 
These 3D partition may have infinite legs along the 
edges of $\Delta_X$; we require that these legs glue 
in an obvious way, see Figure \ref{f4}, left half. We have 
$$
\beta = \sum_{\textup{edges $E$}} |\lambda_E| \, \left[E\right]\in H_2(X) \,,
$$
where $[E]$ is the class of the $\bT$-invariant $\Pl$ 
corresponding to the edge $E$ and $\lambda_E$ is 
cross-section profile along $E$. The number $\chi$ is 
the renormalized volume of this assembly of 3D partitions. 


\begin{figure}[hbtp]
  \begin{center}
   \scalebox{0.4}{\includegraphics{crystal_complement.ps}} \qquad 
  \scalebox{0.27}{\includegraphics{sugar_cube.eps}}
      \caption{A $\bT$-fixed point in $\Hilb((\Pl)^3;\beta,\chi)$}\label{f4}
     \end{center}
\end{figure}
%

Note that 
the edge lengths do not have any intrinsic meaning 
in Figure \ref{f4}; formally, they have to be viewed
as infinitely long. It is an interesting problem to 
construct a generalization of Donaldson-Thomas theory 
in which the edge lengths will play a role. This 
should involve doubling of the degree parameters in 
the theory. 

The right half of Figure \ref{f4} shows the complement
of the 3D partition structure on the left. Note that 
it is highly reminiscent of a partially dissolved 
cubic crystal --- some atoms are missing from the corners
and along the edges. So, at least as far as the 
index set is concerned, the localization sum in Donaldson-Thomas
theory of $X$ has the shape of a partition function 
in a random surface model, the surface being the 
surface of the dissolving crystal. We now move on 
to the computation of localization weight. 


\subsection{Equivariant vertex}


The weight of a $\bT$-fixed point $I\in\Hilb(X;\beta,\chi)$ 
in the virtual localization formula for Donaldson-Thomas
invariants was computed in \cite{mnop}. Here, for simplicity, 
we focus on the case $X=\C^3$ and $\beta=0$, that is, on the 
case of a single 3D partition without infinite legs. 
The general case is parallel. 


\subsubsection{}



Let $I_\pi\in\Hilb(\C^3;0,\chi)$ be a monomial ideal 
corresponding to a 3D partition $\pi \subset \Z_{\ge 0}^3$. 
Let $C_\pi \subset \Z_{\ge 0}^3$ denote the complement 
of $\pi$; we view the elements of $C_\pi$ as the atoms 
that remain in the crystal. 

Let $z\in \C^* \subset \bT$ act on the coordinates in $\C^3$ by
$$
z \cdot (x_1,x_2,x_3) = (z^{t_1} x_1, z^{t_2} x_2, z^{t_3} x_3) \,.
$$ 
The localization weight $\bw(\pi)$ of $I_\pi$ 
will be a rational function of the parameters $t_i$. Let $T$ 
be the linear function taking value
$$
T(\cb)=t_1 a_1 + t_2 a_2 + t_3 a_3 \,.
$$
on a box
$\cb = (a_1,a_2,a_3) \in \Z_{\ge 0}^3$.
For a pair of boxes $\cb_1$ and $\cb_2$, we define
$$
U(\cb_1,\cb_2) = \frac{\delta T (\delta T+t_1+t_2)(\delta T+t_1+t_3)(\delta T+t_2+t_3)}
{(\delta T+t_1)(\delta T+t_2)(\delta T+t_3)(\delta T+t_1+t_2+t_3)} \,, 
$$
where 
$$
\delta T= T(\cb_1) - T(\cb_2) \,.
$$

Recall that $\chi$ is the number of missing atoms. 
We would have liked to define $\bw(\pi)$ by
%
\begin{equation}
  \label{w_prod}
  \bw(\pi)\textup{ ``$=$'' } (-q)^{\chi} \prod_{\cb_1,\cb_2 \in 
\textup{ crystal $C_\pi$}} U(\cb_1,\cb_2) \,,
\end{equation}
%
which has a standard grand-canonical Gibbs form
with $(-q)$ being the fugacity and 
$$
- \log U(\cb_1,\cb_2)\, U(\cb_2,\cb_1)
$$
being the (translation-invariant) interaction energy between 
the atoms in positions $\cb_1$ and $\cb_2$. 


\subsubsection{}



Since the product \eqref{w_prod} is not even 
close to being well-defined or convergent, the following
regularization is required. Define
%
\begin{equation}
  \label{R_pi}
   R_\pi(z) = \textup{trace of $z$ acting on $I_\pi$}
 = \sum_{\cb\in C_\pi} z^{T(\cb)} \,,
\end{equation}
%
This can be viewed as a generating function of the set $C_\pi$.  
One checks that for any 3D partition $\pi$ 
%
\begin{equation}
  \label{Vpi}
  \bV_\pi(z) =- \frac{R_\pi(z) \, R_\pi(z^{-1})}{R_\varnothing(z^{-1})}+ R_\varnothing(z)
\end{equation}
%
is a Laurent polynomials in $z^{t_i}$, that is, it has the 
form 
$$
\bV_\pi(z) = \sum_{a\in \Z^3} v_\pi(a) \, z^{T(a)} \,, \quad v_\pi(a)\in \Z\,,
$$
where the sum is finite, that is, $v_\pi(a)=0$ for all but finitely 
many $a$.  We define the \emph{equivariant vertex measure} of 
a 3D partition $\pi$ by  
%
\begin{equation*}
  \label{w_ren}
   \bw(\pi)= q^{\chi} \prod_{a\in \Z} T(a)^{-v_\pi(a)} \,. 
\end{equation*}
%
Note that a naive expansion of the $R_\pi(z) \, R_\pi(z^{-1})$ product in 
\eqref{Vpi} leads to the infinite product in \eqref{w_prod}. 





\subsubsection{}

It is a theorem from \cite{mnop} that the virtual fundamental class
of the Hilbert scheme restricts to the $\bT$-fixed point $I_\pi$ 
as follows: 
$$
q^\chi \left[\Hilb(\C^3;0,\chi)\right]_{vir}\bigg|_{I_\pi}  = \bw(\pi) \,. 
$$



\subsubsection{}



One special case worth noting is when 
%
\begin{equation}
  \label{CY}
   t_1 + t_2 + t_3 = 0 \,. 
\end{equation}
% 
In this case 
$$
U(\cb_1,\cb_2) \, U(\cb_2,\cb_1) = 1 
$$
and the equivariant vertex measure $\bw$ becomes uniform on 
partitions of fixed size. Condition \eqref{CY} is the 
Calabi-Yau condition, it means restriction to 
the subtorus in $\bT$ preserving the holomorphic
$3$-form 
$$
\Omega=dx_1 \wedge dx_2 \wedge dx_3
$$ 
on $\C^3$. This explains why the McMahon function \eqref{McM}
appears in Donaldson-Thomas theory. 

For general $t_i$, the 
 analog of McMahon's identity is the 
following formula proven in \cite{mnop}
%
\begin{equation}
  \label{DTMc}
  \sum_\pi \bw(\pi)  = M(-q)^{-\tfrac{(t_1+t_2)(t_1+t_3)(t_2+t_3)}{t_1 t_2 t_3}} \,. 
\end{equation}
%
This formula implies Conjecture \ref{ZDT0} for any toric $3$-fold $X$. 


\subsubsection{}
If $\pi$ has infinite legs, additional counterterms 
are needed in \eqref{Vpi} to make it finite and the 
measure $\bw(\pi)$ well-defined \cite{mnop}. The \emph{equivariant
vertex} is a function of 3 partitions $\lambda,\mu,\nu$ 
defined by 
%
\begin{equation}
  \label{bW}
  \bW(\lambda,\mu,\nu) = \sum_{\textup{$\pi$ ending on $\lambda,\mu,\nu$}}
\bw(\pi) \,.
\end{equation}
%
This function, which is the main building block in 
localization formula for Donaldson-Thomas invariants, 
is, in general, rather intricate. Conjecturally it is 
related to general triple Hodge integrals. In the 
Calabi-Yau case \eqref{CY} it specializes to 
the \emph{topological vertex} \cite{topver,ORV}, which has an expression 
in terms of Schur functions. The conjectural relation to 
Hodge integrals is proven in the one-leg case  \cite{GWDT}. 
In the much simpler Calabi-Yau case, it is known in 
the two-leg case, see \cite{LLZ2} and also \cite{LLZ1,OP5,LLLZ}. 


\subsubsection{}

Conjecture \ref{c_m} relates the Donaldson-Thomas partition 
function $Z_{DT}$, which we just interpreted as the partition 
function of a certain dissolving crystal model, to the 
the Gromov-Witten partition function via the substitution
$$
- q = e^{iu} \,.
$$
This means that the asymptotic expansion of 
the free energy $\ln Z_{DT}$ in the 
thermodynamic limit
$$
-q= \textup{fugacity} \to 1
$$
gives a genus-by-genus count of connected curves in Gromov-Witten 
theory. Letting $q\to -1$ does corresponds to letting the energy cost 
of removal of an atom from the crystal go to zero. 
As a result, the expected number of removed atoms
%
\begin{equation}
\lan |\pi| \ran_{\bw} 
\, \overset{\textup{def}}{=}\,
 \frac{\sum \bw(\pi) \, |\pi|}{ \sum \bw(\pi)}  
\sim  \frac{(t_1+t_2)(t_1+t_3)(t_2+t_3)}{t_1 t_2 t_3} \, 
\frac{2\zeta(3)}{\ln(-q)^3} \,, 
\end{equation}
%
%\tfrac{(t_1+t_2)(t_1+t_3)(t_2+t_3)}{t_1 t_2 t_3} 
%
diverges. 



In general, the words ``thermodynamic limit'' have to be taken 
with a grain of salt since $\bw$ is not necessarily a 
positive measure. However, for example in the uniform measure 
case \eqref{CY} it is positive for $-q \in (0,1)$.  
After scaling by $-\ln(-q)$ in every direction, 
a macroscopic limit shape emerges. 
A simulation of the limit shape can be seen in Figure \ref{f_lim}. 
%
\begin{figure}[hbtp]
  \begin{center}
    \scalebox{0.35}{\leavevmode \epsfbox[200 0 400 570]{limshape.eps}}
      \caption{A random 3D partition of a large number}\label{f_lim}
     \end{center}
\end{figure}
%



The limit shape dominates the partition function $Z_{DT}$.
The Gromov-Witten partition function $Z_{GW}$ is 
determined by the fluctuations around the limit shape. 


\subsubsection{}
The limit shape of a uniformly random 3D partition of
a large number, first determined in \cite{CKen}, is, as it 
turns out, nothing 
but the so-called Ronkin function of the simplest
plane curve
%
\begin{equation}
  \label{str}
    z+w=1\,,
\end{equation}
%
see \cite{KOS} for a much more general result. 

Surprisingly (or not ?) the straight line \eqref{str} 
is essentially the Hori-Vafa mirror \cite{HorV} of $\C^3$, see e.g.\
Section 2.5 in \cite{topver}. The mirror
geometry thus can be interpreted as the limit shape
in the localization formula for the original 
counting problem. 

This phenomenon was first observed in \cite{NO} in 
the context of supersymmetric gauge theories on $\R^4$.  
Namely, in \cite{NO} the Seiberg-Witten curve was identified 
with the limit shape in a certain random partition 
ensemble originating from localization 
on the instanton moduli spaces \cite{N}. 
This limit shape interpretation gave a 
a gauge-theoretic derivation of
the Seiberg-Witten prepotential, see \cite{NO}
and also \cite{NY} for a 
different approach. 
Via a physical procedure called \emph{geometric
engineering}, supersymmetric gauge theories correspond to 
Gromov-Witten theory of certain noncompact toric
Calabi-Yau threefolds $X$, see for example \cite{KKV,IK}. 

For toric Calabi-Yau $X$, the random 
surface model can be viewed as a very degenerate
limit of the planar dimer model. There is general
method for finding limit shapes in the dimer 
model, which often gives essentially algebraic 
answers \cite{KO}. In particular, it reproduces the 
Hori-Vafa mirrors of toric Calabi-Yau 3-folds \cite{KOV}. 
It would be extremely interesting to extend the 
$$
\textup{``mirror geometry = limit shape''}
$$
philosophy to a more 
general class of varieties and/or theories. 



\subsubsection{}
A natural set of observables to average
against the equivariant vertex measure is 
provided by the characteristic classes of 
the universal sheaf $\cI$, see Section \ref{s_unis}, 
in particular, by the components $\ch_k(\cI)$ of 
its Chern character. The restriction $\ch_k(\pi)$ of $\ch_k(\cI)$ 
to a fixed point $I_\pi\in\Hilb(\C^3;0,\chi)$ 
is determined in terms of the generating 
function \eqref{R_pi} by 
$$
\sum_{k} \alpha^k \, \ch_k(\pi) = 
\frac{R_\pi(e^\alpha)}{R_\varnothing(e^\alpha)} \,.
$$
The algebra generated by $\ch_k(\pi)$ can be 
viewed as the algebra of symmetric polynomials 
in $\pi$; this is a 3-dimensional analog of the 
algebra introduced in \cite{KerO}. 

We have $\ch_1(\pi)=0$, $\ch_2(\pi)=\textup{degree}=0$, and 
$$
\ch_3(\pi) = t_1 t_2 t_3 |\pi|\,,
$$
so from \eqref{DTMc} we get the evaluation 
$$
\langle \ch_3(\pi) \rangle_\bw =
 - (t_1+t_2)(t_1+t_3)(t_2+t_3) \, E_3(-q) \,.
$$
Here $E_{2k+1}$ are the following ``odd weight'' 
analogs of the classical Eisenstein series
%
\begin{equation}
  \label{E2k+1}
  E_{2k+1}(q) = \sum_n q^n \sum_{d|n} d^{2k} \,, \quad k=1,2,\dots\,.
\end{equation}
%
One further computes, for example, 
%
\begin{equation*}
\langle \ch_4(\pi) \rangle_\bw =
 - \frac12 \, (t_1+t_2)(t_1+t_3)(t_2+t_3)
(t_1+t_2+t_3) \,
q\frac{d}{dq} E_3(-q) \,,  
\end{equation*}
%
and the natural conjecture is that all $\langle \ch_k(\pi) \rangle_\bw$
belong to the differential algebra generated by the 
functions \eqref{E2k+1} and the operator $q\frac{d}{dq}$. A similar 
statement for ordinary 2D partitions and usual even 
weight Eisenstein series was proven in \cite{BO}.

Note, in particular, this conjecture 
implies that the ``thermodynamic'' asymptotics 
of $\langle \ch_k(\pi) \rangle_\bw$ as $q\to -1$ 
is completely determined by the 
first few coefficients of its ``low temperature'' 
$q$-expansion. For a complete
$3$-fold $X$, a similar property is implied by the 
conjectural rationality of the reduced 
partition function $Z'_{DT}$. 


\subsubsection{}
Recall that on the Gromov-Witten side, the observables 
$\ch_k(\cI)$ are supposed to correspond to descendent 
invariants. While working out an exact match, especially 
in the equivariant theory, remains an open problem 
(see the discussion in \cite{mnop}), there is one case 
that we understand well. 

Let $X=\Pl\times \C^2$ and let $\beta$ be $d$ times the 
class of $\Pl\times\{0\}$. Let $\C^*$ act on $\C^2$ with 
opposite weights. The $\C^*$-equivariant 
Gromov-Witten theory of $X$ is the Gromov-Witten 
of $\Pl$ with additional insertion of two 
Chern polynomials of the Hodge bundle. Because
of our choice of weights and Mumford's relation, 
these Chern polynomials cancel out, leaving 
us with the Gromov-Witten theory of $\Pl$. 

A complete description of the Gromov-Witten
theory of $\Pl$ was obtained in \cite{OP2,OP3,OP4}. 
In particular, we have the following formula
for disconnected, degree $d$ descendent 
invariants of the point class 
%
\begin{equation}
  \label{P1}
  \lan \prod \tau_{k_i}(pt) \ran_d^{\Pl} = 
\sum_{|\lambda|=d} \left(\frac{\dim \lambda}{d!}\right)^2 \, 
\prod_i\frac{\bp_{k_i+1}(\lambda)}{(k_i+1)!} \,,
\end{equation}
%
where the summation is over partitions $\lambda$ of $d$, 
$\dim \lambda$ is the dimension of the corresponding 
representation of the symmetric group, and $\bp_k$ is 
the following polynomial of $\lambda$
%
\begin{align*}
  \label{bpk}
  \bp_k(\lambda) & \,=\sum_i \left[ (\lambda_i -i + \tfrac12)^k -
(-i + \tfrac12)^k\right] + (1-2^{-k}) \zeta(-k) \\
&\textup{``=''} \sum_i (\lambda_i -i + \tfrac12)^k\,. 
\end{align*}
%
Here the first line is the $\zeta$-regularization of the 
divergent sum in the second line. The weight function 
in \eqref{P1} is known as the \emph{Plancherel measure} 
on partitions of $d$. 

Sums of the form \eqref{P1} are distinguished 
discrete analogs of 
matrix integrals mentioned at the very beginning 
of the lecture, see e.g.\ the discussion in \cite{uses}. 

What happens on the Donaldson-Thomas side is that with 
our choice of torus weights the contribution of most 
$\bT$-fixed points to the localization formula 
vanishes. The only remaining ones are of the 
form seen in Figure \ref{f6}, they are pure edges, that is, 
cylinders over
an ordinary partition $\lambda$. 

\begin{figure}[hbtp]
  \begin{center}
   \scalebox{0.5}{\includegraphics{p1_c2.ps}} 
      \caption{A pure edge}\label{f6}
     \end{center}
\end{figure}

Sure enough, the localization weight of such a pure edge 
in this case specializes to the Plancherel weight of 
its cross-section $\lambda$. Also, the restrictions of $\ch_k(\cI)$ 
to such a fixed point has a simple linear relation to 
the numbers $\bp_k(\lambda)$. 

It was noticed by several people, in particular in \cite{LQW,LMN}, 
that the sum \eqref{P1} is closely related to localization 
expressions in the classical cohomology of the Hilbert 
scheme of $d$ points in $\C^2$. Perhaps the best 
explanation for this relation is that it is a specialization 
of the triangle of equivalences in 
Figure \ref{f7}, see \cite{OP6}. 

%
\begin{figure}[hbtp]\psset{unit=0.5 cm}
  \begin{center}
    \begin{pspicture}(-6,-2)(10,6)%\showgrid
    \psline(0,0)(2,3.464)(4,0)(0,0) 
    \rput[rt](0,0){
        \begin{minipage}[t]{3.64 cm}
          \begin{center}
            Gromov-Witten \\ theory of $\Pl \times \C^2$
          \end{center}
        \end{minipage}}
    \rput[lt](4,0){
        \begin{minipage}[t]{3.64 cm}
          \begin{center}
             Donaldson-Thomas\\ theory of $\Pl \times \C^2$
          \end{center}
        \end{minipage}}
    \rput[cb](2,4.7){
        \begin{minipage}[t]{4 cm}
          \begin{center}
           Quantum cohomology \\ of $\Hilb_d(\C^2)$
          \end{center}
        \end{minipage}}
    \end{pspicture}
    \caption{Three points of view on curves in $\Pl \times \C^2$}
\label{f7}
  \end{center}
\end{figure}
%

\begin{thebibliography}{99}

\bibitem{topver} M. Aganagic, A. Klemm, M. Marino, C. Vafa, {\em The topological vertex},
hep-th/0305132.


\bibitem{AtBo} M.\ Atiyah and R.\ Bott, {\em The moment map
and equivariant cohomology}, Topology {\bf 23} (1984), 1-28.


\bibitem{Beh} K.~Behrend, {\em Gromov-Witten invariants in algebraic geometry}, Invent. Math.
{\bf 127} (1997), 601--617.

\bibitem{BehFan} K.~Behrend and B.~Fantechi,
{\em The intrinsic normal cone}, Invent.\ Math.\
{\bf 128} (1997), 45--88.

\bibitem{BO}
S.~Bloch and A.~Okounkov,
\emph{The Character of the Infinite Wedge Representation},
Adv.\ Math.\ \textbf{149} (2000), no.~1, 1--60. 


\bibitem{jbrp} J.~Bryan and R.~Pandharipande, 
\emph{The local Gromov-Witten theory of curves}, math.AG/0411037.

\bibitem{CKen}
R.~Cerf and R.~Kenyon,
\emph{The low-temperature expansion of the Wulff crystal in the three-dimensional
Ising model}, 
Comm. Math. Phys {\bf 222} (2001),147-179.

\bibitem{CK}
D.~Cox and S.~Katz,
\emph{Mirror symmetry and algebraic geometry}, 
American Mathematical Society, Providence, RI, 1999.

\bibitem{DonThom} S. Donaldson and R. Thomas, {\em Gauge theory in higher dimensions}, in
{\em The geometric universe: science, geometry, and the work of Roger Penrose}, S. Huggett et.
al eds., Oxford Univ. Press, 1998.


\bibitem{ES}
G.~Ellingsrud, S.~Str\o mme, 
\emph{Bott's formula and enumerative geometry}.
  J.~Amer.\ Math.\ Soc.\  \textbf{9}  (1996),  no. 1, 175--193. 

\bibitem{FabPan}  C. Faber and R. Pandharipande,
\emph{Hodge integrals and Gromov-Witten theory}, Invent.\ Math.\
{\bf 139} (2000), 173-199.


\bibitem{fp}
W.~Fulton and R.~Pandharipande, 
{\em Notes on stable maps and quantum cohomology}, 
Algebraic geometry---Santa Cruz 1995,  45--96, 
Proc.\ Sympos.\ Pure Math., 62, Part 2, AMS, Providence, RI, 1997.


\bibitem{GP}
T.~Graber and R.~Pandharipande, 
{\em Localization
of virtual classes}, Invent.\ Math.\ {\bf 135} (1999), 487--518.



\bibitem{HorV}
 K.~Hori and C.~Vafa, 
\emph{Mirror Symmetry}, hep-th/0002222. 

\bibitem{IK}
A.~Iqbal and A.-K.~Kashani-Poor, 
\emph{{\rm SU(N)} Geometries and Topological String Amplitudes}, 
hep-th/0306032. 



\bibitem{INOV} A.~Iqbal, N.~Nekrasov, A.~Okounkov, C.~Vafa,
 \emph{Quantum Foam and Topological Strings}, hep-th/0312022.  

\bibitem{KKV}
S.~Katz, A.~Klemm, C.~Vafa, 
\emph{Geometric engineering of quantum field theories},
 Nuclear Phys.~B  \textbf{497}  (1997),  no. 1-2, 173--195.


 \bibitem{KO}
R.~Kenyon, A.~Okounkov,
\emph{Limit shapes and complex Burgers equation}, in preparation. 

\bibitem{KOS}
R.~Kenyon, A.~Okounkov, S.~Sheffield,
\emph{Dimers and Amoebae}, math-ph/0311005. 


\bibitem{KOV}
R.~Kenyon, A.~Okounkov, C.~Vafa, 
in preparation. 

\bibitem{KerO}
S.~Kerov and G.~Olshanski,
\emph{Polynomial functions on the set of Young diagrams},
C.~R.~Acad.\ Sci.\
Paris S\'er.~I Math., \textbf{319}, no.~2, 1994, 121--126.

\bibitem{Kon1}  M.\ Kontsevich, {\em Intersection theory on the moduli
space of curves and the matrix Airy function}, Comm.\ Math.\ Phys.
{\bf 147} (1992), 1-23.

\bibitem{Kon2}
M.\ Kontsevich,
\emph{Enumeration of rational curves via torus actions},
The moduli space of curves (Texel Island, 1994),  
335--368, Progr.\ Math., 129, Birkh�user Boston, Boston, MA, 1995.


\bibitem{LQW}
 W.-P.~Li, Zh.~Qin, W.~Wang,
\emph{Hilbert schemes, integrable hierarchies, and Gromov-Witten theory},
math.AG/0302211. 

\bibitem{LLLZ}
 J.~Li, C.-C.~Liu, K.~Liu, J.~Zhou\,,
\emph{A Mathematical Theory of the Topological Vertex}, 
math.AG/0408426. 

\bibitem{LiTian} J.~Li and G.~Tian, 
{\em Virtual moduli cycles and Gromov-Witten invariants
of algebraic varieties}, 
JAMS {\bf 11} (1998), 119--174.

\bibitem{LLZ1}
C.-C.~Liu, K.~Liu, J.~Zhou\,,
\emph{A Proof of a Conjecture of Marino-Vafa on Hodge Integrals},
math.AG/0306434. 

\bibitem{LLZ2}
C.-C.~Liu, K.~Liu, J.~Zhou\,,
\emph{A Formula of Two-Partition Hodge Integrals}, 
math.AG/0310272. 



\bibitem{LMN}
A.~Losev, A.~Marshakov, N.~Nekrasov,
\emph{Small Instantons, Little Strings and Free Fermions},
hep-th/0302191. 

\bibitem{mnop} D.~Maulik, N.~Nekrasov, A.~Okounkov, and R.~Pandharipande, {\em Gromov-Witten
theory and Donaldson-Thomas theory, I and II}, math.AG/0312059,
math.AG/0406092. 


\bibitem{Mir}
M.~Mirzakhani, 
\emph{Weil-Petersson volumes and intersection theory on the 
moduli spaces of curves}, available from \texttt{
http://abel.math.harvard.edu/$\sim$mirzak/}. 

\bibitem{NY}
H.~Nakajima, K.~Yoshioka,
\emph{Instanton counting on blowup, I}, math.AG/0306198. 

\bibitem{N}
N.~Nekrasov, 
\emph{Seiberg-Witten Prepotential From Instanton Counting},
hep-th/0206161. 

\bibitem{NO}
N.~Nekrasov and A.~Okounkov,
\emph{Seiberg-Witten Theory and Random Partitions},
hep-th/0306238. 


\bibitem{uses}
A.~Okounkov, 
\emph{The uses of random partitions}, 
math-ph/0309015. 

\bibitem{OP1}
A.~Okounkov and R.~Pandharipande,
\emph{Gromov-Witten theory, Hurwitz numbers, and
matrix models, I}, math.AG/0101147.

\bibitem{OP2}
A.~Okounkov and R.~Pandharipande,
\emph{Gromov-Witten theory, Hurwitz theory, and completed cycles},
math.AG/0204305.


\bibitem{OP3}
A.~Okounkov and R.~Pandharipande,
\emph{The equivariant Gromov-Witten theory of $\Pl$},
math.AG/0207233.

\bibitem{OP4}
A.~Okounkov and R.~Pandharipande,
\emph{Virasoro constraints for target curves},
math.AG/0308097.

\bibitem{OP5}
A.~Okounkov and R.~Pandharipande,
\emph{Hodge integrals and invariants of the unknot}, 
Geom.\ Topol.\ \textbf{8}(2004), 675-699. 

\bibitem{OP6}
A.~Okounkov and R.~Pandharipande,
\emph{Quantum cohomology of the Hilbert scheme of points in the plane},
math.AG/0411210. 


\bibitem{GWDT} 
A.~Okounkov and R.~Pandharipande, 
\emph{Gromov-Witten/Donaldson-Thomas correspondence for 
local curves}, in preparation. 


\bibitem{ORV} A. Okounkov, N. Reshetikhin, and C. Vafa, 
{\em Quantum Calabi-Yau and
classical crystals}, hep-th/0310061.


\bibitem{Thom} R.~Thomas, 
{\em A holomorphic Casson invariant for Calabi-Yau
3-folds, and bundles on K3 fibrations}, JDG {\bf 54} (2000), 367--438.

\bibitem{W} E.\ Witten, {\em Two dimensional gravity and intersection
theory on moduli space}, Surveys in Diff.\ Geom.\ {\bf 1} (1991), 243-310.


\end{thebibliography}



\end{document}
% LocalWords:  Maulik Nekrasov Reshetikhin Vafa subvarieties reparameterization
% LocalWords:  codimension compactification mapP Kontsevich cohomology HilbF GW
% LocalWords:  holomorphic Grothendieck Grassmannian Deligne Serre vdGW vdH vir
% LocalWords:  Poincar unneth DT GWi DTi iu toric equivariant descendent Chern
% LocalWords:  proven lightgray fillstyle linewidth fillcolor linecolor xy dnH
% LocalWords:  nonreduced polytope vertices fugacity Vpi Calabi Yau subtorus dx
% LocalWords:  McM counterterms Schur limshape ps Ronkin str Hori gauge Seiberg
% LocalWords:  supersymmetric instanton prepotential noncompact threefolds DTMc
% LocalWords:  dq asymptotics Plancherel lt cb Aganagic Klemm Atiyah Bott Wulff
% LocalWords:  Behrend Fantechi Ising Penrose Huggett al Ellingsrud mme Bott's
% LocalWords:  Proc Sympos Graber SU ph Kerov Olshanski er Texel Progr Zh Qin
% LocalWords:  Birkh�user Liu Zhou Tian Losev Marshakov Instantons Mirzakhani
% LocalWords:  Weil Petersson mirzak Nakajima Yoshioka Virasoro unknot Topol
% LocalWords:  Casson fibrations JDG ECM

These are notes from my lecture at 4ECM in Stockholm (June 2004). 

multido.tex
%% BEGIN multido.tex
%%
\def\fileversion{1.4}
\def\filedate{93/01/14}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN
%% archives in directory macros/latex/base/lppl.txt.
%%
%% DESCRIPTION:
%%   multido.tex/multido.sty contains a loop macro, \multido, that supports
%%   fixed-point addition and has a nice interface. Among other things, it
%%   is useful for pictures and putting numbers on axes. multido.tex
%%   is compatible with most TeX macro packages, including Plain TeX, LaTeX,
%%   AmSTeX, and Ams-LaTeX.
%%
%% INSTALLATION:
%%   Put this file where your TeX looks for inputs, under the name multido.tex.
%%   Use the file multido.sty with LaTeX.
%%
%% DOCUMENTATION:
%%   See multido.doc.
%%
%% COPYING:
%%   Copying of part or all of this file is allowed under the following
%%   conditions only:
%%   (1) You may freely distribute unchanged copies of the file. Please
%%       include the documentation when you do so.
%%   (2) You may modify a renamed copy of the file, but only for personal
%%       use or use within an organization.
%%   (3) You may copy fragments from the file, for personal use or for
%%       distribution, as long as credit is given where credit is due.
%%
%%   You are NOT ALLOWED to take money for the distribution or use of
%%   this file or modified versions or fragments thereof, except for
%%   a nominal charge for copying etc.
%%
%% CODE:
% These macros use TeX primitives, plus the Plain TeX commands:
%   \dimen@, \dimen@i, \count@, \newcount, \newtoks, \@ne, \tw@, \@z@.
%
% Check if file is loaded, announce file on terminal, and take care of @:
%


\message{ v\fileversion, \filedate\space <tvz>}

\csname MultidoLoaded\endcsname
\let\MultidoLoaded\endinput

\edef\TheAtCode{\the\catcode`\@}
\catcode`\@=11

% These are some useful hacks. "\multido@dimtonum" strips the value of "#1",
% a dimension register, of the "pt", and assigns the result to "#2",
% a command sequence.

\def\@empty{}
\def\@nnil{\@nil}
\def\multido@dimtonum#1#2{\edef#2{\multido@@dimtonum#1}}
\def\multido@@dimtonum#1{\expandafter\multido@@@dimtonum\the#1}
\edef\next{%
  \noexpand\def\noexpand\multido@@@dimtonum##1\string p\string t{##1}}
\next

% "\multido@count" stores the number of repetitions. "\multidocount" keeps
% track of the iteration. These are also used locally as scratch counters
% by "\FPadd@". "\multido@stuff" is used to store the <stuff> that is
% to be repeated.

\newcount\multido@count
\newcount\multidocount
\newtoks\multido@stuff

\def\multido{\multido@{}{\begingroup}{\endgroup}}
\def\mmultido{\multido@{\multido@stepvar}{\begingroup}{\endgroup}}
\def\Multido{\multido@{}{}{}}
\def\MMultido{\multido@{\multido@stepvar}{}{}}

% "\multido@initvar" processes the variable declarations, initializing
% the value of the variables and defining "\multido@stepvar" to increment
% the variables with each repetition. "\multido@count" is set to the number
% of repetitions.

\long\def\multido@#1#2#3#4#5#6{%
  #2%
    \multido@count=#5\relax
    \ifnum\multido@count=\z@\else\multido@@{#1}{#4}{#6}\fi
  #3%
  \ignorespaces}
\def\multido@@#1#2#3{%
  \def\multido@stepvar{}%
  \def\do{\noexpand\do\noexpand}%
  \multido@initvar#2,\@nil,%
  \let\do\noexpand
  \edef\multido@stepvar{\multido@stepvar}%
  \ifnum\multido@count<\z@\multido@count=-\multido@count\fi
  \multidocount=1\relax
  #1%
  \multido@stuff{#3}%
  \multido@loop}
\def\multido@loop{%
  \the\multido@stuff
  \ifnum\multidocount<\multido@count
    \advance\multidocount\@ne
    \multido@stepvar
    \expandafter\multido@loop
  \fi}
\def\multidostop{\multidocount=\multido@count}
\def\multido@badvar{%
  \multido@count=0
  \errhelp{\multido command will be skipped.}%
  \errmessage{Bad \string\multido\space variable declaration}}
\def\multido@initvar#1,{%
  \def\multido@temp{#1}%
  \ifx\multido@temp\@nnil\else
    \ifx\multido@temp\@empty\else
      \multido@@initvar#1\@nil=+\@nil\relax
    \fi
    \expandafter\multido@initvar
  \fi}
\def\multido@@initvar#1=#2+#3\@nil#4\relax{%
  \ifx\@empty#4\@empty
    \multido@badvar
  \else
    \multido@vartype#1\@empty
    \ifx\multido@temp\relax
      \multido@badvar
    \else
      \multido@temp{#2}{#3}#1%
    \fi
  \fi}
\def\multido@vartype#1{%
  \ifcat\noexpand\@nil\noexpand#1%
     \expandafter\multido@@vartype\string#1\@nil
  \else
    \let\multido@temp\relax
  \fi}
\def\multido@@vartype#1#2#3\@nil{%
  \expandafter\let\expandafter\multido@temp
    \csname multido@init@#2\endcsname}
\def\MultidoCheckNames{%
  \let\multido@@@vartype\multido@vartype
  \def\multido@vartype##1{%
    \ifx\undefined##1%
      \multido@@@vartype{##1}%
    \else
      \errhelp{\multido command will be skipped.}%
      \errmessage{Multido variable \string##1 already defined}%
      \let\multido@temp\relax
    \fi}}

% For each variable type, we must now define \multido@init<vartype>.
% The syntax of these macros is:
%
%   \multido@init@<vartype>{initial value}{increment}{variable}
%
% and the outcome should be:
%
% 1. Set <variable> to the initial value.
% 2. Invoke \multido@addtostep{step stuff}, where <step stuff> is
% whatever should be done to increment the variable. <step stuff> is
% expanded first, with expansion suppressed by "\do".

\def\multido@addtostep#1{\edef\multido@stepvar{\multido@stepvar#1}}

% Variable type for dimensions ("d", "D"):

\def\multido@init@d#1#2#3{%
  \expandafter\ifx\csname pssetlength\endcsname\relax
    \dimen@=#1\relax\dimen@i=#2\relax
  \else
    \pssetlength\dimen@{#1}\pssetlength\dimen@i{#2}%
  \fi
  \edef#3{\number\dimen@ sp}%
  \ifnum\multido@count<\z@\dimen@i=-\dimen@i\fi
  \multido@addtostep{\do\multido@step@d{\do#3}{\number\dimen@i sp}}}
\def\multido@step@d#1#2{%
  \dimen@=#1\advance\dimen@#2
  \edef#1{\number\dimen@ sp}}%
\def\multido@init@D{\multido@init@d}

% Variable type for integers ("i", "I"):

\def\multido@init@i#1#2#3{%
  \count@=#1\relax
  \edef#3{\the\count@}%
  \count@=#2\relax
  \ifnum\multido@count<\z@\count@=-\count@\fi
  \multido@addtostep{\do\multido@step@i{\do#3}{\the\count@}}}
\def\multido@step@i#1#2{%
  \count@=#1\advance\count@ by #2
  \edef#1{\the\count@}}
\def\multido@init@I{\multido@init@i}

% Variable type for reals ("r", "R").

\def\multido@init@r#1#2#3{%
  \dimen@=#1pt
  \multido@dimtonum\dimen@#3%
  \dimen@=#2pt
  \ifnum\multido@count<\z@\dimen@=-\dimen@\fi
  \multido@addtostep{\do\multido@step@r{\do#3}{\number\dimen@ sp}}}
\def\multido@step@r#1#2{%
  \dimen@=#1pt\advance\dimen@#2
  \multido@dimtonum\dimen@#1}
\def\multido@init@R{\multido@init@r}

% Variable type for numbers ("n", "N").

\def\multido@init@n#1#2#3{%
  \edef#3{#1}%
  \ifnum\multido@count<\z@\expandafter\FPsub\else\expandafter\FPadd\fi
  {0}{#2}\multido@temp
  \multido@addtostep{\do\FPadd{\do#3}{\multido@temp}{\do#3}}}
\def\multido@init@N{\multido@init@n}

% Simple fixed-point addition couldn't be harder.
% "\dimen@" and "\dimen@i" are used as scratch {\em counters} (to avoid
% creating a new counter). "\count@", "\multido@count" and "\multidocount"
% are also used as scratch counters.

% This is probably pretty close to optimal, given the requirements that
% leading and trailing spaces be OK in the arguments, and that there need
% not be any numbers to the left of the decimal.

\def\FPadd#1#2#3{%
  \edef\multido@temp{#1..\noexpand\@nil#2}%
  \expandafter\FPadd@\multido@temp..\@nil
  \let#3\multido@temp}
\def\FPsub#1#2{%
  \edef\multido@temp{\noexpand\FPsub@#2\noexpand\@empty}%
  \FPadd{#1}{\multido@temp}}
\def\FPsub@#1{\ifx-#1\else-#1\fi}
\def\FPadd@#1.#2.#3\@nil#4.#5.#6\@nil{%
  \begingroup
    \def\multido@temp{\let\next\relax}%
    \let\next\z@
    \afterassignment\multido@temp\count@=#1\next
    \dimen@i=0#2sp\relax
    \let\next\z@
    \afterassignment\multido@temp\multido@count=#4\next
    \multidocount=0#5\relax
    \dimen@=\number\count@ sp
    \count@=\@ne
    \FPadd@@@#500000000\@nil
    \ifnum#11<\z@
      \count@=-\tw@
      \dimen@=-\dimen@
    \fi
    \ifnum#41<\z@
      \count@=-\count@
      \multido@count=-\multido@count
    \fi
    \ifnum\count@>\z@
      \advance\multido@count\dimen@
      \advance\multidocount\dimen@i
      \ifnum\multidocount<\multido@temp\relax
        \advance\multidocount\multido@temp\relax
      \else
        \advance\multido@count\@ne
      \fi
      \advance\count@-3
    \else
      \advance\multido@count-\dimen@
      \advance\multidocount-\dimen@i
      \ifnum\multido@count<\z@
        \multido@count=-\multido@count
        \multidocount=-\multidocount
        \advance\count@\@ne
      \else
        \ifnum\multido@count=\z@
          \ifnum\multidocount<\z@
            \multidocount=-\multidocount
            \advance\count@\@ne
          \fi
        \fi
      \fi
      \ifnum\multidocount<\z@
        \advance\multidocount\multido@temp
        \advance\multido@count-\@ne
      \fi
      \advance\multidocount\multido@temp\relax
    \fi
    \expandafter\FPadd@@\the\multidocount\@empty\@nil
  \endgroup}
\def\FPadd@@#1#2#3\@nil{\xdef\multido@temp{%
  \ifnum\count@=-1-\fi
  \the\multido@count\ifx#2\@empty\else.#2#3\fi}}
\def\FPadd@@@#1#2#3#4#5#6#7#8#9\@nil{\def\multido@temp{1#9}}

\catcode`\@=\TheAtCode\relax

\endinput
%%
%% END multido.tex

pst-node.tex
%% BEGIN pst-node.tex
%%
%% Nodes with PSTricks 97.
%% See the betadoc documentation for usage. 
%% This uses the header file `pst-node.pro'.
%%
\def\fileversion{97 patch 9}
\def\filedate{1999/04/14}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN
%% archives in directory macros/latex/base/lppl.txt.
%%
\message{ v\fileversion, \filedate}
\csname PSTnodesLoaded\endcsname
\let\PSTnodesLoaded\endinput
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi\relax
\edef\TheAtCode{\the\catcode`\@}
\catcode`\@=11
\pstheader{pst-node.pro}
\def\pst@nodedict{tx@NodeDict begin }
\def\pst@zapspace#1 #2{%
#1%
\ifx#2\@empty\else\expandafter\pst@zapspace\fi
#2}
\def\pst@getnode#1#2{%
\pst@expandafter\pst@@getnode{#1},,\@nil#2}
\def\pst@@getnode#1,#2,#3\@nil#4{%
\ifx\@empty#3\@empty
\edef#4{/N@\pst@zapspace#1 \@empty\space}%
\else
\pst@cntg=#1\relax
\pst@cnth=#2\relax
\edef#4{/N@M-\ifnum\psmatrixcnt=\z@ 1\else\the\psmatrixcnt\fi
-\the\pst@cntg-\the\pst@cnth\space}%
\fi}
\def\tx@NewNode{NewNode }
\def\pst@newnode#1#2#3#4{%
\leavevmode
\pst@getnode{#1}\pst@thenode
\pst@Verb{%
\pst@nodedict
{#3}
\ifx\psk@name\relax false \else \psk@name true \fi
\pst@thenode
#2
{#4}
\tx@NewNode
end}%
\global\let\psk@name\relax
\pstree@nodehook
\global\let\pstree@nodehook\relax}
\let\pstree@nodehook\relax
\newif\ifnodealign
\def\psset@nodealign#1{\@nameuse{nodealign#1}}
\psset@nodealign{false}
\def\pst@nodealign{%
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg-\dp\pst@hbox
\divide\pst@dimg2
\lower\pst@dimg}
\def\tx@InitPnode{InitPnode }
\def\pnode{\@ifnextchar({\pnode@}{\pnode@(0,0)}}
\def\pnode@(#1)#2{%
\pst@@getcoor{#1}%
\pst@newnode{#2}{10}{\pst@coor}{\tx@InitPnode}%
\ignorespaces}
\def\tx@InitCnode{InitCnode }
\def\cnode{\pst@object{cnode}}
\def\cnode@i{\@ifnextchar({\cnode@ii}{\cnode@ii(0,0)}}
\def\cnode@ii(#1)#2#3{%
\leavevmode
\hbox{%
\use@par
\pst@@getcoor{#1}%
\pssetlength\pst@dimc{#2}%
\pst@dimg=\psk@dimen\pslinewidth
\advance\pst@dimc-\pst@dimg
\advance\pst@dimc.5\pslinewidth
\ifnodealign
\kern\pst@dimc
\vrule width\z@ height \pst@dimc depth \pst@dimc
\fi
\pscircle@do(#1){#2}%
\pst@newnode{#3}{11}{\pst@coor \pst@number\pst@dimc}{\tx@InitCnode}%
% DG/SR modification begin - Jul. 30, 1997 - Patch 2
%\ifnodealign \kern\pst@dimc\egroup \fi}%
\ifnodealign\kern\pst@dimc\fi}%
% DG/SR modification end
\ignorespaces}
\def\Cnode{\pst@object{Cnode}}
\def\Cnode@i{\@ifnextchar({\Cnode@ii}{\Cnode@ii(0,0)}}
\def\Cnode@ii(#1)#2{\cnode@ii(#1){\psk@radius}{#2}}%
\def\cnodeput{\pst@object{cnodeput}}
\def\cnodeput@i{\@ifnextchar({\cnodeput@iii}{\cnodeput@ii}}
\def\cnodeput@ii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\cnodeput@iii}{\cnodeput@iii(\z@,\z@)}}
\def\cnodeput@iii(#1)#2{%
\pst@killglue
\@fixedradiusfalse
\def\pst@nodehook{\cnodeput@iv{#2}}%
\pst@makebox{\cput@v{#1}}}
\def\cnodeput@iv#1{%
\pst@newnode{#1}{11}{\pscirclebox@iv \pst@number\pslinewidth add}%
{\tx@InitCnode}%
\global\let\pst@nodehook\relax}
\def\Cnodeput{\pst@object{Cnodeput}}
\def\Cnodeput@i{\@ifnextchar({\Cnodeput@iii}{\Cnodeput@ii}}
\def\Cnodeput@ii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\Cnodeput@iii}{\Cnodeput@iii(\z@,\z@)}}
\def\Cnodeput@iii(#1)#2{%
\pst@killglue
\@fixedradiustrue
\def\pst@nodehook{\Cnodeput@iv{#2}}%
\pst@makebox{\cput@iv{#1}}}
\def\Cnodeput@iv#1{%
\pst@newnode{#1}{11}{%
\pst@number{\wd\pst@hbox} 2 div \pst@number\pst@dima % x y
\pst@number\pst@dimb \pst@number\pslinewidth \psk@dimen .5 sub mul sub }% r
{\tx@InitCnode}%
\global\let\pst@nodehook\relax}
\def\circlenode{\pst@object{circlenode}}
\def\circlenode@i#1{\pst@makebox{\circlenode@ii{#1}}}
\def\circlenode@ii#1{%
\begingroup
\pst@useboxpar
\setbox\pst@hbox=\hbox{%
\cnodeput@iv{#1}%
\pscirclebox@iii
\box\pst@hbox}%
\ifnodealign \psboxseptrue \fi
\ifpsboxsep \pscirclebox@sep \fi
\leavevmode
\ifnodealign\pst@nodealign\fi
\box\pst@hbox
\endgroup}
\def\Circlenode{\pst@object{Circlenode}}
\def\Circlenode@i#1{\pst@makebox{\Circlenode@ii{#1}}}
\def\Circlenode@ii#1{%
\begingroup
\pst@useboxpar
\pst@dima=\ht\pst@hbox
\advance\pst@dima\dp\pst@hbox
\divide\pst@dima\tw@
\pssetlength\pst@dimb\psk@radius
\setbox\pst@hbox=\hbox{%
\Cnodeput@iv{#1}%
\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
\box\pst@hbox}%
\ifnodealign \psboxseptrue \fi
\ifpsboxsep \psCirclebox@sep \fi
\leavevmode
\ifnodealign\pst@nodealign\fi
\box\pst@hbox
\endgroup}
\def\tx@GetRnodePos{GetRnodePos }
\def\tx@InitRnode{InitRnode }
\def\rnode{\@ifnextchar[{\rnode@i}{\def\pst@par{}\rnode@ii}}
\def\rnode@i[#1]{\def\pst@par{ref=#1}\rnode@ii}
\def\rnode@ii#1{\pst@makebox{\rnode@iii\rnode@iv{#1}}}
\def\rnode@iii#1#2{%
% DG modification begin - Jan. 1997
\leavevmode
% DG modification end
\begingroup
% DG/SR modification begin - Apr. 28, 1998 - Patch 6
\pst@useboxpar
% DG/SR modification end
#1%
\if@star\pst@starbox\fi
\ifnodealign\lower\pst@dimb\fi
\hbox{%
\pst@newnode{#2}{16}{%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\pst@number{\wd\pst@hbox}%
\pst@number\pst@dima
\pst@number\pst@dimb}%
{\tx@InitRnode}%
\box\pst@hbox}%
\endgroup}
\def\rnode@iv{%
\pst@dima=\psk@xref\wd\pst@hbox
\ifx\psk@yref\relax
\pst@dimb=\z@
\else
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\dp\pst@hbox
\pst@dimb=\psk@yref\pst@dimb
\advance\pst@dimb-\dp\pst@hbox
\fi}
\def\psset@href#1{\pst@checknum{#1}\psk@href}
\psset@href{0}
\def\psset@vref#1{\def\psk@vref{#1}}
\psset@vref{.7ex}
\def\Rnode{\pst@object{Rnode}}
\def\Rnode@i#1{\pst@makebox{\rnode@iii\Rnode@ii{#1}}}
\def\Rnode@ii{%
% DG modification begin - Jan. 1997
%   - \begingroup removed  as it seems to doesn't work any more
%   - \Rnode doesn't process the optional parameter changes
%\begingroup
\use@par
% DG modification end
\pst@dima=\psk@href\wd\pst@hbox
\advance\pst@dima\wd\pst@hbox
\divide\pst@dima 2
\pssetlength\pst@dimb{\psk@vref}}
\def\tx@DiaNodePos{DiaNodePos }
\def\dianode{\pst@object{dianode}}
\def\dianode@i#1{\pst@makebox{\dianode@ii{#1}}}
\def\dianode@ii#1{%
\begingroup
\pst@useboxpar
\psdiabox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
/X \pst@number\pst@dima def
/Y \pst@number\pst@dimb def
/w \pst@number\pst@dimc 2 mul def
/h \pst@number\pst@dimd 2 mul def
/NodePos { \tx@DiaNodePos } def}%
\box\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\psdiabox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@dimb\fi
\box\pst@hbox
\endgroup}
\def\tx@TriNodePos{TriNodePos }
\def\tx@InitTriNode{InitTriNode }
\def\trinode{\pst@object{trinode}}
\def\trinode@i#1{\pst@makebox{\trinode@ii{#1}}}
\def\trinode@ii#1{%
\begingroup
\pst@useboxpar
\pstribox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
\pst@number\pst@dimc
\pst@number\pst@dimd
\ifodd\psk@trimode
exch
\pst@number\pst@dima
\else
\pst@number\pst@dimb
\fi
\psk@trimode
\pst@number{\wd\pst@hbox}%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\tx@InitTriNode}%
\box\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\pstribox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@tempa\fi
\box\pst@hbox
\endgroup}
\def\tx@OvalNodePos{OvalNodePos }
\def\ovalnode{\pst@object{ovalnode}}
\def\ovalnode@i#1{\pst@makebox{\ovalnode@ii{#1}}}
\def\ovalnode@ii#1{%
\begingroup
\pst@useboxpar
\psovalbox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
/X \pst@number\pst@dima def
/Y \pst@number\pst@dimb def
/w \pst@number\pst@dimc def
/h \pst@number\pst@dimd def
/NodePos { \tx@OvalNodePos } def}%
\unhbox\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\psovalbox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@dimb\fi
\box\pst@hbox
\endgroup}
\def\dotnode{\pst@object{dotnode}}
\def\dotnode@i{\@ifnextchar({\dotnode@ii}{\dotnode@ii(\z@,\z@)}}
\def\dotnode@ii(#1)#2{%
\leavevmode
\hbox{%
\use@par
\pst@@getcoor{#1}%
\pst@getdotsize
\pstree@nodehook
\ifnodealign
\pst@dima=\pst@dimg
\kern\pst@dima
\vrule width\z@ height \pst@dimh depth \pst@dimh
\fi
\pst@newnode{#2}{14}{}{%
\pst@coor
/Y ED /X ED
/w \pst@number\pst@dimg def
/h \pst@number\pst@dimh def
/NodePos { \tx@OvalNodePos } def}%
\psdot@ii(#1)%
\ifnodealign\kern\pst@dima\fi}%
\ignorespaces}
\def\psset@framesize#1{\pst@expandafter\psset@@framesize{#1} \@nil}
\def\psset@@framesize#1 #2\@nil{%
\pssetlength\pst@dimg{#1}%
\divide\pst@dimg2
\edef\psk@framewidth{\pst@number\pst@dimg}%
\ifx\@empty#2\@empty
\let\psk@frameheight\psk@framewidth
\else
\pssetlength\pst@dimg{#2}%
\divide\pst@dimg2
\edef\psk@frameheight{\pst@number\pst@dimg}%
\fi}
\psset@framesize{10pt}
\def\fnode{\pst@object{fnode}}
\def\fnode@i{\@ifnextchar({\fnode@ii}{\fnode@ii(\z@,\z@)}}
\def\fnode@ii(#1)#2{%
\leavevmode
\pst@killglue
\hbox{%
\use@par
\begin@ClosedObj
\ifnodealign
\kern\psk@framewidth\p@
\vrule width\z@ height \psk@frameheight\p@ depth \psk@frameheight\p@
\edef\pst@coor{0 0 }%
\else
\pst@@getcoor{#1}%
\fi
\pst@newnode{#2}{14}{}{%
\pst@coor
/Y ED /X ED
/d \psk@dimen .5 sub CLW mul neg def
/r \psk@framewidth d add def
/l r neg def
/u \psk@frameheight d add def
/d u neg def
/NodePos { \tx@GetRnodePos } def}%
\addto@pscode{%
/x2 \psk@framewidth CLW \psk@dimen mul sub def
/y2 \psk@frameheight CLW \psk@dimen mul sub def
\pst@coor 2 copy
y2 sub /y1 ED
x2 sub /x1 ED
y2 add /y2 ED
x2 add /x2 ED
\psk@cornersize
1 index 0 eq { pop pop \tx@Rect } { \tx@OvalFrame } ifelse}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj
\ifnodealign\kern\psk@framewidth\p@\fi}%
\ignorespaces}
\def\psset@nodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{0 }}
\def\psset@nodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{0 }}
\def\psset@nodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{0 }%
\def\psk@nodeseptypeB{0 }}
\psset@nodesep{0pt}
\def\psset@XnodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{1 }}
\def\psset@XnodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{1 }}
\def\psset@Xnodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{1 }%
\def\psk@nodeseptypeB{1 }}
\def\psset@YnodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{2 }}
\def\psset@YnodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{2 }}
\def\psset@Ynodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{2 }%
\def\psk@nodeseptypeB{2 }}
\def\psset@armA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{0 }}
\def\psset@armB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{0 }}
\def\psset@arm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{0 }%
\def\psk@armtypeB{0 }}
\psset@arm{10pt}
\def\psset@XarmA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{1 }}
\def\psset@XarmB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{1 }}
\def\psset@Xarm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{1 }%
\def\psk@armtypeB{1 }}
\def\psset@YarmA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{2 }}
\def\psset@YarmB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{2 }}
\def\psset@Yarm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{2 }%
\def\psk@armtypeB{2 }}
\def\psset@offsetA#1{\pst@getlength{#1}\psk@offsetA}
\def\psset@offsetB#1{\pst@getlength{#1}\psk@offsetB}
\def\psset@offset#1{\psset@offsetA{#1}\let\psk@offsetB\psk@offsetA}
\psset@offset{0pt}
\def\psset@angleA#1{\pst@getangle{#1}\psk@angleA}
\def\psset@angleB#1{\pst@getangle{#1}\psk@angleB}%
\def\psset@angle#1{%
\pst@getangle{#1}\psk@angleA
\let\psk@angleB\psk@angleA}
\psset@angle{0}
\def\psset@arcangleA#1{\pst@getangle{#1}\psk@arcangleA}
\def\psset@arcangleB#1{\pst@getangle{#1}\psk@arcangleB}%
\def\psset@arcangle#1{%
\pst@getangle{#1}\psk@arcangleA
\let\psk@arcangleB\psk@arcangleA}
\psset@arcangle{8}
\def\psset@ncurvA#1{\pst@checknum{#1}\psk@ncurvA}
\def\psset@ncurvB#1{\pst@checknum{#1}\psk@ncurvB}%
\def\psset@ncurv#1{\psset@ncurvA{#1}\let\psk@ncurvB\psk@ncurvA}
\psset@ncurv{.67}
\def\tx@GetCenter{GetCenter }
\def\tx@XYPos{XYPos }
\def\tx@GetEdge{GetEdge }
\def\tx@AddOffset{AddOffset }
\def\tx@GetEdgeA{GetEdgeA }
\def\tx@GetEdgeB{GetEdgeB }
\def\tx@GetArmA{GetArmA }
\def\tx@GetArmB{GetArmB }
\def\check@arrow#1#2{%
\check@@arrow#2-\@nil
\if@pst
\addto@par{arrows=#2}%
\def\next{#1}%
\else
\def\next{#1{#2}}%
\fi
\next}
\def\check@@arrow#1-#2\@nil{%
\ifx\@nil#2\@nil\@pstfalse\else\@psttrue\fi}
\def\tx@InitNC{InitNC }
\def\nc@object#1#2#3#4#5{%
\csname begin@#1Obj\endcsname
\showpointsfalse
\pst@getnode{#2}\pst@tempa
\pst@getnode{#3}\pst@tempb
\gdef\npos@default{#4 }%
\addto@pscode{%
/NCLW CLW def
\pst@nodedict
\psk@offsetA
\psk@offsetB neg
\psk@nodesepA
\psk@nodesepB
\psk@nodeseptypeA
\psk@nodeseptypeB
\pst@tempa
\pst@tempb
\tx@InitNC { #5 } if
end}%
\def\use@pscode{%
\pst@Verb{gsave \tx@STV newpath \pst@code\space grestore}%
\gdef\pst@code{}}%
\csname end@#1Obj\endcsname
\pst@shortput}
\def\npos@default{.5 }
\def\pc@object#1{%
\@ifnextchar({\pc@@object#1}{\pst@getarrows{\pc@@object#1}}}
\def\pc@@object#1(#2)(#3){%
\pnode(#2){@@A}\pnode(#3){@@B}%
#1{@@A}{@@B}}
\def\tx@LPutLine{LPutLine }
\def\tx@LPutLines{LPutLines }
\def\tx@BezierMidpoint{BezierMidpoint }
\def\tx@HPosBegin{HPosBegin }
\def\tx@HPosEnd{HPosEnd }
\def\tx@HPutLine{HPutLine }
\def\tx@HPutLines{HPutLines }
\def\tx@VPosBegin{VPosBegin }
\def\tx@VPosEnd{VPosEnd }
\def\tx@VPutLine{VPutLine }
\def\tx@VPutLines{VPutLines }
\def\tx@HPutCurve{HPutCurve }
\def\tx@NCCoor{NCCoor }
\def\tx@NCLine{NCLine }
\def\ncline{\pst@object{ncline}}
\def\ncline@i{\check@arrow{\ncline@ii}}
\def\ncline@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{\tx@NCLine}}
\def\pcline{\pst@object{pcline}}
\def\pcline@i{\pc@object\ncline@ii}
\def\ncLine{\pst@object{ncLine}}
\def\ncLine@i{\check@arrow{\ncLine@ii}}
\def\ncLine@ii#1#2{\nc@object{Open}{#1}{#2}{.5}%
% DG/SR modification begin - Apr. 14, 1999 - Patch 9
%{\tx@NCLine /LPutPos { xB xA yB yA \tx@LPutLine } def}}
{\tx@NCLine /LPutPos { xB yB xA yA \tx@LPutLine } def}}
% DG/SR modification end
\def\tx@NCLines{NCLines }
\def\nclines{\pst@object{nclines}}
\def\nclines@i{\check@arrow\nclines@ii}
\def\nclines@ii#1#2{%
\begingroup
\use@par
\def\pst@aftercoors{\nclines@iii{#1}{#2}}%
\def\pst@coors{}%
\pst@@getcoors}
\def\nclines@iii#1#2{%
\nc@object{Open}{#1}{#2}{.5}{%
tx@Dict begin \psline@iii pop end
mark \pst@coors \tx@NCLines}%
\endgroup
\ignorespaces}
\def\tx@NCCurve{NCCurve }
\def\nccurve{\pst@object{nccurve}}
\def\nccurve@i{\check@arrow{\nccurve@ii}}
\def\nccurve@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
/AngleA \psk@angleA\space def /AngleB \psk@angleB\space def
\psk@ncurvB\space \psk@ncurvA\space
\tx@NCCurve}}
\def\pccurve{\pst@object{pccurve}}
\def\pccurve@i{\pc@object\nccurve@ii}
\def\ncarc{\pst@object{ncarc}}
\def\ncarc@i{\check@arrow{\ncarc@ii}}
\def\ncarc@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
yB yA sub xB xA sub \tx@Atan dup
\psk@arcangleA\space add /AngleA ED
\psk@arcangleB\space sub 180 add /AngleB ED
\psk@ncurvB\space \psk@ncurvA\space
\tx@NCCurve}}
\def\pcarc{\pst@object{pcarc}}
\def\pcarc@i{\pc@object\ncarc@ii}
\def\tx@NCAngles{NCAngles }
\def\ncangles{\pst@object{ncangles}}
\def\ncangles@i{\check@arrow{\ncangles@ii}}
\def\ncangles@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngles}}
\def\ncangles@iii{%
tx@Dict begin \psline@iii pop end
/AngleA \psk@angleA def
/AngleB \psk@angleB def
/ArmA \psk@armA def
/ArmB \psk@armB def
/ArmTypeA \psk@armtypeA def
/ArmTypeB \psk@armtypeB def }
\def\pcangles{\pst@object{pcangles}}
\def\pcangles@i{\pc@object\ncangles@ii}
\def\tx@NCAngle{NCAngle }
\def\ncangle{\pst@object{ncangle}}
\def\ncangle@i{\check@arrow{\ncangle@ii}}
\def\ncangle@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngle}}
\def\pcangle{\pst@object{pcangle}}
\def\pcangle@i{\pc@object\ncangle@ii}
\def\tx@NCBar{NCBar }
\def\ncbar{\pst@object{ncbar}}
\def\ncbar@i{\check@arrow{\ncbar@ii}}
\def\ncbar@ii#1#2{\nc@object{Open}{#1}{#2}{1.5}{%
\ncangles@iii /AngleB \psk@angleA def \tx@NCBar}}
\def\pcbar{\pst@object{pcbar}}
\def\pcbar@i{\pc@object\ncbar@ii}
\def\tx@NCDiag{NCDiag }
\def\ncdiag{\pst@object{ncdiag}}
\def\ncdiag@i{\check@arrow{\ncdiag@ii}}
\def\ncdiag@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCDiag}}
\def\pcdiag{\pst@object{pcdiag}}
\def\pcdiag@i{\pc@object\ncdiag@ii}
\def\tx@NCDiagg{NCDiagg }
\def\ncdiagg{\pst@object{ncdiagg}}
\def\ncdiagg@i{\check@arrow{\ncdiagg@ii}}
\def\ncdiagg@ii#1#2{%
\nc@object{Open}{#1}{#2}{.5}{\ncangles@iii \tx@NCDiagg}}
\def\pcdiagg{\pst@object{pcdiagg}}
\def\pcdiagg@i{\pc@object\ncdiagg@ii}
\def\tx@NCLoop{NCLoop }
\def\psset@loopsize#1{\pst@getlength{#1}\psk@loopsize}
\psset@loopsize{1cm}
\def\ncloop{\pst@object{ncloop}}
\def\ncloop@i{\check@arrow{\ncloop@ii}}
\def\ncloop@ii#1#2{%
\nc@object{Open}{#1}{#2}{2.5}%
{\ncangles@iii /loopsize \psk@loopsize def \tx@NCLoop}}
\def\pcloop{\pst@object{pcloop}}
\def\pcloop@i{\pc@object\ncloop@ii}
\def\tx@NCCircle{NCCircle }
\def\nccircle{\pst@object{nccircle}}
\def\nccircle@i{\check@arrow{\nccircle@ii}}
\def\nccircle@ii#1#2{%
\pssetlength\pst@dima{#2}%
\nc@object{Open}{#1}{#1}{.5}{%
/AngleA \psk@angleA def
/r \pst@number\pst@dima def
\tx@NCCircle \psarc@v end}}
\def\tx@NCBox{NCBox }
\def\ncbox{\pst@object{ncbox}}
\def\ncbox@i{\check@arrow{\ncbox@ii}}
\def\ncbox@ii#1#2{%
\def\pst@linetype{2}%
\nc@object{Closed}{#1}{#2}{.5}{%
tx@Dict begin \psline@iii pop end
\psk@boxheight \psk@boxdepth
\tx@NCBox}}
\def\pcbox{\pst@object{pcbox}}
\def\pcbox@i{\pc@object\ncbox@ii}
\def\tx@NCArcBox{NCArcBox }
\def\psset@boxheight#1{\pst@getlength{#1}\psk@boxheight}
\def\psset@boxdepth#1{\pst@getlength{#1}\psk@boxdepth}
\def\psset@boxsize#1{%
\psset@boxheight{#1}%
\let\psk@boxdepth\psk@boxheight}
\psset@boxsize{.4cm}
\def\ncarcbox{\pst@object{ncarcbox}}
\def\ncarcbox@i{\check@arrow{\ncarcbox@ii}}
\def\ncarcbox@ii#1#2{%
\def\pst@linetype{1}%
\nc@object{Closed}{#1}{#2}{.5}{%
\psk@arcangleA \psk@boxheight \psk@boxdepth \pst@number\pslinearc
\tx@NCArcBox}}
\def\pcarcbox{\pst@object{pcarcbox}}
\def\pcarcbox@i{\pc@object\ncarcbox@ii}
\def\tx@Tfan{Tfan }
% Changed according pst-beta.bug December 3, 1993
% nrot=:<angle> does not work when : is active.
\begingroup
\catcode`\:=13
\gdef\pst@activerot{\def:{\string:}}
\endgroup
\def\psset@nrot#1{%
\begingroup
\pst@activerot
\pst@expandafter{\@ifnextchar:{\psset@@nrot}{\psset@@rot}}{#1}\@nil
\global\let\pst@tempg\psk@rot
\endgroup
\let\psk@nrot\pst@tempg}
\def\psset@@nrot:#1\@nil{%
\psset@@rot#1\@nil
\edef\psk@rot{NAngle \ifx\psk@rot\@empty\else\psk@rot add \fi}}
\psset@nrot{0}
\def\tx@LPutCoor{LPutCoor }
\def\tx@LPut{LPut }
\def\psset@npos#1{%
\def\pst@tempa{#1}%
\ifx\pst@tempa\@empty
\def\psk@npos{\npos@default}%
\else
\pst@checknum{#1}\psk@npos
\fi}
\psset@npos{}
\def\ncput{\pst@object{ncput}}
\def\ncput@i{\pst@killglue\pst@makebox{\ncput@ii}}
\def\ncput@ii{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@nrot\pst@hbox
\ncput@iii
\endgroup
\pst@shortput}
\def\ncput@iii{%
\leavevmode
\hbox{%
\pst@Verb{%
\pst@nodedict
/t \psk@npos def
\tx@LPut
end
\tx@PutBegin}%
\box\pst@hbox
\pst@Verb{\tx@PutEnd}}}
\def\naput{\pst@object{naput}}
\def\naput@i{\pst@killglue\pst@makebox{\naput@ii{NAngle 90 add}}}
\def\naput@ii#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\def\psk@refangle{#1 }%
\let\psk@rot\psk@nrot
\uput@vii
{exch pop add a \tx@PtoC h1 add exch w1 add exch }%
{tx@Dict /NCLW known { NCLW add } if }%
\ncput@iii
\endgroup
\pst@shortput}
\def\nbput{\pst@object{nbput}}
\def\nbput@i{\pst@killglue\pst@makebox{\naput@ii{NAngle 90 sub}}}
\def\psset@tpos#1{%
\pst@checknum{#1}\psk@tpos
\ifdim\psk@tpos \p@<\z@
\def\psk@tpos{.5}%
% DG/SR modification begin - Sep. 23, 1998 - Patch 7
%\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@epha
\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@ehpa
% DG/SR modification end
\else
\ifdim\psk@tpos \p@>\p@
\def\psk@tpos{.5}%
% DG/SR modification begin - Sep. 23, 1998 - Patch 7
%\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@epha
\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@ehpa
% DG/SR modification end
\fi
\fi}
\psset@tpos{.5}
\def\tvput{\pst@object{tvput}}
\def\tvput@i{\pst@makebox{\psput@tput{H}{1}}}
\def\tlput{\pst@object{tlput}}
\def\tlput@i{\pst@makebox{\psput@tput{H}{true}}}
\def\trput{\pst@object{trput}}
\def\trput@i{\pst@makebox{\psput@tput{H}{false}}}
\def\thput{\pst@object{thput}}
\def\thput@i{\pst@makebox{\psput@tput{V}{1}}}
\def\taput{\pst@object{taput}}
\def\taput@i{\pst@makebox{\psput@tput{V}{true}}}
\def\tbput{\pst@object{tbput}}
\def\tbput@i{\pst@makebox{\psput@tput{V}{false}}}
\def\tx@HPutAdjust{HPutAdjust }
\def\tx@VPutAdjust{VPutAdjust }
\def\psput@tput#1#2{%
\begingroup
\use@par
\pst@tputmakesmall
\leavevmode
\hbox{%
\pst@Verb{%
\pst@nodedict
/t \psk@tpos \pst@tposflip def
tx@NodeDict /HPutPos known
{ #1PutPos }
{ CP /Y ED /X ED /NAngle 0 def /NCLW 0 def }
ifelse
/Sin NAngle sin def
/Cos NAngle cos def
/s \pst@number\pslabelsep NCLW add def
/l \pst@number\pst@dima def
/r \pst@number\pst@dimb def
/h \pst@number\pst@dimc def
/d \pst@number\pst@dimd def
% DG/SR modification begin - Sep. 26, 1997 - Patch 4
%\ifnum1=0#2\else
\ifnum1=0#2 \else
% DG/SR modification end
/flag #2 def
\csname tx@#1PutAdjust\endcsname
\fi
\tx@LPutCoor
end
\tx@PutBegin}%
\box\pst@hbox
\pst@Verb{\tx@PutEnd}}%
\endgroup
\pst@shortput}
\def\pst@tposflip{}
\def\pst@tputmakesmall{%
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\pst@dimg=\psk@href\pst@dimg
\pst@dimb\pst@dima
\advance\pst@dima\pst@dimg % leftsize
\advance\pst@dimb-\pst@dimg % rightsize
\pst@dimd=\psk@vref\relax
\pst@dimc=\ht\pst@hbox
\advance\pst@dimc-\pst@dimd % height
\advance\pst@dimd\dp\pst@hbox % depth
\setbox\pst@hbox=\hbox to\z@{%
\kern-\pst@dima\vbox to\z@{\vss\box\pst@hbox\vskip-\pst@dimd}\hss}}
\def\MakeShortNab#1#2{%
  \def\pst@shortput@nab{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \let\pst@tempg\naput
    \else
      \ifx#2\next
        \let\pst@tempg\nbput
      \else
        \ifx\@sptoken\next
          \let\pst@tempg\pst@shortput
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortNab{^}{_}
\def\MakeShortTablr#1#2#3#4{%
  \def\pst@shortput@tablr{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \let\pst@tempg\taput
    \else
      \ifx#2\next
        \let\pst@tempg\tbput
      \else
        \ifx#3\next
          \let\pst@tempg\tlput
        \else
          \ifx#4\next
            \let\pst@tempg\trput
          \else
            \ifx\@sptoken\next
              \let\pst@tempg\pst@shortput
            \fi
          \fi
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortTablr{^}{_}{<}{>}
\def\MakeShortTab#1#2{%
  \def\pst@shortput@tab{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \def\pst@tempg{%
        \@nameuse{%
          t\ifodd\psk@treemode\ifpstreeflip b\else a\fi
          \else\ifpstreeflip r\else l\fi\fi put}}%
    \else
      \ifx#2\next
        \def\pst@tempg{%
          \@nameuse{%
            t\ifodd\psk@treemode\ifpstreeflip a\else b\fi
            \else\ifpstreeflip l\else r\fi\fi put}}%
      \else
        \ifx\@sptoken\next
          \let\pst@tempg\pst@shortput
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortTab{^}{_}
\def\psset@shortput#1{%
\def\pst@tempg{#1}%
\ifx\pst@tempg\@none
\let\pst@shortput\ignorespaces
\else
\@ifundefined{pst@shortput@#1}%
{\@pstrickserr{Bad short put: `#1'}\@ehpa}%
{\edef\pst@shortput{\noexpand\afterassignment\expandafter\noexpand
\csname pst@shortput@#1\endcsname\noexpand\let\noexpand\next}}%
\fi}
\psset@shortput{none}
\def\lput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\lput@i}{\lput@ii}}}
\def\lput@i[#1]{\addto@par{ref=#1}\lput@ii}
\def\lput@ii{\@ifnextchar({\lput@iv}{\lput@iii}}
\def\lput@iii#1{\addto@par{nrot=#1}\@ifnextchar({\lput@iv}{\ncput@i}}
\def\lput@iv(#1){\addto@par{npos=#1}\ncput@i}
\def\mput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\mput@i}{\ncput@i}}}
\def\mput@i[#1]{\addto@par{ref=#1}\ncput@i}
\def\Lput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Lput@ii}{\Lput@i}}}
\def\Lput@i#1{\addto@par{labelsep=#1}\Lput@ii}
\def\Lput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Lput@iv}{\Lput@iii}}
\def\Lput@iii#1{\addto@par{nrot={#1}}\@ifnextchar({\Lput@iv}{\Lput@v}}
\def\Lput@iv(#1){\addto@par{npos=#1}\Lput@v}
\def\Lput@v{\pst@killglue\pst@makebox{\Lput@vi}}
\def\Lput@vi{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\Rput@vi
\pst@makesmall\pst@hbox
\pst@rotate\psk@nrot\pst@hbox
\ncput@iii
\endgroup
\pst@shortput}
\def\Mput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Mput@ii}{\Mput@i}}}
\def\Mput@i#1{\addto@par{labelsep=#1}\Mput@ii}
\def\Mput@ii[#1]{\addto@par{ref={#1}}\Lput@v}
\def\aput@#1{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\aput@i#1}{\aput@ii#1}}}
\def\aput@i#1[#2]{\addto@par{labelsep=#2}\aput@ii#1}
\def\aput@ii#1{\@ifnextchar({\aput@iv#1}{\aput@iii#1}}
\def\aput@iii#1#2{\addto@par{nrot=#2}\@ifnextchar({\aput@iv#1}{#1}}
\def\aput@iv#1(#2){\addto@par{npos=#2}#1}
\def\aput{\aput@\naput@i}
\def\bput{\aput@\nbput@i}
\def\Aput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Aput@i}{\naput@i}}}
\def\Aput@i[#1]{\addto@par{labelsep=#1}\naput@i}
\def\Bput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Bput@i}{\nbput@i}}}
\def\Bput@i[#1]{\addto@par{labelsep=#1}\nbput@i}
\def\node@coor#1;#2\@nil{%
\pst@getnode{#1}\pst@tempg
\edef\pst@coor{%
\pst@nodedict
tx@NodeDict \pst@tempg known
{ \pst@tempg load \tx@GetCenter }
{ 0 0 }
ifelse
end }}
\def\Node@coor[#1]#2;#3\@nil{%
\begingroup
\psset{#1}%
\@ifnextchar\bgroup{\Node@@@coor}{\Node@@coor}#2\@nil
\endgroup
\let\pst@coor\pst@tempg}
\def\Node@@coor#1\@nil{%
\pst@getnode{#1}\pst@tempg
\xdef\pst@tempg{%
\pst@nodedict
tx@NodeDict \pst@tempg known
{ \psk@nodesepA \psk@angleA
\pst@tempg load \psk@nodeseptypeA \tx@GetEdge
\psk@offsetA \psk@angleA \tx@AddOffset
\pst@tempg load \tx@GetCenter
3 -1 roll add 3 1 roll add exch }
{ CP }
ifelse
end }}%
\def\Node@@@coor#1{%
\pst@@getcoor{#1}%
\def\psk@angleA{%
\pst@tempg load \tx@GetCenter \pst@coor
3 -1 roll sub 3 1 roll sub neg \tx@Atan}%
\Node@@coor}
\def\nput{\pst@object{nput}}
\def\nput@i#1#2{\pst@killglue\pst@makebox{\nput@ii{#1}{#2}}}
\def\nput@ii#1#2{%
\begingroup
\use@par
\psset@refangle{#1}%
\let\psk@angleA\psk@refangle
\edef\psk@nodesepA{\pst@number\pslabelsep}%
\def\psk@nodeseptypeA{0 }%
\pslabelsep\z@
\uput@vi
\Node@@coor#2\@nil
\let\pst@coor\pst@tempg
\leavevmode
\psput@special\pst@hbox
\endgroup
\ignorespaces}
\newcount\psrow
\newcount\pscol
\newcount\psmatrixcnt
\newskip\psrowsep
\newskip\pscolsep
\def\psset@colsep#1{\pssetlength\pscolsep{#1}}
\def\psset@rowsep#1{\pssetlength\psrowsep{#1}}
\psset@colsep{1.5cm}
\psset@rowsep{1.5cm}
\newif\ifpsmatrix
% DG/SR modification begin - Nov. 27, 1998 - Patch 8
%\let\mscount\@multicnt
\ifx\mscount\@undefined\let\mscount\@multicnt\fi
% DG/SR modification end
\def\psmatrix{%
  \begingroup
{\ifnum0=`}\fi % Don't want to expand any &.
\@ifnextchar[{\psmatrix@i}{\ifnum0=`{\fi}{}\psmatrix@ii}}
\def\psmatrix@i[#1]{%
\ifnum0=`{\fi}{}%
\psset{#1}%
\psmatrix@ii}
\def\psmatrix@ii{%
\KillGlue
\edef\psm@beginmath{%
\ifmmode$\m@th\ifinner\textstyle\else\displaystyle\fi\fi}%
\edef\psm@endmath{\ifmmode$\fi}%
\let\\\psm@cr
\advance\psmatrixcnt 1
\def\psm@thenode{M-\the\psmatrixcnt-\the\psrow-\the\pscol}%
\tabskip\z@
\psrow1
\pscol\z@
\psset@shortput{tablr}%
\leavevmode
\vbox\bgroup\halign\bgroup&%
\begingroup
\global\advance\pscol 1
\csname psrowhook\romannumeral\psrow\endcsname
\csname pscolhook\romannumeral\pscol\endcsname
\psm@beginnode##\psm@endnode\endgroup
\cr}
\def\endpsmatrix{%
\crcr\egroup\unskip\egroup
\endgroup}
\def\psm@cr{{\ifnum0=`}\fi\@ifnextchar[{\psm@@cr}{\psm@@@cr{}}}
\def\psm@@cr[#1]{\psm@@@cr{\vskip#1\relax}}
\def\psm@@@cr#1{%
\ifnum0=`{\fi}{}\cr
\noalign{%
\global\advance\psrow 1
\global\pscol\z@
\vskip\psrowsep
#1}}
\def\psm@beginnode{%
\@ifnextchar\psm@endnode
{\let\psm@endnode@i\relax\setbox\pst@hbox=\hbox{}}%
{\pst@object{psm@beginnode}}}
\def\psm@beginnode@i{%
\setbox\pst@hbox=\hbox\bgroup
\psm@beginmath
\begingroup
\ignorespaces}
\def\psm@endnode@i{%
\unskip
\endgroup
\psm@endmath
\egroup
\use@par
\@psttrue}
\def\psm@endnode{%
\@pstfalse
\psm@endnode@i
\ifnum\pscol>1 \hskip\pscolsep \fi
\psk@mnodesize
\hfil
\nodealigntrue
\if@pst
\csname mnode@\psk@mnode\endcsname
\else
\csname mnode@\psk@emnode\endcsname
\fi
\psk@mcol
\psk@@mnodesize}
\def\psspan#1{\mscount#1\relax\loop\ifnum\mscount>\@ne \sp@n\repeat}
\def\psset@name#1{\pst@getnode{#1}\psk@name}
\let\psk@name\relax
\def\psset@mcol#1{%
\ifx r#1\relax
\let\psk@mcol\relax
\else
\ifx l#1\relax
\let\psk@mcol\hfill
\else
\let\psk@mcol\hfil
\fi
\fi}
\psset@mcol{c}
\def\psset@mnodesize#1{%
\pssetlength\pst@dimg{#1}%
\ifdim\pst@dimg<\z@
\let\psk@mnodesize\relax
\let\psk@@mnodesize\relax
\else
\edef\psk@mnodesize{\noexpand\hbox to\number\pst@dimg sp\noexpand\bgroup}%
\let\psk@@mnodesize\egroup
\fi}
\psset@mnodesize{-1pt}
\def\mnode@R{\rnode@iii\Rnode@ii{\psm@thenode}}
\def\mnode@r{\rnode@iii\rnode@iv{\psm@thenode}}
\def\mnode@oval{\ovalnode@ii{\psm@thenode}}
\def\mnode@tri{\trinode@ii{\psm@thenode}}
\def\mnode@dia{\dianode@ii{\psm@thenode}}
\def\mnode@C{{\nodealigntrue\cnode@ii(\z@,\z@){\psk@radius}{\psm@thenode}}}
\def\mnode@f{{\nodealigntrue\fnode@ii(\z@,\z@){\psm@thenode}}}
\def\mnode@circle{\circlenode@ii{\psm@thenode}}
\def\mnode@p{\pnode(\z@,\z@){\psm@thenode}}
% DG/SR modification begin - Jul. 22, 1997 - Patch 1
\def\mnode@dot{\dotnode@ii(\z@,\z@){\psm@thenode}}
% DG/SR modification end
\def\mnode@none{\box\pst@hbox}
\def\psset@mnode#1{%
\@ifundefined{mnode@#1}%
{\@pstrickserr{\string\psmatrix\space node `#1' not defined.}\@ehpa}%
{\edef\psk@mnode{#1}}}
\def\psset@emnode#1{%
\@ifundefined{mnode@#1}%
{\@pstrickserr{\string\psmatrix\space node `#1' not defined.}\@ehpa}%
{\edef\psk@emnode{#1}}}
\psset@mnode{R}
\psset@emnode{none}
%%%% FROM pst-coil.tex
\def\nccoil{\pst@object{nccoil}}
\def\nccoil@i{\check@arrow{\nccoil@ii}}
\def\nccoil@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
\tx@NCCoor
tx@Dict begin
% DG/SR modification begin - Mar. 19, 1998 - Patch 5
4 2 roll
% DG/SR modification end
\psk@coilwidth \pscoilheight
\psk@coilarmA \psk@coilarmB
\psk@coilaspect \psk@coilinc
\pst@coildict \tx@Coil end
end}}
\def\nczigzag{\pst@object{nczigzag}}
\def\nczigzag@i{\check@arrow{\nczigzag@ii}}
\def\nczigzag@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
\tx@NCCoor
tx@Dict begin
% DG/SR modification begin - Mar. 19, 1998 - Patch 5
4 2 roll
% DG/SR modification end
\pscoilheight
\psk@coilwidth
\psk@coilarmA
\psk@coilarmB
\pst@coildict \tx@ZigZag end
\psline@iii
\tx@Line
end}}
\catcode`\@=\TheAtCode\relax
\endinput
%%
%% END pst-node.tex

pst-plot.tex
%% BEGIN pst-plot.tex
%%
%% Plots and axes with PSTricks 97.
%% See the PSTricks User's Guide for documentation.
%%
\def\fileversion{97 patch 1}
\def\filedate{1997/04/28}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN
%% archives in directory macros/latex/base/lppl.txt.
%%
\message{ v\fileversion, \filedate}

\csname PSTplotLoaded\endcsname
\let\PSTplotLoaded\endinput

\ifx\PSTricksLoaded\endinput\else
  \def\next{\input pstricks.tex }
  \expandafter\next
\fi

\ifx\MultidoLoaded\endinput\else
  \def\next{\input multido.tex }
  \expandafter\next
\fi

\edef\TheAtCode{\the\catcode`\@}
\catcode`\@=11

% Using lists of data is optimized for \dataplot and \fileplot
% Here is the tricky part. As each line is read from file,
% we want to ignore trailing delimiters, and convert arbitrary
% strings of non-trailing delimiters to _D_.
% We end up with
%   D x1 D y1 D x2 D y2 ... D xn D yn
%
\begingroup
\catcode`\{=13
\catcode`\}=13
\catcode`\(=13
\catcode`\)=13
\catcode`\,=13
\catcode`\!=1
\catcode`\*=2
\catcode`\ =13
\catcode`\_=13
\catcode`\^^M=13
\gdef\pst@datadelimiters!% Begin def
\catcode`\{=13%
\catcode`\}=13%
\catcode`\(=13%
\catcode`\)=13%
\catcode`\,=13%
\catcode`\ =13%
\catcode`\^^M=13%
\def,##1!%
\ifcat\noexpand,\noexpand##1%
\expandafter##1%
\else\space%
D\space##1%
\fi*%
\let(,\let),\let{,\let},\let ,\let^^M,\let_\@empty*% End def
\endgroup
\begingroup
\catcode`\,=13
\catcode`\_=13
\gdef\savedata@#1[#2]{%
  \xdef\pst@tempg{#2_}%
  \endgroup
  \let#1\pst@tempg
  \global\let\pst@tempg\relax
  \ignorespaces}
\gdef\readdata@{%
  \read1 to \pst@tempa
  \expandafter\readdata@@\pst@tempa_\@nil
  \ifeof1\else\expandafter\readdata@\fi}
\gdef\pst@@readfile#1#2\@nil{\addto@pscode{,#1#2}}%
\gdef\readdata@@#1#2\@nil{\xdef\pst@tempg{\pst@tempg,#1#2}}%
\endgroup

\def\readdata#1#2{%
  \openin1=#2
  \begingroup
  \def\pst@tempg{}%
  \ifeof1
    \@pstrickserr{Data file `#2' not found.}\@ehpa
  \else
    \pst@datadelimiters
    \catcode`\[=1
    \catcode`\]=2
    \readdata@%
  \fi
  \endgroup
  \let#1\pst@tempg
  \global\let\pst@tempg\relax
  \ignorespaces}

\def\pst@readfile#1{{\let\readdata@@\pst@@readfile\readdata\pst@tempg{#1}}}
\def\pst@altreadfile#1{%
  \openin1=#1
  \ifeof1
    \@pstrickserr{Data file `#1' not found.}\@ehpa
  \else
    \catcode`\{=10
    \catcode`\}=10
    \catcode`\(=10
    \catcode`\)=10
    \catcode`\,=10
    \catcode`\^^M=10
    \catcode`\[=1
    \catcode`\]=2
    \pst@@altreadfile
  \fi}
\def\pst@@altreadfile{%
  \read1 to \pst@tempg
  \expandafter\pst@@@altreadfile\pst@tempg\@empty\@nil
  \ifeof1\else\expandafter\pst@@@altreadfile\fi}
\def\pst@@@altreadfile#1#2\@nil{\addto@pscode{#1#2}}%

\def\savedata#1{\begingroup\pst@datadelimiters\savedata@{#1}}

\def\beginplot@line{\begin@OpenObj}
\def\endplot@line{\psline@ii}
\def\beginplot@polygon{\begin@ClosedObj}
\def\endplot@polygon{\pspolygon@ii}
\def\beginplot@curve{\begin@OpenObj}
\def\endplot@curve{\pscurve@ii}
\def\beginplot@ecurve{\begin@OpenObj}
\def\endplot@ecurve{\psecurve@ii}
\def\beginplot@ccurve{\begin@ClosedObj}
\def\endplot@ccurve{\psccurve@ii}
\def\beginplot@dots{\begin@SpecialObj}
\def\endplot@dots{\psdots@ii}
\def\beginplot@bezier{\begin@OpenObj}
\def\endplot@bezier{\psbezier@ii}
\def\beginplot@cbezier{\begin@ClosedObj}
\def\endplot@cbezier{\pscbezier@ii}

\def\psset@plotstyle#1{%
  \@ifundefined{beginplot@#1}%
    {\@pstrickserr{Plot style `#1' not defined}\@eha}%
    {\edef\psplotstyle{#1}}}
\psset@plotstyle{line}

\def\psset@plotpoints#1{%
  \pst@cntg=#1\relax
  \ifnum\pst@cntg<2
    \@pstrickserr{plotpoints parameter must be at least 2}\@ehpa
  \else
    \advance\pst@cntg-1
    \edef\psk@plotpoints{\the\pst@cntg\space}%
  \fi}
\psset@plotpoints{50}

% For quick plots, define:
%   \beginqp@<foo>   : What to do to first point (PS code only).
%   \doqp@<foo>      : What to do to subsequent points (PS code only).
%   \endqp@<foo>     : How to end plot.
%   \testqp@<foo>    : Set \@psttrue if OK to use quick plot.

\def\beginqp@line{\pst@oplineto}
\def\doqp@line{L }
\def\endqp@line{\end@OpenObj}%
\def\testqp@line{%
  \ifdim\pslinearc>\z@\else
    \ifshowpoints\else
      \ifx\psk@arrowA\@empty
        \ifx\psk@arrowB\@empty
          \@psttrue
        \fi
      \fi
    \fi
  \fi}

\def\beginqp@polygon{moveto }
\def\doqp@polygon{L }
\def\endqp@polygon{%
  \addto@pscode{closepath}%
  \end@ClosedObj}
\def\testqp@polygon{%
  \ifdim\pslinearc>\z@\else
    \ifshowpoints\else
      \@psttrue
    \fi
  \fi}

\def\beginqp@dots{%
  \psk@dotsize
  \@nameuse{psds@\psk@dotstyle}
% DG/SR modification begin - 1996/1997
%  Dot }
%\def\doqp@dots{Dot }
  /TheDot { gsave \psk@dotangle \psk@dotscale Dot grestore } def
  TheDot }
% DG/SR modification end
\def\doqp@dots{TheDot }
\def\endqp@dots{\end@SpecialObj}
\def\testqp@dots{\@psttrue}

\def\beginqp@bezier{/n 0 def \pst@oplineto}
\def\doqp@bezier{/n n 1 add def n 3 mod 0 eq { curveto } if }
\def\endqp@bezier{%
  \addto@pscode{n 3 mod { pop pop } repeat}
  \end@OpenObj}%
\def\testqp@bezier{%
  \ifshowpoints\else
    \ifx\psk@arrowA\@empty
      \ifx\psk@arrowB\@empty
        \@psttrue
      \fi
    \fi
  \fi}

\def\beginqp@cbezier{/n 0 def moveto }
\def\doqp@cbezier{\doqp@bezier}
\def\endqp@cbezier{%
  \addto@pscode{n 3 mod { pop pop } repeat closepath}
  \end@ClosedObj}%
\def\testqp@cbezier{\ifshowpoints\else\@psttrue\fi}

\def\dataplot{\def\pst@par{}\pst@object{dataplot}}
\def\dataplot@i#1{%
  \pst@killglue
  \begingroup
    \use@par
    \@pstfalse
    \@nameuse{testqp@\psplotstyle}%
    \if@pst
      \dataplot@ii{\addto@pscode{#1}}%
    \else
      \listplot@ii{\addto@pscode{#1}}%
    \fi
  \endgroup
  \ignorespaces}
\def\dataplot@ii#1{%
  \@nameuse{beginplot@\psplotstyle}%
    \addto@pscode{%
      /Dx { \pst@number\psxunit mul /D { Dy } def } def
      /Dy { \pst@number\psyunit mul Do /D { Dx } def } def
      /D { /D { Dx } def } def
      /Do {
        \@nameuse{beginqp@\psplotstyle}%
        /Do { \@nameuse{doqp@\psplotstyle}} def
      } def}%
    #1%
    \addto@pscode{D}%
  \@nameuse{endqp@\psplotstyle}}

\def\fileplot{\def\pst@par{}\pst@object{fileplot}}
\def\fileplot@i#1{%
  \pst@killglue
  \begingroup
    \use@par
    \@pstfalse
    \@nameuse{testqp@\psplotstyle}%
    \if@pst
      \dataplot@ii{\pst@readfile{#1}}%
    \else
      \listplot@ii{\pst@altreadfile{#1}}%
    \fi
  \endgroup
  \ignorespaces}

\pst@def{ScalePoints}<%
  /y ED /x ED
  counttomark dup dup cvi eq not { exch pop } if
  /m exch def /n m 2 div cvi def
  n { y mul m 1 roll x mul m 1 roll /m m 2 sub def } repeat>

\def\listplot{\def\pst@par{}\pst@object{listplot}}
\def\listplot@i#1{\listplot@ii{\addto@pscode{#1}}}
\def\listplot@ii#1{%
  \@nameuse{beginplot@\psplotstyle}%
    \addto@pscode{/D {} def mark}%
    #1%
    \addto@pscode{\pst@number\psxunit \pst@number\psyunit \tx@ScalePoints}%
  \@nameuse{endplot@\psplotstyle}}

% \psplot

\def\psplotinit#1{\xdef\psplot@init{#1 }}
\def\psplot@init{}

\def\psplot{\def\pst@par{}\pst@object{psplot}}
\def\psplot@i#1#2#3{%
  \pst@killglue
  \begingroup
    \use@par
    \@nameuse{beginplot@\psplotstyle}%
    \addto@pscode{%
      \psplot@init
      /x #1 def
      /x1 #2 def
      /dx x1 x sub \psk@plotpoints div def
      /xy {
        x \pst@number\psxunit mul
        #3 \pst@number\psyunit mul
      } def}%
    \gdef\psplot@init{}%
    \@pstfalse
    \@nameuse{testqp@\psplotstyle}%
    \if@pst
      \psplot@ii
    \else
      \psplot@iii
    \fi
  \endgroup
  \ignorespaces}
\def\psplot@ii{%
    \addto@pscode{%
      xy \@nameuse{beginqp@\psplotstyle}
      \psk@plotpoints 1 sub {
        /x x dx add def
        xy \@nameuse{doqp@\psplotstyle}
      } repeat
      /x x1 def
      xy \@nameuse{doqp@\psplotstyle}}%
  \@nameuse{endqp@\psplotstyle}}
\def\psplot@iii{%
    \addto@pscode{%
      mark
      /n 2 def
      \psk@plotpoints {
        xy
        n 2 roll
        /n n 2 add def
        /x x dx add def
      } repeat
      /x x1 def
      xy
      n 2 roll}%
  \@nameuse{endplot@\psplotstyle}}

\def\parametricplot{\def\pst@par{}\pst@object{parametricplot}}
\def\parametricplot@i#1#2#3{%
  \pst@killglue
  \begingroup
    \use@par
    \@nameuse{beginplot@\psplotstyle}%
    \addto@pscode{%
      \psplot@init
      /t #1 def
      /t1 #2 def
      /dt t1 t sub \psk@plotpoints div def
      /xy {
        #3
        \pst@number\psyunit mul exch
        \pst@number\psxunit mul exch
      } def}%
    \gdef\psplot@init{}%
    \@pstfalse
    \@nameuse{testqp@\psplotstyle}%
    \if@pst
      \parametricplot@ii
    \else
      \parametricplot@iii
    \fi
  \endgroup
  \ignorespaces}
\def\parametricplot@ii{%
    \addto@pscode{%
      xy \@nameuse{beginqp@\psplotstyle}
      \psk@plotpoints 1 sub {
        /t t dt add def
        xy \@nameuse{doqp@\psplotstyle}
      } repeat
      /t t1 def
      xy \@nameuse{doqp@\psplotstyle}}%
  \@nameuse{endqp@\psplotstyle}}
\def\parametricplot@iii{%
    \addto@pscode{%
      mark
      /n 2 def
      \psk@plotpoints {
        xy
        n 2 roll
        /n n 2 add def
        /t t dt add def
      } repeat
      /t t1 def
      xy
      n 2 roll}%
  \@nameuse{endplot@\psplotstyle}}

% These axes macros are complicated. Be careful.

% \pst@ticks{angle}{dx}{n}{int}
% int=1 if ticks appear on top of axes, 0 otherwise.
\def\pst@ticks#1#2#3#4{%
  \begin@SpecialObj
    \addto@pscode{%
      #1 rotate
      /n #3 def
      /dx #2 def
      n 0 lt { /dx dx neg def /n n neg def } if
      /y2 \psk@ticksize CLW 2 div add def
      /y1 y2 neg def
      \ifnum\psk@tickstyle=1
        \ifdim#4<\z@ /y2 \else /y1 \fi 0 def
      \else
        \ifnum\psk@tickstyle=-1
          \ifdim#4<\z@ /y1 \else /y2 \fi 0 def
        \fi
      \fi
      /x dx def
      n { x y1 moveto x y2 lineto stroke /x x dx add def } repeat}%
  \end@SpecialObj}


\def\psset@ticksize#1{\pst@getlength{#1}\psk@ticksize}
\psset@ticksize{3pt}

\def\psset@tickstyle#1{\pst@expandafter\psset@@tickstyle{#1}\@nil}
\def\psset@@tickstyle#1#2\@nil{%
  \ifx#1f\let\psk@tickstyle\z@\else
    \ifx#1t\let\psk@tickstyle\@ne\else
      \ifx#1b\let\psk@tickstyle\m@ne\else
        \@pstrickserr{Bad tick style: `#1#2'}\@ehpa
  \fi\fi\fi}
\psset@tickstyle{full}

\def\psset@ticks#1{\pst@expandafter\psset@@ticks{#1}\@nil\psk@ticks}
\def\psset@@ticks#1#2\@nil#3{%
  \ifx#1a\let#3\z@\else
    \ifx#1x\let#3\@ne\else
      \ifx#1y\let#3\tw@\else
        \ifx#1n\let#3\thr@@\else
          \@pstrickserr{Bad argument: `#1#2'}\@ehpa
  \fi\fi\fi\fi}
\psset@ticks{all}

\def\psset@labels#1{\pst@expandafter\psset@@ticks{#1}\@nil\psk@labels}
\psset@labels{all}

\def\psset@Ox#1{\edef\psk@Ox{#1}}
\psset@Ox{0}
\def\psset@Dx#1{\edef\psk@Dx{#1}}
\psset@Dx{1}
\def\psset@dx#1{%
  \pssetxlength\pst@dimg{#1}%
  \edef\psk@dx{\number\pst@dimg}}
\psset@dx{0}

\def\psset@Oy#1{\edef\psk@Oy{#1}}
\psset@Oy{0}
\def\psset@Dy#1{\edef\psk@Dy{#1}}
\psset@Dy{1}
\def\psset@dy#1{%
  \pssetylength\pst@dimg{#1}%
  \edef\psk@dy{\number\pst@dimg}}
\psset@dy{0}

\newif\ifshoworigin
\def\psset@showorigin#1{\@nameuse{showorigin#1}}
\psset@showorigin{true}


\def\psaxes{\def\pst@par{}\pst@object{psaxes}}
\def\psaxes@i{\pst@getarrows\psaxes@ii}
\def\psaxes@ii(#1){\@ifnextchar({\psaxes@iii(#1)}{\psaxes@iv(0,0)(0,0)(#1)}}
\def\psaxes@iii(#1)(#2){%
  \@ifnextchar(%
    {\psaxes@iv(#1)(#2)}%
    {\psaxes@iv(#1)(#1)(#2)}}
\def\psaxes@iv(#1,#2)(#3,#4)(#5,#6){%
  \setbox\pst@hbox=\hbox\bgroup
    \use@par
    \pssetxlength\pst@dimg{#1}% o-x
    \pssetylength\pst@dimh{#2}% o-y
    \pssetxlength\pst@dima{#3}% bl-x
    \pssetylength\pst@dimb{#4}% bl-y
    \pssetxlength\pst@dimc{#5}% ur-x
    \pssetylength\pst@dimd{#6}% ur-y
% Whole thing will be translated to origin:
    \advance\pst@dima-\pst@dimg % Dist. from bl-x to o-x
    \advance\pst@dimb-\pst@dimh % Dist. from bl-y to o-y
    \advance\pst@dimc-\pst@dimg % Dist. from ur-x to o-x
    \advance\pst@dimd-\pst@dimh % Dist. from ur-y to o-y
% Make lines/arrows or frame:
    \@nameuse{psxs@\psk@axesstyle}%
% "\pslabelsep" should be from the edge of the axis.
    \advance\pslabelsep.5\pslinewidth
% Now the ticks and labels. Start by checking for "\multido".
% !!Need to fix this so that does nothing when there are 0 ticks.!!
    \begingroup
      \ifdim\pst@dimb=\z@\else\showoriginfalse\fi
      \ifnum\psk@dx=\z@
        \pst@dimg=\psk@Dx\psxunit
        \edef\psk@dx{\number\pst@dimg}%
      \fi
      \ifnum\psk@ticks<\tw@
        \ifnum\psk@tickstyle>\z@\else
          \advance\pslabelsep\psk@ticksize\p@
        \fi
      \fi
      \pst@hlabels\pst@dimc\psk@arrowB
      \pst@hlabels\pst@dima\psk@arrowA
    \endgroup
    \begingroup
      \ifdim\pst@dima=\z@\else\showoriginfalse\fi
      \ifnum\psk@dy=\z@
         \pst@dimg=\psk@Dy\psyunit
         \edef\psk@dy{\number\pst@dimg}%
      \fi
      \ifodd\psk@ticks\else
        \ifnum\psk@tickstyle>\z@\else
          \advance\pslabelsep\psk@ticksize\p@
        \fi
      \fi
      \pst@vlabels\pst@dimd\psk@arrowB
      \pst@vlabels\pst@dimb\psk@arrowA
    \endgroup
% Now close "\pst@hbox" (which is 0-dimensional), and put it at the origin.
  \egroup
  \pssetxlength\pst@dimg{#1}%
  \pssetylength\pst@dimh{#2}%
  \leavevmode\psput@cartesian\pst@hbox
  \ignorespaces}

\def\psxs@axes{%
  \psxs@@axes\pst@dima\pst@dimc{}%
  \psxs@@axes\pst@dimb\pst@dimd{exch}}
\def\psxs@@axes#1#2#3{%
  \begin@SpecialObj
    \ifdim#1=\z@
      \def\psk@arrowA{C}%
    \else
      \ifdim#2=\z@
        \def\psk@arrowB{C}%
      \fi
    \fi
    \let\pst@linetype\pst@arrowtype
    \pst@addarrowdef
    \addto@pscode{%
      \pst@number#2 0 #3
      \pst@number#1 0 #3
      ArrowA
      CP 4 2 roll
      ArrowB
      L
      pop pop}%
    \pst@stroke
  \end@SpecialObj}

\def\psxs@frame{%
  \begin@SpecialObj
    \addto@pscode{%
      0 0 moveto \pst@number\pst@dimc 0 L
      0 \pst@number\pst@dimd 2 copy rlineto L closepath}%
    \pst@stroke
    \psk@fillstyle
  \end@SpecialObj
  \let\psk@arrowA\@empty
  \let\psk@arrowB\@empty}

\def\psset@axesstyle#1{%
  \@ifundefined{psxs@#1}%
    {\@pstrickserr{Axes style `#1' not defined}\@eha}%
    {\edef\psk@axesstyle{#1}}}
\psset@axesstyle{axes}

\def\psxs@none{\let\psk@arrowA\@empty\let\psk@arrowB\@empty}

% The origin is never the only label.
\def\pst@hlabels#1#2{%
  \ifdim#1=\z@\else
    \ifx#2\empty\else
      \advance#1\ifdim#1>\z@-\fi7\pslinewidth
    \fi
    \pst@cnta=#1\relax                % Distance (in sp) to end.
    \divide\pst@cnta\psk@dx\relax     % Number of ticks/labels
    \ifnum\pst@cnta=\z@\else
      \pst@dimb=\psk@dx sp            % Space between ticks.
      \ifnum\psk@ticks<\tw@
        \pst@ticks{0}{\pst@number\pst@dimb}{\the\pst@cnta}{\pst@dimd}%
      \fi
      \ifnum\psk@labels<\tw@ \pst@@hlabels\fi
      \showoriginfalse
    \fi
  \fi}

% Knows \pst@dimb and \pst@cnta
\def\pst@@hlabels{%
  \vbox to\z@{%
    \ifdim\pst@dimd>\z@\vskip\pslabelsep\else\vss\fi
    \ifnum\pst@cnta<\z@
      \pst@dimb=-\pst@dimb
    \fi
    \hbox to\z@{%
      \ifshoworigin\hbox to \z@{\hss\pshlabel{\psk@Ox}\hss}\fi
      \mmultido
        {\n=\psk@Ox+\psk@Dx}%
        {\pst@cnta}%
        {\hskip\pst@dimb\hbox to \z@{\hss\pshlabel{\n}\hss}}%
      \hss}%
    \ifdim\pst@dimd>\z@\vss\else\vskip\pslabelsep\fi}}%

\def\pshlabel#1{$#1$}

\def\pst@vlabels#1#2{%
  \ifdim#1=\z@\else
    \ifx#2\empty\else
      \advance#1\ifdim#1>\z@-\fi7\pslinewidth
    \fi
    \pst@cnta=#1\relax                % Distance (in sp) to end.
    \divide\pst@cnta\psk@dy\relax     % Number of ticks/labels
    \ifnum\pst@cnta=\z@\else
      \pst@dima=\psk@dy sp            % Space between ticks.
      \ifodd\psk@ticks\else
        \pst@ticks{90}{\pst@number\pst@dima}{\the\pst@cnta}{-\pst@dimc}%
      \fi
      \ifodd\psk@labels\else\pst@@vlabels\fi
      \showoriginfalse
    \fi
  \fi}

% Knows \pst@dima and \pst@cnta
\def\pst@@vlabels{%
  \vbox to\z@{%
    \ifnum\pst@cnta>\z@
      \pst@dima=-\pst@dima
    \fi
    \offinterlineskip
    \ifshoworigin
      \vbox to \z@{\vss\hbox to\z@{%
        \ifdim\pst@dimc>\z@\hss\else\hskip\pslabelsep\fi
        \psvlabel{\psk@Oy}%
        \ifdim\pst@dimc>\z@\hskip\pslabelsep\else\hss\fi}\vss}%
    \fi
    \mmultido
      {\n=\psk@Oy+\psk@Dy}%
      {\pst@cnta}%
      {\vbox to\pst@dima{\vss}\vbox to \z@{\vss\hbox to\z@{%
        \ifdim\pst@dimc>\z@\hss\else\hskip\pslabelsep\fi
        \psvlabel{\n}%
        \ifdim\pst@dimc>\z@\hskip\pslabelsep\else\hss\fi}\vss}}%
    \vss}}

\def\psvlabel#1{$#1$}

\catcode`\@=\TheAtCode\relax
\endinput
%%
%% END pst-plot.tex

pstricks.tex
%% BEGIN: pstricks.tex
%%
%% PostScript macros for Generic TeX: main input file for PSTricks 97.
%% See the PSTricks User's Guide for description.
%% This uses the header file `pstricks.pro'.
%%
\def\fileversion{97 patch 10}
\def\filedate{1999/03/24}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN
%% archives in directory macros/latex/base/lppl.txt.
%%
\csname PSTricksLoaded\endcsname
\let\PSTricksLoaded\endinput
\edef\PstAtCode{\the\catcode`\@}
\catcode`\@=11\relax
\expandafter\ifx\csname @latexerr\endcsname\relax
\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
#1\endcsname\relax#2\else#3\fi}
\def\@namedef#1{\expandafter\def\csname #1\endcsname}
\def\@nameuse#1{\csname #1\endcsname}
\def\@eha{%
Your command was ignored.^^J
Type \space I <command> <return> \space to replace
it with another command,^^J
or \space <return> \space to continue without it.}
\def\@spaces{\space\space\space\space}
\def\typeout#1{\immediate\write\@unused{#1}}
\alloc@7\write\chardef\sixt@@n\@unused
\def\@empty{}
\def\@gobble#1{}
\def\@nnil{\@nil}
\def\@ifnextchar#1#2#3{%
\let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch}
\def\@ifnch{%
\ifx\@tempc\@sptoken
\let\@tempd\@xifnch
\else
\ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi
\fi
\@tempd}
\begingroup
\def\:{\global\let\@sptoken= } \:
\def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch}
\endgroup
\fi
\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)}
\def\@pstrickserr#1#2{%
\begingroup
\newlinechar`\^^J
\edef\pst@tempc{#2}%
\expandafter\errhelp\expandafter{\pst@tempc}%
\typeout{%
PSTricks error. \space See User's Guide for further information.^^J
\@spaces\@spaces\@spaces\@spaces
Type \space H <return> \space for immediate help.}%
\errmessage{#1}%
\endgroup}
\def\@ehpa{%
Your command was ignored. Default value substituted.^^J
Type \space <return> \space to procede.}
\def\@ehpb{%
Your command was ignored. Will recover best I can.^^J
Type \space <return> \space to procede.}
\def\@ehpc{%
You better fix this before proceding.^^J
See the PSTricks User's Guide or ask your system administrator for help.^^J
Type \space X <return> \space to quit.}
\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb}
\newdimen\pst@dima
\newdimen\pst@dimb
\newdimen\pst@dimc
\newdimen\pst@dimd
\newdimen\pst@dimg
\newdimen\pst@dimh
\newbox\pst@hbox
\newbox\pst@boxg
\newcount\pst@cnta
\newcount\pst@cntb
\newcount\pst@cntc
\newcount\pst@cntd
\newcount\pst@cntg
\newcount\pst@cnth
\newif\if@pst
\newtoks\pst@toks
\newif\if@star
\def\pst@ifstar#1{%
\@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}}
\def\pst@expandafter#1#2{%
\def\next{#1}%
\edef\@tempa{#2}%
\ifx\@tempa\@empty
\@pstrickserr{Unexpected empty argument!}\@ehpb
\def\@tempa{\@empty}%
\fi
\expandafter\next\@tempa}
\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}}
\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1}
{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}}
\def\pst@pyth#1#2#3{%
\ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi}
\def\pst@@pyth#1#2#3{%
\ifdim4#1>9#2%
#3=#1\advance#3 .2122#2%
\else
#3=.8384#1\advance#3 .5758#2%
\fi}
\def\pst@divide#1#2#3{%
\pst@@divide{#1}{#2}%
\pst@dimtonum\pst@dimg{#3}}
\def\pst@@divide#1#2{%
\pst@dimg=#1\relax
\pst@dimh=#2\relax
\pst@cntg=\pst@dimh
\pst@cnth=67108863
\pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide
\divide\pst@dimg\pst@cntg}
\def\pst@@@divide{%
\ifnum
\ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth
\multiply\pst@dimg\sixt@@n
\else
\divide\pst@cntg\sixt@@n
\fi}
\def\pst@configerr#1{%
\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc}
% % \begin{macrocode}
\def\pstVerb#1{\pst@configerr\pstVerb}
\def\pstverb#1{\pst@configerr\pstverb}
\def\pstverbscale{\pst@configerr\pstverbscale}
\def\pstrotate{\pst@configerr\pstrotate}
\def\pstheader#1{\pst@configerr\pstheader}
\def\pstdriver{\pst@configerr\pstdriver}
\@ifundefined{pstcustomize}%
{\def\pstcustomize{\endinput\let\pstcustomize\relax}}{}
\input pstricks.con
\newif\ifPSTricks
\PSTrickstrue
\def\PSTricksOff{%
\def\pstheader##1{}%
\def\pstverb##1{}%
\def\pstVerb##1{}%
\PSTricksfalse}
\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{}
\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{}
\pstheader{pstricks.pro}
\def\pst@dict{tx@Dict begin }
\def\pst@theheaders{pstricks.pro}
\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}}
\def\tx@Atan{Atan }
\def\tx@Div{Div }
\def\tx@NET{NET }
\def\tx@Pyth{Pyth }
\def\tx@PtoC{PtoC }
\def\tx@PathLength@{PathLength@ }
\def\tx@PathLength{PathLength }
\pst@dimg=\pstunit\relax
\ifdim\pst@dimg=1bp
\def\pst@stp{.996264 dup scale}
\else
\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale}
\fi
\def\tx@STP{STP }
\def\tx@STV{STV }
\def\pst@number#1{\pst@@dimtonum#1\space}
\def\pst@checknum#1#2{%
\edef\next{#1}%
\ifx\next\@empty
\let\pst@num\z@
\else
\expandafter\pst@@checknum\next..\@nil
\fi
\ifnum\pst@num=\z@
\@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa
\def#2{0 }%
\else
\edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.%
\expandafter\@gobble\the\pst@cnth\space}%
\fi}
\def\pst@@checknum{%
\@ifnextchar-%
{\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}%
{\let\pst@num\@ne\pst@@@checknum}}
\def\pst@@@checknum#1.#2.#3\@nil{%
\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil
\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil}
\def\pst@@@@checknum#1\relax\@nil{%
\ifx\@nil#1\@nil\else\let\pst@num\z@\fi}
\def\pst@getnumii#1 #2 #3\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph}
\def\pst@getnumiii#1 #2 #3 #4\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi}
\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi
\pst@checknum{#4}\pst@tempj}
\def\pst@getdimnum#1 #2 #3\@nil{%
\pssetlength\pst@dimg{#1}%
\pst@checknum{#2}\pst@tempg}
% DG/SR modification begin - Jan. 7, 1998 - Patch 9
% Missing from pstricks.bug 0.93
%\def\pst@getscale#1#2{%
%\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
%\@psttrue
%\ifdim\pst@tempg\p@=\z@
%\@pstrickserr{Bad scaling argument `#1'}\@ehpa
%\def\pst@tempg{1 }%
%\@pstfalse
%\fi
%\ifdim\pst@temph\p@=\z@
%\if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi
%\def\pst@temph{1 }%
%\fi
%\edef#2{\pst@tempg\space \pst@temph\space scale }%
%\ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@
%\def#2{}%
%\fi\fi}
\def\pst@getscale#1#2{%
\edef\pst@tempg{#1}%
\ifx\pst@tempg\@none
\def#2{}%
\else
\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
\ifdim\pst@tempg\p@=\z@
\@pstrickserr{Bad scaling argument `#1'}\@ehpa
\def#2{}%
\else
\ifdim\pst@temph\p@=\z@
\@pstrickserr{Bad scaling argument `#1'}\@ehpa
\def#2{}%
\else
\edef#2{\pst@tempg\space \pst@temph\space scale }%
\fi
\fi
\fi}
% DG/SR modification end
\def\pst@getint#1#2{%
\pst@cntg=#1\relax
\edef#2{\the\pst@cntg\space}}
\begingroup
\catcode`\{=12
\catcode`\}=12
\catcode`\[=1
\catcode`\]=2
\gdef\pslbrace[{ ]
\gdef\psrbrace[} ]
\endgroup
\def\@newcolor#1#2{%
\expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}%
\expandafter\edef\csname color@#1\endcsname{#2}%
\ignorespaces}
\def\pst@color#1{%
\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}
\def\pst@endcolor{\pstVerb{\pst@currentcolor}}
\def\pst@currentcolor{0 setgray}
\def\altcolormode{%
\def\pst@color##1{%
\pstVerb{gsave ##1}\aftergroup\pst@endcolor}%
\def\pst@endcolor{\pstVerb{\pst@grestore}}}
\def\pst@grestore{%
currentpoint
matrix currentmatrix
currentfont
grestore
setfont
setmatrix
moveto}
\def\pst@usecolor#1{\csname color@#1\endcsname\space}
\def\newgray#1#2{%
\pst@checknum{#2}\pst@tempg
\@newcolor{#1}{\pst@tempg setgray}}
\def\newrgbcolor#1#2{%
\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}}
\def\newhsbcolor#1#2{%
\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}}
\def\newcmykcolor#1#2{%
\pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}}
\newgray{black}{0}
\newgray{darkgray}{.25}
\newgray{gray}{.5}
\newgray{lightgray}{.75}
\newgray{white}{1}
\newrgbcolor{red}{1 0 0}
\newrgbcolor{green}{0 1 0}
\newrgbcolor{blue}{0 0 1}
\newrgbcolor{yellow}{1 1 0}
\newrgbcolor{cyan}{0 1 1}
\newrgbcolor{magenta}{1 0 1}
\def\psset#1{\@psset#1,\@nil\ignorespaces}
\def\@psset#1,{%
\@@psset#1==\@nil
\@ifnextchar\@nil{\@gobble}{\@psset}}
\def\@@psset#1=#2=#3\@nil{%
\@ifundefined{psset@#1}%
{\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}%
{\@nameuse{psset@#1}{#2}}}%
\def\psset@style#1{%
\@ifundefined{pscs@#1}%
{\@pstrickserr{Custom style `#1' undefined}\@ehpa}%
{\@nameuse{pscs@#1}}}
\def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}}
\def\@none{none}
\def\pst@getcolor#1#2{%
\@ifundefined{color@#1}%
{\@pstrickserr{Color `#1' not defined}\@eha}%
{\edef#2{#1}}}
\newdimen\psunit \psunit 1cm
\newdimen\psxunit \psxunit 1cm
\newdimen\psyunit \psyunit 1cm
\let\psrunit\psunit
\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces}
\def\pssetlength#1#2{%
\let\@psunit\psunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\psaddtolength#1#2{%
\let\@psunit\psunit
\afterassignment\pstunit@off
\advance#1 #2\@psunit}
\def\pssetxlength#1#2{%
\let\@psunit\psxunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\pssetylength#1#2{%
\let\@psunit\psyunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\psset@unit#1{%
\pssetlength\psunit{#1}%
\psxunit=\psunit
\psyunit=\psunit}
\def\psset@runit#1{\pssetlength\psrunit{#1}}
\def\psset@xunit#1{\pssetxlength\psxunit{#1}}
\def\psset@yunit#1{\pssetylength\psyunit{#1}}
\def\pst@getlength#1#2{%
\pssetlength\pst@dimg{#1}%
\edef#2{\pst@number\pst@dimg}}
\def\pst@@getlength#1#2{%
\pssetlength\pst@dimg{#1}%
\edef#2{\number\pst@dimg sp}}
\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor}
\def\pst@coor{0 0 }
\def\pst@getcoors#1#2{%
\def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}%
\def\pst@coors{}%
\pst@@getcoors}
\def\pst@@getcoors(#1){%
\pst@@getcoor{#1}%
\edef\pst@coors{\pst@coor\pst@coors}%
\@ifnextchar({\pst@@getcoors}{\pst@aftercoors}}
\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle}
\def\pst@angle{0 }
\def\cartesian@coor#1,#2,#3\@nil{%
\pssetxlength\pst@dimg{#1}%
\pssetylength\pst@dimh{#2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}
\def\NormalCoor{%
\def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}%
\def\pst@@getangle##1{%
\pst@checknum{##1}\pst@angle
\edef\pst@angle{\pst@angle \pst@angleunit}}%
\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}}
\NormalCoor
\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}}
\def\@degrees[#1]{%
\pst@checknum{#1}\pst@tempg
\edef\pst@angleunit{360 \pst@tempg div mul }%
\ignorespaces}
\def\radians{\def\pst@angleunit{57.2956 mul }}
\def\pst@angleunit{}
\def\SpecialCoor{%
\def\pst@@getcoor##1{%
\begingroup
\pst@activecoor
\xdef\pst@tempg{##1}%
\endgroup
\expandafter\special@coor\pst@tempg||\@nil}%
\def\pst@@getangle##1{%
\begingroup
\pst@activecoor
\xdef\pst@tempg{##1}%
\endgroup
\expandafter\special@angle\pst@tempg\@empty)\@nil}%
\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}}
\begingroup
\catcode`\|=13
\catcode`\;=13
\catcode`\!=13
\gdef\pst@activecoor{%
\def|{\string|}%
\def;{\string;}%
\def!{\string!}}
\endgroup
\def\special@coor#1|#2|#3\@nil{%
\ifx#3|\relax
\mixed@coor{#1}{#2}%
\else
\special@@coor#1;;\@nil
\fi}
\def\special@@coor#1{%
\ifcat#1a\relax
\def\next{\node@coor#1}%
\else
\ifx#1[\relax
\def\next{\Node@coor[}%
\else
\ifx#1!\relax
\def\next{\raw@coor}%
\else
\def\next{\special@@@coor#1}%
\fi
\fi
\fi
\next}
\def\special@@@coor#1;#2;#3\@nil{%
\ifx#3;\relax
\polar@coor{#1}{#2}%
\else
\cartesian@coor#1,\relax,\@nil
\fi}
\def\mixed@coor#1#2{%
\begingroup
% DG/SR modification begin - Oct. 27, 1997 - Patch 6
%\specialcoor@ii#1;;\@nil
%\let\pst@tempa\pst@coor
%\specialcoor@ii#2;;\@nil
\special@@coor#1;;\@nil
\let\pst@tempa\pst@coor
\special@@coor#2;;\@nil
% DG/SR modification end
\xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }%
\endgroup
\let\pst@coor\pst@tempg}
\def\polar@coor#1#2{%
\pssetlength\pst@dimg{#1}%
\pst@@getangle{#2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}}
\def\raw@coor#1;#2\@nil{%
\edef\pst@coor{%
#1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }}
\def\node@coor#1\@nil{%
\@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps
\def\pst@coor{0 0 }}
\def\Node@coor{\node@coor}
\def\special@angle#1#2)#3\@nil{%
\ifx!#1\relax
\edef\pst@angle{#2 \pst@angleunit}%
\else
\ifx(#1\relax
\pst@@getcoor{#2}%
\edef\pst@angle{\pst@coor exch \tx@Atan}%
\else
\pst@checknum{#1#2}\pst@angle
\edef\pst@angle{\pst@angle \pst@angleunit}%
\fi
\fi}
\def\Cartesian{%
\def\cartesian@coor##1,##2,##3\@nil{%
\pssetxlength\pst@dimg{##1}%
\pssetylength\pst@dimh{##2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}%
\@ifnextchar({\Cartesian@}{}}
\def\Cartesian@(#1,#2){%
\pssetxlength\psxunit{#1}%
\pssetylength\psyunit{#2}%
\ignorespaces}
\def\Polar{%
\def\psput@cartesian{\psput@special}%
\def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}}%
\def\psset@origin#1{%
\pst@@getcoor{#1}%
\edef\psk@origin{\pst@coor \tx@NET }}
\def\psk@origin{}
\newif\ifswapaxes
\def\psset@swapaxes#1{%
\@nameuse{@pst#1}%
\if@pst
\def\psk@swapaxes{-90 rotate -1 1 scale }%
\else
\def\psk@swapaxes{}%
\fi}
\psset@swapaxes{false}
\newif\ifshowpoints
\def\psset@showpoints#1{\@nameuse{showpoints#1}}
\psset@showpoints{false}
\let\pst@setrepeatarrowsflag\relax
\def\psset@border#1{%
\pst@getlength{#1}\psk@border
\pst@setrepeatarrowsflag}
\psset@border{0pt}
\def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor}
\psset@bordercolor{white}
\newif\ifpsdoubleline
\def\psset@doubleline#1{%
\@nameuse{psdoubleline#1}%
\pst@setrepeatarrowsflag}
\psset@doubleline{false}
\def\psset@doublesep#1{\def\psdoublesep{#1}}
\psset@doublesep{1.25\pslinewidth}
\def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor}
\psset@doublecolor{white}
\newif\ifpsshadow
\def\psset@shadow#1{%
\@nameuse{psshadow#1}%
\pst@setrepeatarrowsflag}
\psset@shadow{false}
\def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize}
\psset@shadowsize{3pt}
\def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle}
\psset@shadowangle{-45}
\def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor}
\psset@shadowcolor{darkgray}
\def\pst@repeatarrowsflag{\z@}
\def\pst@setrepeatarrowsflag{%
\edef\pst@repeatarrowsflag{%
\ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else
\ifpsshadow 1\else \z@\fi\fi\fi}}
\def\psls@none{}
\newdimen\pslinewidth
\def\psset@linewidth#1{\pssetlength\pslinewidth{#1}}
\psset@linewidth{.8pt}
\def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor}
\psset@linecolor{black}
\def\psls@solid{0 setlinecap stroke }
\def\pst@missing{%
\z@
\@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa}
\def\psset@dash#1{%
\pst@expandafter\psset@@dash{#1} {\pst@missing} {\pst@missing} {}\@nil
\edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}}
\def\psset@@dash#1 #2 #3\@nil{%
\pssetlength\pst@dimg{#1}%
\pssetlength\pst@dimh{#2}}
\psset@dash{5pt 3pt}
\newif\ifpsdashadjust
\def\psset@dashadjust#1{\@nameuse{psdashadjust#1}}
\psset@dashadjust{true}
\def\psls@dashed{%
\ifpsdashadjust
\psk@dash \pst@linetype\space \tx@DashLine
\else
[ \psk@dash ] 0 setdash stroke
\fi}
\def\tx@DashLine{DashLine }
\def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep}
\psset@dotsep{3pt}
\def\psls@dotted{%
\ifpsdashadjust
\psk@dotsep \pst@linetype\space \tx@DotLine
\else
[ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke
\fi}
\def\tx@DotLine{DotLine }
\def\psset@linestyle#1{%
\@ifundefined{psls@#1}%
{\@pstrickserr{Line style `#1' not defined}\@eha}%
{\edef\pslinestyle{#1}}}
\psset@linestyle{solid}
\def\psfs@none{}
\def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor}
\psset@fillcolor{white}
\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor fill}}
\def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth}
\psset@hatchwidth{.8pt}
\def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep}
\psset@hatchsep{4pt}
\def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor}
\psset@hatchcolor{black}
\def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle}
\psset@hatchangle{45}
\def\pst@linefill{%
\psk@hatchangle rotate
\psk@hatchwidth SLW
\pst@usecolor\pshatchcolor
\psk@hatchsep \tx@LineFill}
\def\psfs@vlines{\pst@fill\pst@linefill}
\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines}
\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill}}
\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines}
\def\psfs@crosshatch{\psfs@vlines \psfs@hlines}
\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines}
\def\tx@LineFill{LineFill }
\def\psset@fillstyle#1{%
\edef\pst@tempg{#1}\def\pst@temph{none}%
\ifx\pst@tempg\pst@temph
\let\psk@fillstyle\relax
\else
\@ifundefined{psfs@#1}%
{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
{\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}%
\fi}
\def\psset@addfillstyle#1{%
\@ifundefined{psfs@#1}%
{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
{\edef\psk@fillstyle{%
\expandafter\noexpand\psk@fillstyle
\expandafter\noexpand\csname psfs@#1\endcsname}}}
\psset@fillstyle{none}
\def\psset@arrows#1{%
\begingroup
\pst@activearrows
\xdef\pst@tempg{#1}%
\endgroup
\expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil
\if@pst\else
\@pstrickserr{Bad arrows specification: #1}\@ehpa
\fi}
\def\psset@@arrows#1-#2\@empty#3\@nil{%
\@psttrue
\def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}%
\expandafter\next\pst@arrowtable,#1-#1,\@nil
\@ifundefined{psas@\pst@tempg}%
{\@pstfalse\def\psk@arrowA{}}%
{\let\psk@arrowA\pst@tempg}%
\@ifundefined{psas@#2}%
{\@pstfalse\def\psk@arrowB{}}%
{\def\psk@arrowB{#2}}}
\def\psk@arrowA{}
\def\psk@arrowB{}
\def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]}
\begingroup
\catcode`\<=13
\catcode`\>=13
\catcode`\|=13
\gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}}
\endgroup
\def\tx@BeginArrow{BeginArrow }
\def\tx@EndArrow{EndArrow }
\def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale}
\psset@arrowscale{1}
\def\psset@arrowsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}}
\psset@arrowsize{1.5pt 2}
\def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength}
\psset@arrowlength{1.4}
\def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}%
\psset@arrowinset{.4}
\def\tx@Arrow{Arrow }
\@namedef{psas@>}{%
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@>>}{%
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
0 h T
gsave
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
CP
grestore
CP newpath moveto
2 copy
L
stroke
moveto}
\@namedef{psas@<}{%
true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@<<}{%
true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
CP newpath moveto 0 a neg L stroke 0 h neg T
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\def\psset@tbarsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}}
\psset@tbarsize{2pt 5}
\def\tx@Tbar{Tbar }
\@namedef{psas@|}{\psk@tbarsize \tx@Tbar}
\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar}
\@namedef{psas@>|}{%
\psk@tbarsize \tx@Tbar
0 CLW 2 div T
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@>|*}{%
0 CLW -2 div T
\psk@tbarsize \tx@Tbar
0 CLW 2 div T
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|}
\def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength}
\psset@bracketlength{.15}
\def\tx@Bracket{Bracket }
\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket}
\def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength}
\psset@rbracketlength{.15}
\def\tx@RoundBracket{RoundBracket }
\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket}
\def\psas@c{1 \psas@@c}
\def\psas@cc{0 CLW 2 div T 1 \psas@@c}
\def\psas@C{2 \psas@@c}
\def\psas@@c{%
setlinecap
0 0 moveto
0 CLW 2 div L
stroke
0 0 moveto}
\def\psas@{}
\psset@arrows{-}
\def\tx@SD{SD }
\def\tx@EndDot{EndDot }
\def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot}
\def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot}
\@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot}
\@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot}
\def\pst@par{}
\def\addto@par#1{%
\ifx\pst@par\@empty
\def\pst@par{#1}%
\else
\expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}%
\fi}
\def\addbefore@par#1{%
\ifx\pst@par\@empty
\def\pst@par{#1}%
\else
\toks@{#1}%
\pst@toks\expandafter{\pst@par}%
\edef\pst@par{\the\toks@,\the\pst@toks}%
\fi}
\def\use@par{%
\ifx\pst@par\@empty\else
\expandafter\@psset\pst@par,\@nil
\def\pst@par{}%
\fi}
\def\pst@object#1{%
\pst@ifstar{%
\@ifnextchar[%
{\pst@@object{#1}}%
{\def\pst@par{}\@nameuse{#1@i}}}}
\def\pst@@object#1[#2]{%
\def\pst@par{#2}%
\@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}}
\def\newpsobject#1#2#3{%
\@ifundefined{#2@i}%
{\@pstrickserr{Graphics object `#2' not defined}\@eha}{%
\@namedef{#1}{\pst@object{#1}}%
\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}%
\ignorespaces}
\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}}
\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1}
\def\begin@ClosedObj{%
\leavevmode
\pst@killglue
\begingroup
\use@par
\solid@star
\ifpsdoubleline \pst@setdoublesep \fi
\init@pscode}
\def\end@ClosedObj{%
\ifpsshadow \pst@closedshadow \fi
\ifdim\psk@border\p@>\z@ \pst@addborder \fi
\psk@fillstyle
\pst@stroke
\ifpsdoubleline \pst@doublestroke \fi
\ifshowpoints
% DG modification begin - Mar. 4, 1995
%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}%
\pst@OpenShowPoints
% DG modification end
\fi
\use@pscode
\endgroup
\ignorespaces}
\def\begin@OpenObj{%
\begin@ClosedObj
\let\pst@linetype\pst@arrowtype
\pst@addarrowdef}
\def\begin@AltOpenObj{%
\begin@ClosedObj
\def\pst@repeatarrowsflag{\z@}%
\def\pst@linetype{0}}
\def\end@OpenObj{%
\ifpsshadow \pst@openshadow \fi
\ifdim\psk@border\p@>\z@ \pst@addborder \fi
\psk@fillstyle
\pst@stroke
\ifpsdoubleline \pst@doublestroke \fi
\ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi
\ifshowpoints \pst@OpenShowPoints \fi
\use@pscode
\endgroup
\ignorespaces}
\def\begin@SpecialObj{%
\leavevmode
\pst@killglue
\begingroup
\use@par
\init@pscode}
\def\end@SpecialObj{%
\use@pscode
\endgroup
\ignorespaces}
\def\pst@code{}%
\def\init@pscode{%
\addto@pscode{%
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}
\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}}
\def\use@pscode{%
\pstverb{%
\pst@dict
\tx@STP
\pst@newpath
\psk@origin
\psk@swapaxes
\pst@code
end}%
\gdef\pst@code{}}
\def\pst@newpath{newpath }
\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi}
\def\KillGlue{\let\pst@killglue\pst@@killglue}
\def\DontKillGlue{\let\pst@killglue\relax}
\DontKillGlue
\def\solid@star{%
\if@star
\pslinewidth=\z@
\psdoublelinefalse
\def\pslinestyle{none}%
\def\psk@fillstyle{\psfs@solid}%
\let\psfillcolor\pslinecolor
\fi}
\def\pst@setdoublesep{%
\pst@getlength\psdoublesep\psdoublesep
\pslinewidth=2\pslinewidth
\advance\pslinewidth\psdoublesep\p@
\let\pst@setdoublesep\relax}
\def\tx@Shadow{Shadow }
\def\pst@closedshadow{%
\addto@pscode{%
gsave
\psk@shadowsize \psk@shadowangle \tx@PtoC
\tx@Shadow
\pst@usecolor\psshadowcolor
gsave fill grestore
stroke
grestore
gsave
\pst@usecolor\psfillcolor
gsave fill grestore
stroke
grestore}}
\def\pst@openshadow{%
\addto@pscode{%
gsave
\psk@shadowsize \psk@shadowangle \tx@PtoC
\tx@Shadow
\pst@usecolor\psshadowcolor
\ifx\psk@fillstyle\relax\else
gsave fill grestore
\fi
stroke}%
\pst@repeatarrows
\addto@pscode{grestore}
\ifx\psk@fillstyle\relax\else
\addto@pscode{%
gsave
\pst@usecolor\psfillcolor
gsave fill grestore
stroke
grestore}
\fi}
\def\pst@addborder{%
\addto@pscode{%
gsave
\psk@border 2 mul
CLW add SLW
\pst@usecolor\psbordercolor
stroke
grestore}}
\def\pst@stroke{%
\ifx\pslinestyle\@none\else
\addto@pscode{%
gsave
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor
\@nameuse{psls@\pslinestyle}
grestore}%
\fi}
\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}%
\def\pst@doublestroke{%
\addto@pscode{%
gsave
\psdoublesep SLW
\pst@usecolor\psdoublecolor
stroke
grestore}}
\def\pst@arrowtype{%
\ifx\psk@arrowB\@empty 0 \else -2 \fi
\ifx\psk@arrowA\@empty 0 \else -1 \fi
add}
\def\pst@addarrowdef{%
\addto@pscode{%
/ArrowA {
\ifx\psk@arrowA\@empty
\pst@oplineto
\else
\pst@arrowdef{A}
moveto
\fi
} def
/ArrowB {
\ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi
} def}}
\def\pst@arrowdef#1{%
\ifnum\pst@repeatarrowsflag>\z@
/Arrow#1c [ 6 2 roll ] cvx def Arrow#1c
\fi
\tx@BeginArrow
\psk@arrowscale
\@nameuse{psas@\@nameuse{psk@arrow#1}}
\tx@EndArrow}
\def\pst@repeatarrows{%
\addto@pscode{%
gsave
\ifx\psk@arrowA\@empty\else
ArrowAc ArrowA pop pop
\fi
\ifx\psk@arrowB\@empty\else
ArrowBc ArrowB pop pop pop pop
\fi
grestore}}
\def\pst@OpenShowPoints{%
\addto@pscode{%
gsave
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}
newpath
Points aload length 2 div 2 sub cvi /N ED
N 0 ge
{ \ifx\psk@arrowA\@empty
Dot
\else
pop pop
\fi
N { Dot } repeat
\ifx\psk@arrowB\@empty
Dot
\else
pop pop
\fi }
{ N 2 mul { pop } repeat }
ifelse
grestore}}
\def\pscustom{\pst@object{pscustom}}
\long\def\pscustom@i#1{%
\begin@SpecialObj
\solid@star
\let\pst@ifcustom\iftrue
\let\begin@ClosedObj\begin@CustomObj
\let\end@ClosedObj\endgroup
\def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}%
\let\end@OpenObj\endgroup
\let\begin@AltOpenObj\begin@CustomObj
\def\begin@SpecialObj{%
\begingroup
\pst@misplaced{special graphics object}%
\def\addto@pscode####1{}
\let\end@SpecialObj\endgroup}%
\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
\def\psclip##1{\pst@misplaced\psclip}%
\def\pst@repeatarrowsflag{\z@}%
\let\pst@setrepeatarrowsflag\relax
\showpointsfalse
\let\showpointstrue\relax
\def\pst@linetype{\pslinetype}%
\let\psset@liftpen\psset@@liftpen
\psset@liftpen{\z@}%
\def\pst@cp{/currentpoint load stopped pop }%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\def\pst@optcp##1##2{%
\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}%
\let\caddto@pscode\addto@pscode
\def\cuse@par##1{{\use@par##1}}%
\the\pst@customdefs
\setbox\pst@hbox=\hbox{#1}%
\psk@fillstyle
\pst@stroke
\end@SpecialObj}
\def\begin@CustomObj{%
\begingroup
\use@par
\addto@pscode{%
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}
\def\pst@oplineto{moveto }
\def\pst@cp{}
\def\pst@optcp#1#2{}
\def\psset@liftpen#1{}
\def\psset@@liftpen#1{%
\ifcase#1\relax
\def\psk@liftpen{\z@}%
\def\pst@cp{/currentpoint load stopped pop }%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\or
\def\psk@liftpen{1}%
\def\pst@cp{}%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\or
\def\psk@liftpen{2}%
\def\pst@cp{}%
\def\pst@oplineto{moveto }%
\fi}
\psset@liftpen{0}
\def\psk@liftpen{-1}
\def\psset@linetype#1{%
\pst@getint{#1}\pslinetype
\ifnum\pst@dimg<-3
\@pstrickserr{linetype must be greater than -3}\@ehpa
\def\pslinetype{0}%
\fi}
\psset@linetype{0}
\def\caddto@pscode#1{%
\@pstrickserr{Command can only be used in \string\pscustom}\@ehpa}
\let\cuse@par\caddto@pscode
\def\tx@MSave{%
/msavemtrx
[ tx@Dict /msavemtrx known { msavemtrx aload pop } if CM ]
def }
\def\tx@MRestore{%
tx@Dict /msavemtrx known { length 0 gt } { false } ifelse
{ /msavematrx [ msavematrx aload pop setmatrix ] def }
if }
\newtoks\pst@customdefs
\pst@customdefs{%
\def\newpath{\addto@pscode{newpath}}%
\def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
\def\closepath{\addto@pscode{closepath}}%
\def\gsave{\begingroup\addto@pscode{gsave}}%
\def\grestore{\endgroup\addto@pscode{grestore}}%
% DG/SR modification begin - May 12, 1997 - Patch 2
%\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}%
% DG/SR modification end
\def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}%
\def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}%
\def\msave{\addto@pscode{\tx@MSave}}%
\def\mrestore{\addto@pscode{\tx@MRestore}}%
\def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}%
\def\stroke{\pst@object{stroke}}%
\def\fill{\pst@object{fill}}%
\def\openshadow{\pst@object{openshadow}}%
\def\closedshadow{\pst@object{closedshadow}}%
% DG/SR modification begin - Jan. 7, 1998 - Patch 8
%\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}%
\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}%
% DG/SR modification end
\def\lineto{\pst@onecoor{lineto}}%
\def\rlineto{\pst@onecoor{rlineto}}%
\def\curveto{\pst@threecoor{curveto}}%
\def\rcurveto{\pst@threecoor{rcurveto}}%
\def\code#1{\addto@pscode{#1}}%
\def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}%
\def\rcoor{\pst@getcoors{}{}}%
\def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}%
\def\setcolor#1{%
\@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}%
\def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}%
\let\file\pst@rawfile
} % END \pst@customdefs
\def\closedshadow@i{\cuse@par\pst@closedshadow}
\def\openshadow@i{\cuse@par\pst@openshadow}
\def\stroke@i{\cuse@par\pst@stroke}%
\def\fill@i{\cuse@par\psk@fillstyle}%
\def\pst@onecoor#1(#2){%
\pst@@getcoor{#2}%
\addto@pscode{\pst@coor #1}}
\def\pst@threecoor#1(#2)#3(#4)#5(#6){%
\begingroup
\pst@getcoor{#2}\pst@tempa
\pst@getcoor{#4}\pst@tempb
\pst@getcoor{#6}\pst@tembc
\addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}%
\endgroup}
\def\pst@rawfile#1{%
\begingroup
\def\do##1{\catcode`##1=12\relax}"
\dospecials
\catcode`\%=14
\pst@@rawfile{#1}%
\endgroup}
\def\pst@@rawfile#1{%
\immediate\openin1 #1
\ifeof1
\@pstrickserr{File `#1' not found}\@ehpa
\else
\immediate\read1 to \pst@tempg
\loop
\ifeof1 \@pstfalse\else\@psttrue\fi
\if@pst
\addto@pscode\pst@tempg
\immediate\read1 to \pst@tempg
\repeat
\fi
\immediate\closein1\relax}
\def\tx@NArray{NArray }
\def\tx@NArray{NArray }
\def\tx@Line{Line }
\def\tx@Arcto{Arcto }
\def\tx@CheckClosed{CheckClosed }
\def\tx@Polygon{Polygon }
\def\psset@gangle#1{\pst@getangle{#1}\psk@gangle}
\psset@gangle{0}
\def\tx@Diamond{Diamond }
\def\psdiamond{\pst@object{psdiamond}}
\def\psdiamond@i(#1){%
\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}}
\def\psdiamond@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\addto@pscode{%
\psline@iii
pop
\psk@dimen
\pst@tempb
\psk@gangle
\pst@tempa
\tx@Diamond}%
\def\pst@linetype{4}%
\end@ClosedObj}
\def\tx@Triangle{Triangle }
\def\pstriangle{\pst@object{pstriangle}}
\def\pstriangle@i(#1){%
\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}}
\def\pstriangle@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\addto@pscode{%
\psline@iii
pop
\psk@dimen
\pst@tempb
\psk@gangle
\pst@tempa
\tx@Triangle}%
\def\pst@linetype{2}%
\end@ClosedObj}
\def\tx@CCA{CCA }
\def\tx@CCA{CCA }
\def\tx@CC{CC }
\def\tx@IC{IC }
\def\tx@BOC{BOC }
\def\tx@NC{NC }
\def\tx@EOC{EOC }
\def\tx@BAC{BAC }
\def\tx@NAC{NAC }
\def\tx@EAC{EAC }
\def\tx@OpenCurve{OpenCurve }
\def\tx@AltCurve{AltCurve }
\def\tx@ClosedCurve{ClosedCurve }
\def\psset@curvature#1{%
\edef\pst@tempg{#1 }%
\expandafter\psset@@curvature\pst@tempg * * * \@nil}
\def\psset@@curvature#1 #2 #3 #4\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi
\edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}}
\psset@curvature{1 .1 0}
\def\pscurve{\pst@object{pscurve}}
\def\pscurve@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\pscurve@ii}}
\def\pscurve@ii{%
\addto@pscode{%
\pst@cp
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@OpenCurve}%
\end@OpenObj}
\def\psecurve{\pst@object{psecurve}}
\def\psecurve@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psecurve@ii}}
\def\psecurve@ii{%
\addto@pscode{%
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@AltCurve}%
\end@OpenObj}
\def\psccurve{\pst@object{psccurve}}
\def\psccurve@i{%
\begin@ClosedObj
\pst@getcoors[\psccurve@ii}
\def\psccurve@ii{%
\addto@pscode{%
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@ClosedCurve}%
\def\pst@linetype{1}%
\end@ClosedObj}
\def\psset@dotsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@@dotsize{\pst@number\pst@dimg}%
\let\psk@@@dotsize\pst@tempg
\edef\psk@dotsize{%
/DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }}
\psset@dotsize{2pt 2}
\def\psset@dotscale#1{%
\pst@getscale{#1}\psk@dotscale
\ifx\psk@dotscale\@empty
\def\psk@xdotscale{1 }%
\def\psk@ydotscale{1 }%
\else
\let\psk@xdotscale\pst@tempg
\let\psk@ydotscale\pst@temph
% DG/SR modification begin - Oct. 17, 1997 - Patch 5
%\fi}
\fi
\pst@getdotsize%
\psset@dotsize{\pst@dimg\space\pst@@dimtonum\pst@dimh}}
%\psset@dotscale{1}
% DG/SR modification end
\def\pst@Getangle#1#2{%
\pst@getangle{#1}\pst@tempg
\def\pst@temph{0. }%
\ifx\pst@tempg\pst@temph
\def#2{}%
\else
\edef#2{\pst@tempg\space rotate }%
\fi}
\def\psset@dotangle#1{%
\pst@getangle{#1}\psk@@dotangle
\ifdim\psk@@dotangle\p@=\z@
\let\psk@dotangle\@empty
\else
% DG/SR modification begin - Aug. 8, 1997 - Patch 4
%\edef\psk@dotangle{\psk@@dotangle rotate }
\edef\psk@dotangle{\psk@@dotangle rotate }%
% DG/SR modification end
\fi}
\psset@dotangle{0}
\def\pst@getdotsize{%
\pst@dimg=\psk@@@dotsize\pslinewidth
\advance\pst@dimg\psk@@dotsize\p@
\pst@dimh=\psk@ydotscale\pst@dimg
\pst@dimg=\psk@xdotscale\pst@dimg
\divide\pst@dimh 2
\divide\pst@dimg 2\relax}
% DG/SR modification begin - Oct. 17, 1997 - Patch 5
\psset@dotscale{1}
% DG/SR modification end
\def\psdot{\pst@object{psdot}}
\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}}
\def\psdot@ii(#1){%
\begin@SpecialObj
\pst@@getcoor{#1}%
\addto@pscode{%
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}%
\pst@coor Dot}%
\end@SpecialObj}
\def\psdots{\pst@object{psdots}}
\def\psdots@i{%
\begin@SpecialObj
\pst@getcoors[\psdots@ii}
\def\psdots@ii{%
\addto@pscode{false \tx@NArray \psdots@iii}%
\end@SpecialObj}
\def\psdots@iii{%
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}
newpath
n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat}
% DG: dead code (to suppress until \psset@dotstyle) ? - Aug. 4, 1997
\def\tx@SQ{SQ }
\def\tx@ST{ST }
\def\tx@SP{SP }
\def\pst@gdot#1{/Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def }
\@namedef{psds@*}{\pst@gdot{0 0 DS \tx@SD}}
\@namedef{psds@o}{%
/r2 DS CLW sub def
\pst@gdot{0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD}}
\@namedef{psds@square*}{%
/r1 DS .886 mul def
\pst@gdot{r1 \tx@SQ}}
\@namedef{psds@square}{%
/r1 DS .886 mul def /r2 r1 CLW sub def
\pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}}
\@namedef{psds@triangle*}{%
/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
\pst@gdot{x1 y1 \tx@ST}}
\@namedef{psds@triangle}{%
/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
/y2 y1 CLW add def /x2 y2 1.732 mul neg def
\pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}}
\@namedef{psds@pentagon*}{%
/r1 DS 1.149 mul def
\pst@gdot{r1 \tx@SP}}
\@namedef{psds@pentagon}{%
DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED
\pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}}
\@namedef{psds@+}{%
/DS DS 1.253 mul def
\pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}}
\@namedef{psds@|}{%
\psk@tbarsize CLW mul add 2 div /DS ED
\pst@gdot{0 DS moveto 0 DS neg L stroke}}
% DG: end dead code?
\def\psset@dotstyle#1{%
\@ifundefined{psds@#1}%
{\@pstrickserr{Dot style `#1' not defined}\@eha}%
{\edef\psk@dotstyle{#1}}}
\psset@dotstyle{*}
\def\tx@FontDot{FontDot }
\def\newpsfontdot#1[#2]#3#4{%
\@namedef{psds@#1}{%
/#3 \psk@@dotangle [#2] \tx@FontDot
/Dot { moveto #4 show } bind def }}
\def\newpsfontdotH#1[#2]#3#4#5{%
\@namedef{psds@#1}{%
/#3 \psk@@dotangle [#2] \tx@FontDot
/Dot {
moveto
\iftrue
gsave \pst@usecolor\psfillcolor #5 show grestore
\fi
#4 show
} bind def }}
\pstheader{pst-dots.pro}
\newpsfontdot{*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
\newpsfontdotH{o}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
\newpsfontdotH{Bo}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
\newpsfontdotH{triangle}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
\newpsfontdotH{Btriangle}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
\newpsfontdot{triangle*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
\newpsfontdotH{square}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
\newpsfontdotH{Bsquare}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
\newpsfontdot{square*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
\newpsfontdotH{pentagon}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
\newpsfontdotH{Bpentagon}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
\newpsfontdot{pentagon*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
% DG/SR modification begin - Mar. 18, 1997
%\newpsfontdot{diamond*}%
%[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>}
%\newpsfontdot{diamond}%
%[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>}
\newpsfontdot{diamond}%
[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>}
\newpsfontdot{diamond*}%
[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>}
% DG/SR modification end
\newpsfontdot{oplus}%
[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{Symbol}{<C5>}
\newpsfontdot{otimes}%
[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{Symbol}{<C4>}
\newpsfontdot{x}%
[1.8 0.0 0.0 1.8 -0.495 -0.4788]{Symbol}{<B4>}
\newpsfontdot{+}%
[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{Times-Roman}{<2B>}
\newpsfontdot{asterisk}%
[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{Times-Roman}{<2A>}
\newpsfontdot{B+}%
[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{Times-Bold}{<2B>}
\newpsfontdot{Basterisk}%
[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{Times-Bold}{<2A>}
\newpsfontdot{|}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{Helvetica}{(|)}
[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{Helvetica}{(|)}
% DG/SR modification end
\newpsfontdot{B|}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{Helvetica-Bold}{(|)}
[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{Helvetica-Bold}{(|)}
% DG/SR modification end
\iffalse
\newpsfontdot{*}%
[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{Symbol}{<B7>}
\newpsfontdot{o}%
[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{Symbol}{<B0>}
\newpsfontdot{Bo}%
[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{Times-Bold}{<CA>}
\fi
\newdimen\pslinearc
\def\psset@linearc#1{\pssetlength\pslinearc{#1}}
\psset@linearc{0pt}
\def\psline{\pst@object{psline}}
\def\psline@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psline@ii}}
\def\psline@ii{%
\addto@pscode{\pst@cp \psline@iii \tx@Line}%
\end@OpenObj}
\def\psline@iii{%
\ifdim\pslinearc>\z@
/r \pst@number\pslinearc def
/Lineto { \tx@Arcto } def
\else
/Lineto /lineto load def
\fi
\ifshowpoints true \else false \fi}
\def\qline(#1)(#2){%
\def\pst@par{}%
\begin@SpecialObj
\def\pst@linetype{0}%
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{%
\pst@tempa moveto \pst@coor L
\@nameuse{psls@\pslinestyle}}%
\end@SpecialObj}
\def\pspolygon{\pst@object{pspolygon}}
\def\pspolygon@i{%
\begin@ClosedObj
\def\pst@cp{}%
\pst@getcoors[\pspolygon@ii}
\def\pspolygon@ii{%
\addto@pscode{\psline@iii \tx@Polygon}%
\def\pst@linetype{1}%
\end@ClosedObj}
\def\psset@framearc#1{\pst@checknum{#1}\psk@framearc}
\psset@framearc{0}
\def\psset@cornersize#1{%
\pst@expandafter\psset@@cornersize{#1}\@nil}
\def\psset@@cornersize#1#2\@nil{%
\if #1a\relax
\def\psk@cornersize{\pst@number\pslinearc false }%
\else
\def\psk@cornersize{\psk@framearc true }%
\fi}
\psset@cornersize{relative}
\def\tx@Rect{Rect }
\def\tx@OvalFrame{OvalFrame }
\def\tx@Frame{Frame }
\def\psset@dimen#1{%
\pst@expandafter\psset@@dimen{#1}\@nil}
\def\psset@@dimen#1#2\@nil{%
\if #1o\relax
\def\psk@dimen{.5 }%
\else
\if #1m\relax
\def\psk@dimen{0 }%
\else
\if #1i\relax
\def\psk@dimen{-.5 }%
\fi
\fi
\fi}
\psset@dimen{outer}
\def\psframe{\pst@object{psframe}}
\def\psframe@i(#1){%
\@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}}
\def\psframe@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj}
\def\tx@BezierNArray{BezierNArray }
\def\tx@OpenBezier{OpenBezier }
\def\tx@ClosedBezier{ClosedBezier }
\def\tx@BezierShowPoints{BezierShowPoints }
\def\psbezier{\pst@object{psbezier}}
\def\psbezier@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psbezier@ii}}
\def\psbezier@ii{%
\addto@pscode{%
% DG/SR modification begin - Apr. 28, 1997 - Patch 1
% \psbezier doesn't work inside \pscustom
%\pst@cp
% DG/SR modification end
\ifshowpoints true \else false \fi
\tx@OpenBezier
\ifshowpoints \tx@BezierShowPoints \fi}%
\end@OpenObj}
\def\pscbezier{\pst@object{pscbezier}}
\def\pscbezier@i{%
\begin@ClosedObj
\pst@getcoors[\pscbezier@ii}
\def\pscbezier@ii{%
\addto@pscode{%
\ifshowpoints true \else false \fi
\tx@ClosedBezier
\ifshowpoints \tx@BezierShowPoints \fi}%
\chardef\pst@linetype=1
\end@ClosedObj}
\def\tx@Parab{Parab }
\def\parabola{\pst@object{parabola}}
\def\parabola@i{\pst@getarrows\parabola@ii}
\def\parabola@ii#1(#2)#3(#4){%
\begin@OpenObj
\pst@getcoor{#2}\pst@tempa
\pst@@getcoor{#4}%
\addto@pscode{\pst@tempa \pst@coor \tx@Parab}%
\end@OpenObj}
\def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth}
\psset@gridwidth{.8pt}
\def\psset@griddots#1{%
\pst@cntg=#1\relax
\edef\psk@griddots{\the\pst@cntg}}
\psset@griddots{0}
\def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor}
\psset@gridcolor{black}
\def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth}
\psset@subgridwidth{.4pt}
\def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor}
\psset@subgridcolor{gray}
\def\psset@subgriddots#1{%
\pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}}
\psset@subgriddots{0}
\def\psset@subgriddiv#1{%
\pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}}
\psset@subgriddiv{5}
\def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels}
\psset@gridlabels{10pt}
\def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor}
\psset@gridlabelcolor{black}
\def\tx@Grid{Grid }
\def\psgrid{\pst@object{psgrid}}
\def\psgrid@i{\@ifnextchar(%
{\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}}
\def\psgrid@ii(#1){\@ifnextchar(%
{\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}}
\def\psgrid@iii(#1)(#2){\@ifnextchar(%
{\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}}
\def\psgrid@iv(#1)(#2)(#3){%
\begin@SpecialObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\pst@@getcoor{#3}%
\ifnum\psk@subgriddiv>1
\addto@pscode{gsave
\psk@subgridwidth SLW \pst@usecolor\pssubgridcolor
\pst@tempb \pst@coor \pst@tempa
\pst@number\psxunit \pst@number\psyunit
\psk@subgriddiv\space \psk@subgriddots\space
{} 0 \tx@Grid grestore}%
\fi
\addto@pscode{gsave
\psk@gridwidth SLW \pst@usecolor\psgridcolor
\pst@tempb \pst@coor \pst@tempa
\pst@number\psxunit \pst@number\psyunit
1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor }
\psk@gridlabels \tx@Grid grestore}%
\end@SpecialObj}
\newif\ifpsmathbox
\psmathboxtrue
\def\pst@mathflag{\z@}
\newtoks\everypsbox
\let\pst@thisbox\relax
\long\def\pst@makenotverbbox#1#2{%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\setbox\pst@hbox=\hbox{%
\ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi
{\pst@thisbox\the\everypsbox#2}%
\ifnum\pst@mathflag>\z@$\fi}%
#1}
\def\pst@makeverbbox#1{%
\def\pst@afterbox{#1}%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\afterassignment\pst@beginbox
\setbox\pst@hbox\hbox}
\def\pst@beginbox{%
\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
\bgroup\aftergroup\pst@endbox
\pst@thisbox
\the\everypsbox}
\def\pst@endbox{%
\ifnum\pst@mathflag>\z@$\fi
\egroup
\pst@afterbox}
\def\pst@makebox{\pst@@makebox}
\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}}
\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}}
\psverbboxfalse
\def\pst@longbox{%
\def\pst@makebox{%
\gdef\pst@makebox{\pst@@makebox}%
\pst@makelongbox}}
\def\pst@makelongbox#1{%
\def\pst@afterbox{#1}%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\setbox\pst@hbox\hbox\bgroup
\aftergroup\pst@afterbox
\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
\begingroup
\pst@thisbox
\the\everypsbox}
\def\pst@endlongbox{%
\endgroup
\ifnum\pst@mathflag>\z@$\fi
\egroup}
\def\pslongbox#1#2{%
\@namedef{#1}{\pst@longbox#2}%
\@namedef{end#1}{\pst@endlongbox}}
\newdimen\psframesep
\def\psset@framesep#1{\pssetlength\psframesep{#1}}
\psset@framesep{3pt}
\newif\ifpsboxsep
\def\psset@boxsep#1{\@nameuse{psboxsep#1}}
\psset@boxsep{true}
\def\pst@useboxpar{%
\use@par
\if@star
\let\pslinecolor\psfillcolor
\solid@star
\let\solid@star\relax
\fi
\ifpsdoubleline \pst@setdoublesep \fi}
\def\psframebox{\pst@object{psframebox}}
\def\psframebox@i{\pst@makebox\psframebox@ii}
\def\psframebox@ii{%
\begingroup
\pst@useboxpar
\pst@dima=\pslinewidth
\advance\pst@dima by \psframesep
\pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima
\pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima
\pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima
\setbox\pst@hbox=\hbox{%
\ifpsboxsep\kern\pst@dima\fi
\begin@ClosedObj
\addto@pscode{%
\psk@cornersize
\pst@number\pst@dima neg
\pst@number\pst@dimb neg
\pst@number\pst@dimc
\pst@number\pst@dimd
.5
\tx@Frame}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj
\box\pst@hbox
\ifpsboxsep\kern\pst@dima\fi}%
\ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi
\leavevmode\box\pst@hbox
\endgroup}
\def\psdblframebox{\pst@object{psdblframebox}}
\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i}
\def\psclip#1{%
\leavevmode
\begingroup
\begin@psclip
\begingroup
\def\use@pscode{%
\pstVerb{%
\pst@dict
/mtrxc CM def
CP CP T
\tx@STV
\psk@origin
\psk@swapaxes
newpath
\pst@code
clip
newpath
mtrxc setmatrix
moveto
0 setgray
end}%
\gdef\pst@code{}}%
\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
\hbox to\z@{#1}%
\endgroup
\def\endpsclip{%
\end@psclip
\endgroup}%
\ignorespaces}
\def\endpsclip{\pst@misplaced\endpsclip}
\let\begin@psclip\relax
\def\end@psclip{\pstVerb{currentpoint initclip moveto}}
\def\AltClipMode{%
\def\end@psclip{\pstVerb{\pst@grestore}}%
\def\begin@psclip{\pstVerb{gsave}}}
\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
% DG modification begin - Apr. 3, 1997
% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus)
%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}}
\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}}
% DG modification end
\def\clipbox@@#1{%
\pssetlength\pst@dimg{#1}%
\leavevmode\hbox{%
\begin@psclip
\pst@Verb{%
CM \tx@STV CP T newpath
/a \pst@number\pst@dimg def
/w \pst@number{\wd\pst@hbox}a add def
/d \pst@number{\dp\pst@hbox}a add neg def
/h \pst@number{\ht\pst@hbox}a add def
a neg d moveto
a neg h L
w h L
w d L
closepath
clip
newpath
0 0 moveto
setmatrix}%
\unhbox\pst@hbox
\end@psclip}}
\def\psshadowbox{\pst@object{psshadowbox}}
\def\psshadowbox@i{\pst@makebox\psshadowbox@ii}
\def\psshadowbox@ii{%
\begingroup
\pst@useboxpar
\psshadowtrue
\psboxseptrue
\def\psk@shadowangle{-45 }%
\setbox\pst@hbox=\hbox{\psframebox@ii}%
\pst@dimh=\psk@shadowsize\p@
\pst@dimh=.7071\pst@dimh
\pst@dimg=\dp\pst@hbox
\advance\pst@dimg\pst@dimh
\dp\pst@hbox=\pst@dimg
\pst@dimg=\wd\pst@hbox
\advance\pst@dimg\pst@dimh
\wd\pst@hbox=\pst@dimg
\leavevmode
\box\pst@hbox
\endgroup}
\def\pscirclebox{\pst@object{pscirclebox}}
\def\pscirclebox@i{\pst@makebox\pscirclebox@ii}
\def\pscirclebox@ii{%
\begingroup
\pst@useboxpar
\setbox\pst@hbox=\hbox{%
\pst@nodehook
\pscirclebox@iii
\box\pst@hbox}%
\ifpsboxsep \pscirclebox@sep \fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\pscirclebox@iii{%
\if@star
\pslinewidth\z@
\pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor
newpath \pscirclebox@iv \tx@SD end}%
\else
\begin@ClosedObj
\def\pst@linetype{4}\showpointsfalse
\addto@pscode{%
\pscirclebox@iv CLW 2 div add 0 360 arc closepath}%
\end@ClosedObj
\fi}
\def\pscirclebox@iv{%
\pst@number{\wd\pst@hbox}2 div
\pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div
2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll
\tx@Pyth \pst@number\psframesep add }
\def\pscirclebox@sep{%
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\dp\pst@hbox
\divide\pst@dimb 2
\pst@dima=.5\wd\pst@hbox
\pst@pyth\pst@dima\pst@dimb\pst@dimc
\advance\pst@dimc\pslinewidth
\advance\pst@dimc\psframesep
\advance\pst@dimb-\pst@dimc
\setbox\pst@hbox=\hbox to2\pst@dimc{%
\hss
\vbox{\kern-\pst@dimb\box\pst@hbox}%
\hss}%
\advance\pst@dimb-\dp\pst@hbox
\dp\pst@hbox=-\pst@dimb}
\let\pst@nodehook\relax
\def\psCirclebox{\pst@object{psCirclebox}}
\def\psCirclebox@i{\pst@makebox\psCirclebox@ii}
\def\psCirclebox@ii{%
\begingroup
\pst@useboxpar
\pst@dima=\ht\pst@hbox
\advance\pst@dima\dp\pst@hbox
\divide\pst@dima\tw@
\pssetlength\pst@dimb\psk@radius
\setbox\pst@hbox=\hbox{%
\pst@nodehook
\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
\box\pst@hbox}%
\ifpsboxsep \psCirclebox@sep \fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psCirclebox@sep{%
\pst@dimc=\pst@dimb
\advance\pst@dimb-\pst@dima
\advance\pst@dima\pst@dimc
\setbox\pst@hbox=\hbox to\tw@\pst@dimc{%
\hss
\vrule width \z@ depth \pst@dimb height \pst@dima
\box\pst@hbox
\hss}}%
\def\psovalbox{\pst@object{psovalbox}}
\def\psovalbox@i{\pst@makebox{\psovalbox@ii}}
\def\psovalbox@ii{%
\begingroup
\pst@useboxpar
\psovalbox@iii
\ifpsboxsep\psovalbox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psovalbox@iii{%
\psovalbox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
0 360
\pst@number\pst@dimc CLW 2 div sub
\pst@number\pst@dimd CLW 2 div sub
\pst@number\pst@dima
\pst@number\pst@dimb
\tx@Ellipse
closepath}%
\def\pst@linetype{2}%
\end@ClosedObj
\unhbox\pst@hbox}}
\def\psovalbox@iv{%
\pst@dimc=\pslinewidth\advance\pst@dimc\psframesep
\pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox
\pst@dima=.5\wd\pst@hbox
\pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox
\pst@dimd=.707\pst@dimd
\advance\pst@dimd\pst@dimc
\advance\pst@dimc.707\wd\pst@hbox}
\def\psovalbox@sep{%
\setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}%
\pst@dimg=\pst@dimd
\advance\pst@dimg-\pst@dimb
\dp\pst@hbox=\pst@dimg
\advance\pst@dimd\pst@dimb
\ht\pst@hbox=\pst@dimd}
\def\psdiabox{\pst@object{psdiabox}}
\def\psdiabox@i{\pst@makebox{\psdiabox@ii}}
\def\psdiabox@ii{%
\begingroup
\pst@useboxpar
\psdiabox@iii
\ifpsboxsep\psdiabox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psdiabox@iv{%
\pst@dimg=.707\pslinewidth
\advance\pst@dimg.707\psframesep
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\pst@dimc=\pst@dima
\advance\pst@dimc\pst@dimg
\pst@dimd=\ht\pst@hbox
\advance\pst@dimd\dp\pst@hbox
\divide\pst@dimd 2
\pst@dimb=\pst@dimd
\advance\pst@dimb-\dp\pst@hbox
\advance\pst@dimd\pst@dimg}
\def\psdiabox@iii{%
\psdiabox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
\psline@iii
pop
.5
\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul
0
\pst@number\pst@dima \pst@number\pst@dimb
\tx@Diamond}%
\def\pst@linetype{4}%
\end@ClosedObj
\box\pst@hbox}}
\def\psdiabox@sep{%
\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}%
\multiply\pst@dimd 2
\advance\pst@dimd\pst@dimb
\ht\pst@hbox\pst@dimd
\advance\pst@dimd-2\pst@dimb
\dp\pst@hbox\pst@dimd}
\def\psset@trimode#1{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil}
\def\psset@@trimode#1#2#3\@nil{%
\let\pst@tempg#1\relax
\ifx\pst@tempg*%
\let\psk@@trimode\@empty
\let\pst@tempg#2\relax
\else
\let\psk@@trimode\relax
\fi
\edef\psk@trimode{%
\ifx R\pst@tempg 1 \else\ifx D\pst@tempg 2
\else\ifx L\pst@tempg 3 \else 0 \fi\fi\fi}}
\psset@trimode{U}
\def\pstribox{\pst@object{pstribox}}
\def\pstribox@i{\pst@makebox{\pstribox@ii}}
\def\pstribox@ii{%
\begingroup
\pst@useboxpar
\pstribox@iii
\ifpsboxsep\pstribox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\pstribox@iii{%
\pstribox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
\psline@iii
pop
.5
\pst@number\pst@dimc \pst@number\pst@dimd
\ifodd\psk@trimode exch \fi
\psk@trimode -90 mul
\pst@number\pst@dima \pst@number\pst@dimb
\tx@Triangle}%
\def\pst@linetype{2}%
\end@ClosedObj
\box\pst@hbox}}
\def\pstribox@iv{%
\pst@dimh=\pslinewidth
\advance\pst@dimh\psframesep
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg-\dp\pst@hbox
\divide\pst@dimg 2
\edef\pst@tempa{\number\pst@dimg sp}% For use by nodes.
\ifodd\psk@trimode
\pst@dimb\pst@dimg
\else
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\fi
\ifcase\psk@trimode
\pst@dimb=-\dp\pst@hbox
\advance\pst@dimb-\pst@dimh
\or
\pst@dima=-\pst@dimh
\or
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\pst@dimh
\or
\pst@dima=\wd\pst@hbox
\advance\pst@dima\pst@dimh
\fi
\pst@dimd=\dp\pst@hbox
\advance\pst@dimd\ht\pst@hbox
\ifx\psk@@trimode\relax
\pst@dimc=\wd\pst@hbox
\advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh
\multiply\pst@dimc 2
\advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh
\multiply\pst@dimd 2
\else
\ifodd\psk@trimode
\advance\pst@dimd 1.1547\wd\pst@hbox
\advance\pst@dimd 3.4641\pst@dimh
\pst@dimc=.866\pst@dimd
\else
\advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2)
\advance\pst@dimd 3\pst@dimh
\pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3))
\fi
\fi}
\def\pstribox@sep{%
\ifodd\psk@trimode
\advance\pst@dimb.5\pst@dimd
\ht\pst@hbox=\pst@dimb
\advance\pst@dimd-\pst@dimb
\dp\pst@hbox=\pst@dimd
\else
\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}%
\global\pst@dimg=.5\pst@dimc
\fi
\ifcase\psk@trimode
\dp\pst@hbox-\pst@dimb
\advance\pst@dimd\pst@dimb
\ht\pst@hbox\pst@dimd
\or
\pst@dimg=.5\wd\pst@hbox
\global\advance\pst@dimg-\pst@dima
\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}%
\or
\ht\pst@hbox\pst@dimb
\advance\pst@dimd-\pst@dimb
\dp\pst@hbox\pst@dimd
\or
\pst@dimg=\pst@dimc
\advance\pst@dimg-\pst@dima
\global\advance\pst@dimg.5\wd\pst@hbox
\setbox\pst@hbox\hbox to \pst@dimc{%
\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}%
\fi}
\def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA}
\def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB}
\def\psset@arcsep#1{%
\psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA}
\psset@arcsep{0}
\def\tx@ArcArrow{ArcArrow }
\def\psarc{\pst@object{psarc}}
\def\psarc@i{%
\@ifnextchar({\psarc@iii}{\psarc@ii}}
\def\psarc@ii#1{\addto@par{arrows=#1}%
\@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}}
\def\psarc@iii(#1)#2#3#4{%
\begin@OpenObj
\pst@getangle{#3}\pst@tempa
\pst@getangle{#4}\pst@tempb
\pst@@getcoor{#1}%
\pssetlength\pst@dima{#2}%
\addto@pscode{\psarc@iv \psarc@v}%
\gdef\psarc@type{0}%
\showpointsfalse
\end@OpenObj}
\def\psarc@iv{%
\pst@coor /y ED /x ED
/r \pst@number\pst@dima def
/c 57.2957 r \tx@Div def
/angleA
\pst@tempa
\psk@arcsepA c mul 2 div
\ifcase \psarc@type add \or sub \fi
def
/angleB
\pst@tempb
\psk@arcsepB c mul 2 div
\ifcase \psarc@type sub \or add \fi
def
\ifshowpoints\psarc@showpoints\fi
\ifx\psk@arrowA\@empty
\ifnum\psk@liftpen=2
r angleA \tx@PtoC
y add exch x add exch
moveto
\fi
\fi}
\def\psarc@v{%
x y r
angleA
\ifx\psk@arrowA\@empty\else
{ ArrowA CP }
{ \ifcase\psarc@type add \or sub \fi }
\tx@ArcArrow
\fi
angleB
\ifx\psk@arrowB\@empty\else
{ ArrowB }
{ \ifcase\psarc@type sub \or add \fi }
\tx@ArcArrow
\fi
\ifcase\psarc@type arc \or arcn \fi}
\def\psarc@type{0}
\def\psarc@showpoints{%
gsave
newpath
x y moveto
x y r \pst@tempa \pst@tempb
\ifcase\psarc@type arc \or arcn \fi
closepath
CLW 2 div SLW
[ \psk@dash\space ] 0 setdash stroke
grestore }
\def\psarcn{\pst@object{psarcn}}
\def\psarcn@i{\def\psarc@type{1}\psarc@i}
\def\pscircle{\pst@object{pscircle}}
\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}}
\def\pscircle@do(#1)#2{%
\if@star
{\use@par\qdisk(#1){#2}}%
\else
\begin@ClosedObj
\pst@@getcoor{#1}%
\pssetlength\pst@dimc{#2}%
\def\pst@linetype{4}%
\addto@pscode{%
\pst@coor
\pst@number\pst@dimc
\psk@dimen CLW mul sub
0 360 arc
closepath}%
\showpointsfalse
\end@ClosedObj
\fi
\ignorespaces}
\def\qdisk(#1)#2{%
\def\pst@par{}%
\begin@SpecialObj
\pst@@getcoor{#1}%
\pssetlength\pst@dimg{#2}%
\addto@pscode{\pst@coor \pst@number\pst@dimg \tx@SD}%
\end@SpecialObj}
\def\psset@radius#1{\pst@@getlength{#1}\psk@radius}
\psset@radius{.25cm}
\def\psCircle{\pst@object{psCircle}}
\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}}
\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}}
\def\pswedge{\pst@object{pswedge}}
\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}}
\def\pswedge@ii(#1)#2#3#4{%
\begin@ClosedObj
\pssetlength\pst@dimc{#2}
\pst@getangle{#3}\pst@tempa
\pst@getangle{#4}\pst@tempb
\pst@@getcoor{#1}%
\def\pst@linetype{1}%
\addto@pscode{%
\pst@coor
2 copy
moveto
\pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius
\pst@tempa \pst@tempb
arc
closepath}%
\showpointsfalse
\end@ClosedObj}
\def\tx@Ellipse{Ellipse }
\def\psellipse{\pst@object{psellipse}}
\def\psellipse@i(#1){\@ifnextchar(%
{\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}}
\def\psellipse@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{%
0 360
\pst@coor
\ifdim\psk@dimen\p@=\z@\else
\psk@dimen CLW mul
dup 4 -1 roll sub neg 3 1 roll sub
\fi
\pst@tempa
\tx@Ellipse
closepath}%
\def\pst@linetype{2}%
\end@ClosedObj}
\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}}
\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii}
\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}}
\long\def\multips@iii(#1)(#2)#3#4{%
\begingroup
\use@par
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\pst@cnta=#3\relax
\init@pscode
\addto@pscode{%
\pst@tempa T \the\pst@cnta\space \pslbrace
gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}%
\hbox to\z@{%
\def\init@pscode{%
\addto@pscode{%
gsave
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}%
\def\use@pscode{\addto@pscode{grestore}}%
\def\psclip##1{\pst@misplaced\psclip}%
\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
#4}%
\addto@pscode{grestore \pst@coor T \psrbrace repeat}%
\leavevmode
\use@pscode
\endgroup
\ignorespaces}
\def\scalebox#1{\pst@makebox{\@scalebox{#1}}}
\def\@scalebox#1{%
\begingroup
\pst@getscale{#1}\pst@tempa
\let\pst@tempc\pst@tempg
\let\pst@tempd\pst@temph
\@@scalebox
\endgroup}
\def\@@scalebox{%
\leavevmode
\hbox{%
\ifdim\pst@tempd\p@<\z@
\pst@dimg=\pst@tempd\ht\pst@hbox
\pst@dimh=\pst@tempd\dp\pst@hbox
\dp\pst@hbox=-\pst@dimg
\ht\pst@hbox=-\pst@dimh
\else
\ht\pst@hbox=\pst@tempd\ht\pst@hbox
\dp\pst@hbox=\pst@tempd\dp\pst@hbox
\fi
\pst@dima=\pst@tempc\wd\pst@hbox
\ifdim\pst@dima<\z@\kern-\pst@dima\fi
\pst@Verb{CP CP translate \pst@tempa \tx@NET}%
\hbox to \z@{\box\pst@hbox\hss}%
\pst@Verb{%
CP CP translate
1 \pst@tempc div 1 \pst@tempd div scale
\tx@NET}%
\ifdim\pst@dima>\z@\kern\pst@dima\fi}}
\pslongbox{Scalebox}{\scalebox}
\def\scaleboxto(#1,#2){\pst@makebox{\@scaleboxto(#1,#2)}}
\def\@scaleboxto(#1,#2){%
\begingroup
\pssetlength\pst@dima{#1}%
\pssetlength\pst@dimb{#2}%
\ifdim\pst@dima=\z@\else
\pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc
\edef\pst@tempc{\pst@tempc\space}%
\fi
\ifdim\pst@dimb=\z@
\ifdim\pst@dima=\z@
\@pstrickserr{%
\string\scaleboxto\space dimensions cannot both be zero}\@ehpa
\def\pst@tempa{}%
\def\pst@tempc{1 }%
\def\pst@tempd{1 }%
\else
\let\pst@tempd\pst@tempc
\fi
\else
\pst@dimc=\ht\pst@hbox
\advance\pst@dimc\dp\pst@hbox
\pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd
\edef\pst@tempd{\pst@tempd\space}%
\ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi
\fi
\edef\pst@tempa{\pst@tempc \pst@tempd scale }%
\@@scalebox
\endgroup}
\pslongbox{Scaleboxto}{\scaleboxto}
\def\tx@Rot{Rot }
\def\rotateleft{\pst@makebox{\@rotateleft\pst@hbox}}
\def\@rotateleft#1{%
\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
\pst@Verb{90 \tx@Rot}
\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}%
\pst@Verb{-90 \tx@Rot}}}}
\def\rotateright{\pst@makebox{\@rotateright\pst@hbox}}
\def\@rotateright#1{%
\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
\pst@Verb{-90 \tx@Rot}
\vbox to \z@{\hbox to \z@{\hss\box#1}\vss}%
\pst@Verb{90 \tx@Rot}}}}
\def\rotatedown{\pst@makebox{\@rotatedown\pst@hbox}}
\def\@rotatedown#1{%
\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1%
\pst@Verb{180 \tx@Rot}%
\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}%
\pst@Verb{-180 \tx@Rot}}}}
\pslongbox{Rotateleft}{\rotateleft}
\pslongbox{Rotateright}{\rotateright}
\pslongbox{Rotatedown}{\rotatedown}
\def\pst@starbox{%
\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}}
\def\pst@@makesmall#1{%
\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}}
\def\pst@@@makesmall#1{%
\pst@dimh=\psk@xref\wd#1%
\ifx\psk@yref\relax
\pst@dimg=\dp#1%
\else
\pst@dimg=\psk@yref\ht#1%
\advance\pst@dimg\psk@yref\dp#1%
\fi
\setbox#1=\hbox to\z@{%
\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}}
\def\psset@ref#1{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil}
\def\psset@@ref#1#2,#3,#4\@nil{%
\def\psk@xref{.5}%
\def\psk@yref{.5}%
\let\pst@makesmall\pst@@@makesmall
\ifx\@empty#3\@empty
\@nameuse{getref@#1}%
\@nameuse{getref@#2}%
\else
\pst@checknum{#1#2}\psk@xref
\pst@checknum{#3}\psk@yref
\fi}
\def\getref@c{\let\pst@makesmall\pst@@makesmall}
\def\getref@t{\def\psk@yref{1}}
\def\getref@b{\def\psk@yref{0}}
\def\getref@B{\let\psk@yref\relax}
\def\getref@l{\def\psk@xref{0}}
\def\getref@r{\def\psk@xref{1}}
\psset@ref{c}
\def\psset@rot#1{%
\pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil}
\def\psset@@rot#1\@nil{%
\def\next##1@#1=##2@##3\@nil{%
\ifx\relax##2%
\pst@getangle{#1}\psk@rot
\else
\def\psk@rot{##2}%
\fi}%
\expandafter\next\pst@rottable @#1=\relax @\@nil}
\def\psset@@@rot#1#2\@nil{%
\psset@@rot#2\@nil
\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}}
\def\pst@rotlist{mark RAngle /a ED cleartomark a neg }
\def\pst@rottable{%
@0=%
@U=%
@L=90 %
@D=180 %
@R=-90 %
@N=\pst@rotlist
@W=\pst@rotlist 90 add %
@S=\pst@rotlist 180 add %
@E=\pst@rotlist 90 sub }
\psset@rot{0}
\def\tx@RotBegin{RotBegin }
\def\tx@RotEnd{RotEnd }
\def\pst@rotate#1#2{%
\ifx#1\@empty\else
\setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}%
\fi}
\def\psput@cartesian#1{%
\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}}
\def\psput@special#1{%
\hbox{%
\pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin}%
\box#1%
\pst@Verb{\tx@PutEnd}}}
\def\tx@PutCoor{PutCoor }
\def\tx@PutBegin{PutBegin }
\def\tx@PutEnd{PutEnd }
\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}}
\def\rput@i[#1]{\addto@par{ref={#1}}\rput@ii}
\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}}
\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}}
\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}}
\def\rput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\multirput{%
\def\pst@par{}%
\pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}}
\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii}
\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}}
\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv}
\def\multirput@iv(#1){%
\@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}}
\def\multirput@v(#1,#2)(#3,#4)#5{%
\pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}}
\def\multirput@vi(#1,#2)(#3,#4)#5{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\pssetxlength\pst@dima{#1}%
\pssetylength\pst@dimb{#2}%
\pssetxlength\pst@dimc{#3}%
\pssetylength\pst@dimd{#4}%
\pst@cntg=#5\relax
\pst@cnth=\@ne
\leavevmode
\loop
\vbox to \z@{%
\vss
\hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}%
\vskip\pst@dimb}%
\ifnum\pst@cntg>\pst@cnth
\advance\pst@dima\pst@dimc
\advance\pst@dimb\pst@dimd
\advance\pst@cnth\@ne
\repeat
\endgroup
\ignorespaces}
\newif\if@fixedradius
\def\cput{\pst@object{cput}}
\def\cput@i{\@fixedradiusfalse\cput@ii}
\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}}
\def\cput@iii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}}
\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}}
\def\cput@v#1{%
\begingroup
\use@par
\setbox\pst@hbox=\hbox{%
\psboxsepfalse
\if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi}%
\pst@@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\Cput{\pst@object{Cput}}
\def\Cput@i{\@fixedradiustrue\cput@ii}
\newdimen\pslabelsep
\def\psset@labelsep#1{\pssetlength\pslabelsep{#1}}
\psset@labelsep{5pt}
\def\psset@refangle#1{\pst@expandafter\psset@@refangle{#1}\@nil}
\def\psset@@refangle#1\@nil{%
\def\next##1@#1=##2"##3@##4\@nil{%
\ifx\relax##2%
\pst@getangle{#1}\psk@refangle
\def\psk@uputref{}%
\else
\def\psk@refangle{##2 }%
\def\psk@uputref{##3}%
\fi}%
\expandafter\next\pst@refangletable @#1=\relax"@\@nil}
\def\pst@refangletable{%
@r=0"20%
@u=90"02%
@l=180"10%
@d=-90"01%
@ur=45"22%
@ul=135"12%
@dr=-135"21%
@dl=-45"11}
\psset@refangle{0}
% DG/SR modification begin - Mar. 24, 1999 - Patch 10
%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}}
\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} 
% DG/SR modification end
\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii}
\def\uput@ii[#1]{%
\addto@par{refangle={#1}}%
\@ifnextchar({\uput@iv}{\uput@iii}}
\def\uput@iii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}}
\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}}
\def\uput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\uput@vi
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\uput@vi{%
\ifx\psk@uputref\@empty
\uput@vii\tx@UUput{}%
\else
\ifx\psk@rot\@empty
\expandafter\uput@viii\psk@uputref
\else
\uput@vii\tx@UUput{}%
\fi
\fi}
\def\uput@vii#1#2{%
\edef\pst@coor{%
\pst@number\pslabelsep
#2%
\pst@number{\wd\pst@hbox}%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\psk@refangle\space \ifx\psk@rot\@empty\else\psk@rot\space sub \fi
\tx@Uput #1}%
\setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}%
\setbox\pst@hbox=\psput@special\pst@hbox
\ifx\psk@rot\@empty\else\pst@rotate\psk@rot\pst@hbox\fi}
\def\uput@viii#1#2{%
\ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi
\setbox\pst@hbox=\vbox to\z@{%
\ifnum#2=1 \vskip\pslabelsep\else\vss\fi
\hbox to\z@{%
\ifnum#1=2 \hskip\pslabelsep\else\hss\fi
\box\pst@hbox
\ifnum#1=1 \hskip\pslabelsep\else\hss\fi}%
\ifnum#2=2 \vskip\pslabelsep\else\vss\fi}}
\def\tx@Uput{Uput }
\def\tx@UUput{UUput }
\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}}
\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii}
\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}}
\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}}
\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}}
\def\Rput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\Rput@vi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\Rput@vi{%
\pst@dimg=\dp\pst@hbox
\advance\pst@dimg\pslabelsep
\dp\pst@hbox=\pst@dimg
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg\pslabelsep
\ht\pst@hbox=\pst@dimg
\setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}%
\def\oldpsput{%
\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}}
\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii}
\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}}
\def\oldpsput@iii<#1>{\rput@iii{#1}}
\def\OldPsput{\let\psput\oldpsput}
\def\NewPsput{\let\psput\rput}
\def\pspicture{\begingroup\pst@ifstar\pst@picture}
\def\pst@picture{%
\@ifnextchar[{\pst@@picture}{\pst@@picture[0]}}
\def\pst@@picture[#1]#2(#3,#4){%
\@ifnextchar({\pst@@@picture[#1](#3,#4)}%
{\pst@@@picture[#1](0,0)(#3,#4)}}
\def\pst@@@picture[#1](#2,#3)(#4,#5){%
\pssetxlength\pst@dima{#2}%
\pssetylength\pst@dimb{#3}%
\pssetxlength\pst@dimc{#4}%
\pssetylength\pst@dimd{#5}%
\ifdim\pst@dima>\pst@dimc
\pst@dimg=\pst@dima
\pst@dima=\pst@dimc
\pst@dimc=\pst@dimg
\fi
\ifdim\pst@dimb>\pst@dimd
\pst@dimg=\pst@dimb
\pst@dimb=\pst@dimd
\pst@dimd=\pst@dimg
\fi
\def\pst@tempa{#1}%
\setbox\pst@hbox=\hbox\bgroup
\begingroup\KillGlue
\@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
\edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}\ignorespaces}
\def\pic@coor{(0,0)(0,0)(10,10)}
\def\endpspicture{%
\pst@killglue
\endgroup
\egroup
\ifdim\wd\pst@hbox=\z@\else
%\@pstrickserr{Extraneous space in the pspicture environment}%
%{Type \space <return> \space to procede.}%
\fi
\ht\pst@hbox=\pst@dimd
\dp\pst@hbox=-\pst@dimb
\setbox\pst@hbox=\hbox{%
\kern-\pst@dima
\ifx\pst@tempa\@empty\else
\advance\pst@dimd-\pst@dimb
\pst@dimd=\pst@tempa\pst@dimd
\advance\pst@dimd\pst@dimb
\lower\pst@dimd
\fi
\box\pst@hbox
\kern\pst@dimc}%
\if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
\leavevmode\box\pst@hbox
\endgroup}
\@namedef{pspicture*}{\pspicture*}
\@namedef{endpspicture*}{\endpspicture}
\def\tx@BeginOL{BeginOL }
\def\tx@InitOL{InitOL }
\def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}}
\def\AltOverlayMode{%
\def\pst@initoverlay##1{%
\pst@Verb{%
\tx@InitOL
/Visible { initclip } def
/Invisible {
CP newpath OLUnit itransform moveto clip newpath moveto
} def
/TheOL (##1) def}}}
\def\pst@overlay#1{%
\edef\curr@overlay{#1}%
\pst@Verb{(#1) BOL}%
\aftergroup\pst@endoverlay}
\def\pst@endoverlay{%
\pst@Verb{(\curr@overlay) BOL}}
\def\curr@overlay{all}
\newbox\theoverlaybox
\def\overlaybox{%
\global\setbox\theoverlaybox=\hbox\bgroup
\begingroup
\let\psoverlay\pst@overlay
\def\overlaybox{%
\@pstrickserr{Overlays cannot be nested}\@eha}%
\def\putoverlaybox{%
\@pstrickserr{You must end the overlay box
before using \string\putoverlaybox}}%
\psoverlay{main}%
\ignorespaces}
\def\endoverlaybox{\endgroup\egroup}
\def\putoverlaybox#1{%
\hbox{\pst@initoverlay{#1}\copy\theoverlaybox}}
\def\psoverlay{\@pstrickserr{\string\psoverlay\space
can only be used after \string\overlaybox}}
\ifx\pstcustomize\relax \input pstricks.con \fi
\catcode`\@=\PstAtCode\relax
%
\endinput
%%
%% END: pstricks.tex

math-ph0412008.extracted_bib
\begin{thebibliography}{99}

\bibitem{topver} M. Aganagic, A. Klemm, M. Marino, C. Vafa, {\em The topological vertex},
hep-th/0305132.


\bibitem{AtBo} M.\ Atiyah and R.\ Bott, {\em The moment map
and equivariant cohomology}, Topology {\bf 23} (1984), 1-28.


\bibitem{Beh} K.~Behrend, {\em Gromov-Witten invariants in algebraic geometry}, Invent. Math.
{\bf 127} (1997), 601--617.

\bibitem{BehFan} K.~Behrend and B.~Fantechi,
{\em The intrinsic normal cone}, Invent.\ Math.\
{\bf 128} (1997), 45--88.

\bibitem{BO}
S.~Bloch and A.~Okounkov,
\emph{The Character of the Infinite Wedge Representation},
Adv.\ Math.\ \textbf{149} (2000), no.~1, 1--60. 


\bibitem{jbrp} J.~Bryan and R.~Pandharipande, 
\emph{The local Gromov-Witten theory of curves}, math.AG/0411037.

\bibitem{CKen}
R.~Cerf and R.~Kenyon,
\emph{The low-temperature expansion of the Wulff crystal in the three-dimensional
Ising model}, 
Comm. Math. Phys {\bf 222} (2001),147-179.

\bibitem{CK}
D.~Cox and S.~Katz,
\emph{Mirror symmetry and algebraic geometry}, 
American Mathematical Society, Providence, RI, 1999.

\bibitem{DonThom} S. Donaldson and R. Thomas, {\em Gauge theory in higher dimensions}, in
{\em The geometric universe: science, geometry, and the work of Roger Penrose}, S. Huggett et.
al eds., Oxford Univ. Press, 1998.


\bibitem{ES}
G.~Ellingsrud, S.~Str\o mme, 
\emph{Bott's formula and enumerative geometry}.
  J.~Amer.\ Math.\ Soc.\  \textbf{9}  (1996),  no. 1, 175--193. 

\bibitem{FabPan}  C. Faber and R. Pandharipande,
\emph{Hodge integrals and Gromov-Witten theory}, Invent.\ Math.\
{\bf 139} (2000), 173-199.


\bibitem{fp}
W.~Fulton and R.~Pandharipande, 
{\em Notes on stable maps and quantum cohomology}, 
Algebraic geometry---Santa Cruz 1995,  45--96, 
Proc.\ Sympos.\ Pure Math., 62, Part 2, AMS, Providence, RI, 1997.


\bibitem{GP}
T.~Graber and R.~Pandharipande, 
{\em Localization
of virtual classes}, Invent.\ Math.\ {\bf 135} (1999), 487--518.



\bibitem{HorV}
 K.~Hori and C.~Vafa, 
\emph{Mirror Symmetry}, hep-th/0002222. 

\bibitem{IK}
A.~Iqbal and A.-K.~Kashani-Poor, 
\emph{{\rm SU(N)} Geometries and Topological String Amplitudes}, 
hep-th/0306032. 



\bibitem{INOV} A.~Iqbal, N.~Nekrasov, A.~Okounkov, C.~Vafa,
 \emph{Quantum Foam and Topological Strings}, hep-th/0312022.  

\bibitem{KKV}
S.~Katz, A.~Klemm, C.~Vafa, 
\emph{Geometric engineering of quantum field theories},
 Nuclear Phys.~B  \textbf{497}  (1997),  no. 1-2, 173--195.


 \bibitem{KO}
R.~Kenyon, A.~Okounkov,
\emph{Limit shapes and complex Burgers equation}, in preparation. 

\bibitem{KOS}
R.~Kenyon, A.~Okounkov, S.~Sheffield,
\emph{Dimers and Amoebae}, math-ph/0311005. 


\bibitem{KOV}
R.~Kenyon, A.~Okounkov, C.~Vafa, 
in preparation. 

\bibitem{KerO}
S.~Kerov and G.~Olshanski,
\emph{Polynomial functions on the set of Young diagrams},
C.~R.~Acad.\ Sci.\
Paris S\'er.~I Math., \textbf{319}, no.~2, 1994, 121--126.

\bibitem{Kon1}  M.\ Kontsevich, {\em Intersection theory on the moduli
space of curves and the matrix Airy function}, Comm.\ Math.\ Phys.
{\bf 147} (1992), 1-23.

\bibitem{Kon2}
M.\ Kontsevich,
\emph{Enumeration of rational curves via torus actions},
The moduli space of curves (Texel Island, 1994),  
335--368, Progr.\ Math., 129, Birkh�user Boston, Boston, MA, 1995.


\bibitem{LQW}
 W.-P.~Li, Zh.~Qin, W.~Wang,
\emph{Hilbert schemes, integrable hierarchies, and Gromov-Witten theory},
math.AG/0302211. 

\bibitem{LLLZ}
 J.~Li, C.-C.~Liu, K.~Liu, J.~Zhou\,,
\emph{A Mathematical Theory of the Topological Vertex}, 
math.AG/0408426. 

\bibitem{LiTian} J.~Li and G.~Tian, 
{\em Virtual moduli cycles and Gromov-Witten invariants
of algebraic varieties}, 
JAMS {\bf 11} (1998), 119--174.

\bibitem{LLZ1}
C.-C.~Liu, K.~Liu, J.~Zhou\,,
\emph{A Proof of a Conjecture of Marino-Vafa on Hodge Integrals},
math.AG/0306434. 

\bibitem{LLZ2}
C.-C.~Liu, K.~Liu, J.~Zhou\,,
\emph{A Formula of Two-Partition Hodge Integrals}, 
math.AG/0310272. 



\bibitem{LMN}
A.~Losev, A.~Marshakov, N.~Nekrasov,
\emph{Small Instantons, Little Strings and Free Fermions},
hep-th/0302191. 

\bibitem{mnop} D.~Maulik, N.~Nekrasov, A.~Okounkov, and R.~Pandharipande, {\em Gromov-Witten
theory and Donaldson-Thomas theory, I and II}, math.AG/0312059,
math.AG/0406092. 


\bibitem{Mir}
M.~Mirzakhani, 
\emph{Weil-Petersson volumes and intersection theory on the 
moduli spaces of curves}, available from \texttt{
http://abel.math.harvard.edu/$\sim$mirzak/}. 

\bibitem{NY}
H.~Nakajima, K.~Yoshioka,
\emph{Instanton counting on blowup, I}, math.AG/0306198. 

\bibitem{N}
N.~Nekrasov, 
\emph{Seiberg-Witten Prepotential From Instanton Counting},
hep-th/0206161. 

\bibitem{NO}
N.~Nekrasov and A.~Okounkov,
\emph{Seiberg-Witten Theory and Random Partitions},
hep-th/0306238. 


\bibitem{uses}
A.~Okounkov, 
\emph{The uses of random partitions}, 
math-ph/0309015. 

\bibitem{OP1}
A.~Okounkov and R.~Pandharipande,
\emph{Gromov-Witten theory, Hurwitz numbers, and
matrix models, I}, math.AG/0101147.

\bibitem{OP2}
A.~Okounkov and R.~Pandharipande,
\emph{Gromov-Witten theory, Hurwitz theory, and completed cycles},
math.AG/0204305.


\bibitem{OP3}
A.~Okounkov and R.~Pandharipande,
\emph{The equivariant Gromov-Witten theory of $\Pl$},
math.AG/0207233.

\bibitem{OP4}
A.~Okounkov and R.~Pandharipande,
\emph{Virasoro constraints for target curves},
math.AG/0308097.

\bibitem{OP5}
A.~Okounkov and R.~Pandharipande,
\emph{Hodge integrals and invariants of the unknot}, 
Geom.\ Topol.\ \textbf{8}(2004), 675-699. 

\bibitem{OP6}
A.~Okounkov and R.~Pandharipande,
\emph{Quantum cohomology of the Hilbert scheme of points in the plane},
math.AG/0411210. 


\bibitem{GWDT} 
A.~Okounkov and R.~Pandharipande, 
\emph{Gromov-Witten/Donaldson-Thomas correspondence for 
local curves}, in preparation. 


\bibitem{ORV} A. Okounkov, N. Reshetikhin, and C. Vafa, 
{\em Quantum Calabi-Yau and
classical crystals}, hep-th/0310061.


\bibitem{Thom} R.~Thomas, 
{\em A holomorphic Casson invariant for Calabi-Yau
3-folds, and bundles on K3 fibrations}, JDG {\bf 54} (2000), 367--438.

\bibitem{W} E.\ Witten, {\em Two dimensional gravity and intersection
theory on moduli space}, Surveys in Diff.\ Geom.\ {\bf 1} (1991), 243-310.


\end{thebibliography}