Correlation function of Schur process with application to local geometry of a random 3-dimensional Young diagram
Schur process is a time-dependent analog of the Schur measure on partitions studied in \cite{O}. Our first result is that the correlation functions of the Schur process are determinants with a kernel that has a nice contour integral representation in terms of the parameters of the process. This general result is then applied to a particular specialization of the Schur process, namely to random 3-dimensional Young diagrams. The local geometry of a large random 3-dimensional diagram is described in terms of a determinantal point process on a 2-dimensional lattice with the incomplete beta function kernel (which generalizes the discrete sine kernel). A brief discussion of the universality of this answer concludes the paper.
3d.tex
\documentclass[12pt]{article}

\usepackage{amsmath,amsfonts,amssymb,amsthm,pstricks,pst-plot,pst-node,eucal}
\usepackage[dvips]{graphics}

%\def\Sb{_\multilimits@}
%\def\endSb{\crcr\egroup\egroup\egroup}



\newcommand{\Z}{\mathbb{Z}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\oh}{\tfrac12}
\newcommand{\fS}{\mathfrak{S}}
\newcommand{\tfS}{\widetilde{\mathfrak{S}}}
\newcommand{\fM}{\mathfrak{M}}
\newcommand{\bK}{\mathsf{K}}
\newcommand{\bE}{\mathsf{E}}
\newcommand{\bB}{\mathsf{B}}
\newcommand{\cL}{\mathcal{L}}
\newcommand{\bS}{\mathsf{S}}
\newcommand{\bfS}{\boldsymbol{\mathfrak{S}}}
\DeclareMathOperator{\Prob}{Prob} 
\DeclareMathOperator{\Ad}{Ad} 
\DeclareMathOperator{\Var}{Var} 
\DeclareMathOperator{\Ai}{Ai} 
\DeclareMathOperator{\Res}{Res} 
\newcommand{\cdd}{\,\cdot\,}
\newcommand{\cl}{\{\lambda(t)\}}
\newcommand{\vac}{v_\emptyset}
\newcommand{\Dt}{\Delta t}
\newcommand{\Dh}{\Delta h}
\newcommand{\Pl}{\text{Planch}}
\newcommand{\qd}[1]{(#1;q)_\infty}

\newcommand{\timeprod}{\operatornamewithlimits{\overleftarrow{\prod}}}

\newpsobject{showgrid}{psgrid}{subgriddiv=1,griddots=5,gridlabels=0pt}


\newtheorem{lemma}{Lemma}
\newtheorem{theorem}{Theorem}
\newtheorem{corollary}{Corollary}
\DeclareMathOperator{\dil}{dilog} 
\DeclareMathOperator{\dilq}{dilog_q} 
\DeclareMathOperator{\grad}{grad} 

\newcommand{\LV}{\Lambda^{\frac\infty2}V}
\newcommand{\ul}{\underline}
\newcommand{\al}{\alpha} 




\theoremstyle{definition}
\newtheorem{remark}{Remark}
\newtheorem{definition}{Definition}

\begin{document}

\title{Correlation function of Schur process with 
application to local geometry of  a random 
3-dimensional Young diagram}
\author{Andrei Okounkov and Nikolai Reshetikhin\thanks{
 Department of Mathematics, University of California at
Berkeley, Evans Hall \#3840, 
Berkeley, CA 94720-3840. E-mail: okounkov@math.berkeley.edu, 
reshetik@math.berkeley.edu }
}
\date{}
\maketitle 

\begin{abstract}
Schur process is a time-dependent analog of the Schur measure on
partitions studied in \cite{O}. Our first result is that the correlation 
functions of the Schur process are
determinants with a kernel that has a nice contour integral
representation in terms of the parameters of the process. 
This general result is then applied to a particular specialization
of the Schur process, namely to random 3-dimensional Young diagrams. 
The local geometry of a large random 3-dimensional diagram is described 
in terms of a determinantal point process on a 2-dimensional lattice with
 the incomplete beta function kernel (which generalizes the discrete sine 
kernel). A brief discussion of the universality of this answer
concludes the paper. 
\end{abstract}

\section{Introduction}

\subsection{Schur measure and Schur process} 

\subsubsection{}

This paper is a continuation of \cite{O}. The Schur measure, introduced
 in \cite{O}, is a measure on partitions $\lambda$ which weights a 
partitions $\lambda$ proportionally to $s_\lambda(X) \, s_\lambda(Y)$,
where $s_\lambda$ is the Schur function and $X$ and $Y$ are two 
sets of variables. 



Here we consider
a time-dependent version of the Schur measure which we call
the Schur process, see Definition \ref{defS}. 
This is a measure on sequences $\cl$ such
that
$$
\Prob(\cl)\,\propto\,  \prod \bS^{(t)}(\lambda(t),
\lambda(t+1))\,,
$$ 
where the time-dependent weight $\bS^{(t)}(\lambda,\mu)$ is 
a certain generalization of a skew Schur function. It is given
by a suitably regularized infinite minor of a certain Toeplitz
matrix. This determinants can be also interpreted as a Karlin-McGregor
non-intersection probability \cite{KM}. The distribution of each 
individual $\lambda(t)$ is then a Schur measure with suitable
parameters.

In this paper, we consider the Schur process only in 
discrete time, although a continuous time formulation is 
also possible, see Section \ref{cont}.
 
The idea to make the Schur measure
time dependent was inspired, in part, by the paper 
\cite{J3} which deals with some particular instances of 
the general concept of the Schur processes introduced here.
For another development of the ideas of \cite{J3}, see
the paper \cite{PS} which appeared after the results of
the present paper were obtained. 


\subsubsection{}
Our main interest in this paper are the correlation functions
of the Schur process which, by definition, are
the probabilities that the random set
$$
\fS( \{\lambda(t)\}) = \{(t,\lambda(t)_i-i+\oh)\}\,, \quad t,i\in Z\,,
$$
contains a given set $U\subset \Z \times (\Z+\oh)$. 

Using the same infinite wedge machinery as in \cite{O}
we prove that the correlation functions of the Schur
process have a determinantal form
$$
\Prob\left(U\subset \fS(\cl)\right) =
\det\big(K(u_i,u_j)\big)_{u_i,u_j\in U}\,,
$$
 and give an explicit
contour integral representation for the correlation kernel $K$,
see Theorem \ref{t1}. This theorem is a generalization
of Theorem 2 in \cite{O}. 

\subsection{Asymptotics}

\subsubsection{}

The contour integral representation for correlation
kernel is particularly convenient for
asymptotic investigations. Only very elementary
means, namely residue calculus and basic saddle-point
analysis are needed to derive the asymptotics. 

\subsubsection{}

We illustrate this in
Section \ref{secA} by computing explicitly the
correlation functions asymptotics for 3-dimensional
Young diagram in the bulk of their limit shape. 
Three-dimensional diagrams, also known as plane
partition, is an old subject which has received 
recently a lot of attention. 
More specifically, the
measure on 3D diagrams $\pi$ such that
%
\begin{equation}
\Prob(\pi)\, \propto \, q^{|\pi|}\,, \quad 0<q<1\,,
\label{qpi}
\end{equation}
%
where $|\pi|$ is the volume of $\pi$,  is 
a particular specialization of the Schur process for which 
the time parameter has the meaning of an extra spatial
dimension.
As $q\to 1$, a typical partition, suitably scaled,
 approaches a limit
shape which was described in \cite{CK} and can be seen 
in Figure \ref{f7} below. The existence of this limit
shape and some of its properties were
first established by A.~Vershik \cite{V},
who used direct combinatorial methods. 


It is well known
that 3D diagrams are in bijection with certain rhombi
tiling of the plane, see for example Section 
\ref{rtil} below.  Local statistics of random domino tilings
have been the subject of intense recent studies, see
for example \cite{BP,CEP,CKP,K1} and the survey \cite{K2}.


The authors of \cite{CKP} 
computed local correlations for domino tilings
with periodic boundary conditions
and conjectured that the same formula holds in the 
thermodynamic limit for domino tilings of more 
general regions, see Conjecture 13.5 in \cite{CKP}. 

{}From the point of view of statistical mechanics,
the argument 
behind this conjecture can be the belief that 
in the thermodynamic limit and away from the 
boundary the local correlations depend 
only on macroscopic parameters, 
such as the density of tiles of a given kind.
In particular, in the case of 3D diagrams the densities
of rhombi of each of the 3 possible kinds
are uniquely fixed by  the 
tilt of the limit shape at the point in question.

\subsubsection{}


In this paper, we approach the local geometry of
random 3D diagrams using the general exact formulas
for correlation functions of the Schur process. For 3D diagrams, these 
general formulas specialize to contour integrals 
involving the quantum dilogarithm function \eqref{qdil}, see Corollary 
\ref{cor3D}. 


We compute the $q\to 1$ limit of the
correlation kernel explicitly. The result turns out to 
be  the discrete incomplete beta kernel,
see Theorem \ref{t2}. One can show, see Section \ref{iint}, that this kernel is
 a specialization of the kernel of \cite{CKP} when one of the 
parameters vanishes in 
agreement with Conjecture 13.5 of \cite{CKP}. 

 
The incomplete beta kernel is also a bivariate generalization of the 
discrete sine kernel which appeared in \cite{BOO} in the 
situation of the Plancherel specialization of the 
Schur measure, see also \cite{J3}. 



\subsection{Universality}

Although we focus on 
one specific asymptotic problem, our methods are both
very basic and completely general. 
They should apply, therefore, with little or no 
modification in a much wider variety of situations
yielding the same or analogous results. 
In other words, both the methods and the results
should be universal in a large class of asymptotic
problems. 

As explained in Section \ref{eqtime},
this universality should be especially robust for 
the equal time correlations, in which case the 
discrete sine kernel should appear.
This is parallel to the situation with random 
matrices \cite{J2}. 

\subsection{Acknowledgments}

We are grateful to R.~Kenyon and A.~Vershik for fruitful
discussions. A.O.\ was partially supported by NSF grant DMS-0096246
and a Sloan foundation fellowship. N.~R.\ 
was partially supported by NSF grant DMS-0070931.
Both authors were partially supported by CRDF grant RM1-2244. 


\section{Schur process}

\subsection{Configurations}

\subsubsection{} 

Recall that a partition is a sequence
$$
\lambda=(\lambda_1 \ge \lambda_2 \ge \lambda_3 \ge \dots \ge 0)
$$
of integers such that $\lambda_i=0$ for $i\gg 0$. The zero, or
empty, partition is denoted by $\emptyset$. The book \cite{M}
is a most comprehensive reference on partitions and symmetric functions. 

Schur process is a measure on sequences 
$$
\{ \lambda(t)\}\,, \quad t \in \Z\,,
$$
where each $\lambda(t)$ is a partition and $\lambda(t)=\emptyset$
for $|t|\gg 0$. We call the variable $t$ the time, even though 
it may have a different interpretation in applications. 

\subsubsection{} 

An example of such an object is a plane partition
which, by definition, is a 2-dimensional array of nonnegative numbers 
$$
\pi=(\pi_{ij})\,, \quad i,j=1,2,\dots\,,
$$
that are nonincreasing as function of both $i$ and $j$ and such that
$$
|\pi|=\sum \pi_{ij} 
$$
is finite. The plot of the function
$$
(x,y)\mapsto \pi_{\lceil x \rceil,\lceil y \rceil}\,, \quad x,y>0\,,
$$
is a 3-dimensional Young diagram with volume $|\pi|$. 
For example, Figure \ref{f1} shows the 
3D diagram corresponding to the plane partition
%
\begin{equation}
  \label{pi}
 \pi = 
\left (\begin {array}{cccc} 5&3&2&1\\\noalign{\medskip}4&3&1&1
\\\noalign{\medskip}3&2&1\\\noalign{\medskip}2&1\end {array}
\right )\,,
 \end{equation}
%
where the entries that are not shown are zero.

\begin{figure}[htbp]
  \begin{center}
    \scalebox{0.3}{\includegraphics{3dpart.ps}} 
    \caption{A 3-dimensional diagram $\pi$}
    \label{f1}
  \end{center}
\end{figure}

We associate to $\pi$ the sequence $\cl$ of its diagonal slices, 
that is, the sequence of partitions
%
\begin{equation}
  \label{pila}
 \lambda(t)=(\pi_{i,t+i})\,, \quad i\ge\max(0,-t) \,. 
\end{equation}
It is easy to see that a configuration $\cl$ corresponds
to a plane partition if and only if it satisfies the 
conditions 
%
\begin{equation}
  \label{laint}
 \dots \prec \lambda(-2) \prec \lambda(-1) \prec \lambda(0)
\succ \lambda(1) \succ \lambda(2) \succ \dots\,, 
\end{equation}
%
where $\lambda \succ \mu$ means that $\lambda$ and $\mu$ interlace,
that is, 
$$
\lambda_1 \ge \mu_1 \ge \lambda_2 \ge \mu_2 \ge \lambda_3 \ge \dots \,.
$$
In particular, the configuration $\cl$ corresponding to 
the diagram \eqref{pi} is 
$$
(2) \prec (3,1) \prec (4,2) \prec (5,3,1) \succ (3,1)\succ (2,1)\succ (1)\,.
$$

\subsubsection{} 

The mapping 
$$
\lambda \mapsto \fS(\lambda)=\{\lambda_i - i +\oh\} \subset \Z+\oh
$$
is a bijection of the of the set of partitions and the 
set $\bfS$ of  subsets $\fS\subset \Z+\oh$ such that
$$
| \fS \setminus (\Z+\oh)_{<0} | = | (\Z+\oh)_{<0} \setminus \fS | < 
\infty \,.
$$
The mapping
%
\begin{equation}
  \label{fS}
  \{\lambda(t)\}\mapsto
\fS( \{\lambda(t)\}) = \{(t,\lambda(t)_i-i+\oh)\} \subset \Z \times (\Z+\oh)\,,
\end{equation}
%
identifies the configurations of the Schur process 
with certain subsets of $\Z \times (\Z+\oh)$. In other words, the mapping
\eqref{fS} makes the Schur process a  random point field on
$\Z \times (\Z+\oh)$. 

For example, the subset $\fS( \{\lambda(t)\})$
corresponding to the 3D diagram from Figure \ref{f1} is shown in 
Figure \ref{f2}. One can also visualize $\fS( \{\lambda(t)\})$ as a
collection of nonintersecting paths as in Figure \ref{f2}. 

\begin{figure}[htbp]\psset{unit=0.5cm}
  \begin{center}
    \begin{pspicture}(-5,-5)(5,5)\showgrid
\scriptsize
\psaxes[axesstyle=frame,Ox=-5,Oy=-5,Dx=2,Dy=2,ticks=none](-5,-5)(5,5)
\psdots[dotscale=1.5](-5,-.5)(-5,-1.5)(-5,-2.5)(-5,-3.5)(-5,-4.5)(-4,-.5)(-4,-1.5)(-4,-2.5)(-4,-3.5)(-4,-4.5)(-3,1.5)(-3,-1.5)(-3,-2.5)(-3,-3.5)(-3,-4.5)(-2,2.5)(-2,-.5)(-2,-2.5)(-2,-3.5)(-2,-4.5)(-1,3.5)(-1, .5)(-1,-2.5)(-1,-3.5)(-1,-4.5)(0,4.5)(0,1.5)(0,-1.5)(0,-3.5)(0,-4.5)(1,2.5)(1,-.5)(1,-2.5)(1,-3.5)(1,-4.5)(2,1.5)(2,-.5)(2,-2.5)(2,-3.5)(2,-4.5)(3, .5)(3,-1.5)(3,-2.5)(3,-3.5)(3,-4.5)(4,-.5)(4,-1.5)(4,-2.5)(4,-3.5)(4,-4.5)(5,-.5)(5,-1.5)(5,-2.5)(5,-3.5)(5,-4.5)

\psline(-5,-.5)(-4,-.5)(-4,-.5)(-3,1.5)(-3,1.5)(-2,2.5)(-2,2.5)(-1,3.5)(-1,3.5)(0,4.5)(0,4.5)(1,2.5)(1,2.5)(2,1.5)(2,1.5)(3, .5)(3, .5)(4,-.5)(4,-.5)(5,-.5)
\psline(-5,-1.5)(-4,-1.5)(-4,-1.5)(-3,-1.5)(-3,-1.5)(-2,-.5)(-2,-.5)(-1, .5)(-1, .5)(0,1.5)(0,1.5)(1,-.5)(1,-.5)(2,-.5)(2,-.5)(3,-1.5)(3,-1.5)(4,-1.5)(4,-1.5)(5,-1.5)
\psline(-5,-2.5)(-4,-2.5)(-4,-2.5)(-3,-2.5)(-3,-2.5)(-2,-2.5)(-2,-2.5)(-1,-2.5)(-1,-2.5)(0,-1.5)(0,-1.5)(1,-2.5)(1,-2.5)(2,-2.5)(2,-2.5)(3,-2.5)(3,-2.5)(4,-2.5)(4,-2.5)(5,-2.5)
\psline(-5,-3.5)(-4,-3.5)(-4,-3.5)(-3,-3.5)(-3,-3.5)(-2,-3.5)(-2,-3.5)(-1,-3.5)(-1,-3.5)(0,-3.5)(0,-3.5)(1,-3.5)(1,-3.5)(2,-3.5)(2,-3.5)(3,-3.5)(3,-3.5)(4,-3.5)(4,-3.5)(5,-3.5)
\psline(-5,-4.5)(-4,-4.5)(-4,-4.5)(-3,-4.5)(-3,-4.5)(-2,-4.5)(-2,-4.5)(-1,-4.5)(-1,-4.5)(0,-4.5)(0,-4.5)(1,-4.5)(1,-4.5)(2,-4.5)(2,-4.5)(3,-4.5)(3,-4.5)(4,-4.5)(4,-4.5)(5,-4.5)
\end{pspicture}
    \caption{Point field and nonintersecting paths corresponding to the diagram in Figure \ref{f1}}
    \label{f2}
  \end{center}
\end{figure}


\subsection{Probabilities}




\subsubsection{} 

Schur process, the formal definition of which is given 
in Definition \ref{defS} below, is a measure on sequences $\cl$ such that 
$$
\Prob(\{\lambda(t)\}) \,\propto\,
\prod_{t\in \Z} \bS^{(t)}(\lambda(t),\lambda(t+1))\,,
$$
where $\bS^{(t)}(\mu,\lambda)$ is a certain time-dependent transition 
weight between the partition $\mu$ and $\lambda$ which will be
defined presently. 

The coefficient $\bS^{(t)}(\mu,\lambda)$
 is a suitably regularized infinite minor
of a certain  Toeplitz matrix. It can be viewed as a generalization of the 
Jacobi-Trudy determinant for a skew Schur function or as a form 
of Karlin-McGregor non-intersection probability \cite{KM}. 

\subsubsection{}

Let a function 
$$
\phi(z) = \sum_{k\in\Z} \phi_k \, z^k\,,
$$
be nonvanishing on the unit circle
$|z|=1$ with winding number $0$ and geometric mean $1$.
These two conditions mean that $\log \phi$ is a well defined
function with mean $0$ on the unit circle. For simplicity,
we additionally assume that $\phi$
is analytic in some neighborhood of the
unit circle. Many of the results below
hold under weaker assumptions on $\phi$ 
as can be seen, for example, by an approximation
argument. We will not pursue here the greatest analytic
generality.


\subsubsection{}

Given two subsets 
$$
X=\{x_i\},\, Y=\{y_i\} \in \bfS\,,
$$
we wish to assign a meaning to the following infinite
determinant:
%
\begin{equation}
  \label{dT}
\det(\phi_{y_i-x_j}) \,.  
\end{equation}
%
We will see that, even though there is no canonical way
to evaluate this determinant, different regularizations
differ by a constant which depends only on 
$\phi$ and not on $X$ and $Y$. 



Since our goal is to 
define probabilities only up to a constant factor, 
it is clear that different regularizations lead to 
the same random process. 

\subsubsection{} 

The function $\phi$ admits a Wiener-Hopf factorization 
of the form 
$$
\phi(z)=\phi^+(z)\,  \phi^-(z) 
$$
where the functions
$$
\phi^\pm(z)= 1 + \sum_{k\in\pm\mathbb{N}}
 \phi^\pm_{k} \, z^{k} 
$$
are analytic and nonvanishing in some neighborhood of the interior (resp., 
exterior) of the unit disk. 

There is a special case when the meaning of \eqref{dT} in 
unambiguous, namely, if $\phi^-(z)=1$ (or $\phi^+(z)=1$)
then the matrix is almost unitriangular and the determinant
in \eqref{dT} is essentially a finite determinant. This 
determinant is then a Jacobi-Trudy determinant for a skew Schur 
function
$$
\det\left(\phi^+_{\lambda_i-\mu_j+j-i}\right) = s_{\lambda/\mu} (\phi^+)\,,
$$
where $s_{\lambda/\mu} (\phi^+)$ is the skew Schur function 
$s_{\lambda/\mu}$ specialized so that
%
\begin{equation}
  \label{phih}
 h_k = \phi^+_k\,, 
\end{equation}
%
where $h_k$ are the complete homogeneous symmetric functions. 
Note that
%
\begin{equation}
  \label{svan}
  s_{\lambda/\mu}(\phi^+)=0\,, \quad \mu\not\subset\lambda \,.
\end{equation}
%

\subsubsection{}

\begin{definition}\label{defW}
  We define the transition weight by the following formula
%
\begin{equation}
  \label{T}
\bS_\phi(\mu,\lambda)=\sum_\nu s_{\mu/\nu}(\phi^-)\, s_{\lambda/\nu}(\phi^+) \,,
\end{equation}
%
where $s_{\lambda/\nu}(\phi^+)$ is defined by \eqref{phih} and $s_{\mu/\nu} (\phi^-)$ is the skew Schur function $s_{\mu/\nu}$
specialized so that
%
\begin{equation*}
 h_k = \phi^-_{-k}\,.  
\end{equation*}
%
\end{definition}

Note that if the determinant $\det(\phi_{\lambda_i-\mu_j+j-i})$ were
unambiguously defined and satisfied the Cauchy-Binet formula then 
it would equal \eqref{T} because 
$$
\big(\,\phi_{i-j}\,\big) = \big(\,\phi^+_{i-j}\,\big) \,  \big(\,\phi^-_{i-j}\,\big)\,.
$$
Also note that because of \eqref{svan}
the sum in \eqref{T} is finite, namely, it ranges over all 
$\nu$ such that $\nu\subset\mu,\lambda$.  

\subsubsection{}

In what follows, we will assume that the reader is familiar
with the basics of the infinite wedge formalism, see for 
example Chapter 14 of the book \cite{K} by V.~Kac.
An introductory account of this formalism, together
with some probablistic applications, can be found
in the lectures \cite{O2}.  We will
use the notation conventions of the appendix to \cite{O}
summarized for the reader's convenience in the appendix to
this paper. 

Consider the following vertex operators
$$
\Gamma_\pm(\phi)=\exp\left(
\sum_{k=1}^\infty (\log \phi)_{\mp k} \, \, \alpha_{\pm k} \right)\,,
$$
where $(\log \phi)_k$ denotes the coefficient of $z^{k}$
in the Laurent expansion of $\log \phi (z)$. In particular, if 
the algebra of symmetric functions is specialized as in 
\eqref{phih} then 
$$
(\log \phi)_k = \frac{p_k}{k}\,,\quad k=1,2,3,\dots\,,
$$
where $p_k$ is the $k$th power-sum symmetric function.

It is well known, see for example Exercise 14.26 in \cite{K},
that the matrix coefficient of the operators $\Gamma_\pm$
are the skew Schur functions, namely
$$
(\Gamma_-(\phi) \, v_\mu,
v_\lambda) = s_{\lambda/\mu}(\phi^+)\,.
$$
It follows that 
%
\begin{equation}
  \label{Tver}
  \bS_\phi(\mu,\lambda) = (\Gamma_-(\phi) \, \Gamma_+(\phi) \, v_\mu,
v_\lambda) \,.
\end{equation}
%
It is clear from the commutation relation 
%
\begin{equation}
  \label{commG}
  \Gamma_+(\phi)  \Gamma_-(\phi) = 
e^{\sum  k \, (\log \phi)_k (\log \phi)_{-k}} \, 
\Gamma_-(\phi) \, \Gamma_+(\phi) 
\end{equation}
%
that different ordering prescriptions in \eqref{Tver},
which produce different regularizations of \eqref{dT}, all
differ by a constant independent of $\mu$ and $\lambda$. 



\subsubsection{}

Now suppose that for any half-integer $m\in \Z+ \oh$ we choose,
independently, a function 
$$
\phi[m](z)=\sum_{k\in \Z} \phi_k[m] \, z^k 
$$
as above so that the series
$$
\sum_{m\in\Z} \log\phi[m](z)
$$
converges absolutely and uniformly in some neighborhood of the unit disk.
This assumption is convenient but can be weakened.
 The functions  $\phi[m]$
will be the parameters of the Schur process. 

\begin{definition}\label{defS}
The
probabilities of the Schur process are given by
$$
\Prob(\{\lambda(t)\}) = \frac1Z \, \prod_{m\in \Z+1/2} 
\bS_{\phi[m]}\left(\lambda(m-\oh),\lambda(m+\oh)\right)\,,
$$
where the transition weight $\bS_\phi$ is defined in 
Definition \ref{defW} and $Z$ is the normalizing factor (partition function)
$$
Z=\sum_{\cl} \prod_{m\in \Z+1/2} 
\bS_{\phi[m]}\left(\lambda(m-\oh),\lambda(m+\oh)\right) \,.
$$
\end{definition}


\subsubsection{}

It follows from \eqref{Tver} that $Z$ is given by the 
following matrix coefficient
%
\begin{equation}
  \label{Zver}
  Z=\left(\timeprod_{m \in \Z+1/2} 
\Gamma_-(\phi[m]) \, \Gamma_+(\phi[m]) 
\, v_\emptyset, v_\emptyset\right) \,,
\end{equation}
%
where $\timeprod$ denotes the time-ordered product, that is,
the product in which operators are ordered from right to 
left in the increasing time order. 


Using \eqref{commG} and the following consequence of 
\eqref{ann}
%
\begin{equation}
  \label{fix}
  \Gamma_+(\phi) \, \vac = \vac \,.
\end{equation}
%
we compute the matrix  coefficient \eqref{Zver}
as follows
$$
Z=\exp\left(\sum_{m_1<m_2} \sum_k k \, (\log\phi[m_1])_k \,
(\log\phi[m_2])_{-k} \right)\,.
$$
Our growth assumptions on the functions $\phi[m]$ 
ensure the convergence of $Z$.

\subsubsection{} 
It is clear from the vertex-operator description that
%
\begin{equation}
\Prob(\lambda(t)=\mu) \, \propto \, s_\mu\left(\prod_{m<t} \phi^+[m]
\right) \, s_\mu\left(\prod_{m>t} \phi^-[m]
\right) \,,\label{Schr}
\end{equation}
%
where, for example, the first factor is the image of the 
Schur function under the specialization that sets $h_k$ to 
the coefficient of $z^k$ in the product of $\phi^+[m](z)$
over $m<t$. 

This means that the distribution of each individual $\lambda(t)$
is a Schur measure \cite{O} with parameters \eqref{Schr}. 

\subsubsection{}\label{restrict}

More generally, the restriction of the Schur process to 
any subset of times is again a Schur process with suitably
modified parameters. Specifically, let a subset
$$
\{t_k\} \subset \Z\,,\quad k\in \Z\,,
$$
be given and consider the restriction of the Schur process to this
set, that is, consider the process
$$
\{\widetilde\lambda(k)\}=\{\lambda(t_k)\}\,.
$$
It follows from the vertex operator description that
this is again a Schur process with parameters
$$
\widetilde\phi[l]=\prod_{t_{l-\frac12} < m <t_{l+\frac12}} \phi[m]\,,
\quad l,m\in\Z+\oh\,.
$$
The case of a finite set $\{t_k\}$ is completely analogous
and can be dealt with formally by allowing infinite values
of $t_k$'s. 

\subsubsection{}\label{cont}

The restriction property from Section \ref{restrict}
forms a natural basis for
considering the Schur process in continuous time. 

For this we need a function $\cL(z,s)$ of a 
continuous variable $s\in\R$ which will 
play the role of the density of $\log\phi$. The restriction
$\{\lambda(t_k)\}$ 
of the process $\lambda(t)$, $t\in\R$, to any discrete 
set of times $\{t_k\}$ is the Schur process with 
parameters
$$
\phi[m](z) = \exp\left(\int_{t_{m-\frac12}}^{t_{m+\frac12}} \cL(z,s) \, ds\right)\,,
\quad m\in \Z+\oh\,.
$$

\subsubsection{}

Let $q\in (0,1)$ and consider the probability measure 
$\fM_q$ on the 
set of all 3D diagrams such that 
$$
\Prob(\pi) \,\propto\, q^{|\pi|} \,.
$$
We claim that there exists a particular choice of the 
parameters of the Schur process which yield this measure
under the correspondence \eqref{pila}. Concretely, set
%
\begin{equation}
  \label{specp}
\phi_{3D}[m](z)=
\begin{cases}
(1-q^{|m|} z)^{-1}\,,  & m<0\,,\\
(1-q^{|m|} z^{-1})^{-1}\,, & m>0 \,,
\end{cases}
\qquad m\in\Z+\oh\,.  
\end{equation}
%
It is well known that if the algebra of the symmetric
functions is specialized so that
$$
h_k = c^k \,, \quad k=1,2,\dots \,,
$$
for some constant $c$, then 
$$
s_{\lambda/\mu}=
\begin{cases}
c^{|\lambda|-|\mu|}\,, &  \mu \prec \lambda\,,\\
0\,, & \mu \not\prec \lambda\,.
\end{cases}
$$
Therefore, we have
%
\begin{multline*}
\bS_{\phi_{3D}[m]}\left(\lambda(m-\oh),\lambda(m+\oh)\right)=\\
  \begin{cases}
    q^{m(|\lambda(m-\frac12)|-|\lambda(m+\frac12)|)}\,, &
m<0,\, \lambda(m-\frac12) \prec \lambda(m+\frac12)\quad\textup{or}\\
 &
m>0,\, \lambda(m-\frac12) \succ \lambda(m+\frac12)\,,\\
0\,, & \textup{otherwise} \,.
  \end{cases}  
\end{multline*}
%
It follows that for the specialization 
\eqref{specp} the Schur process is
supported on configurations of the shape \eqref{laint} and
the weight of a configuration \eqref{laint} is proportional to 
$$
q^{\sum  |\lambda(t)|}=q^{|\pi|} \,.
$$
In particular, the partition function $Z$ becomes
%
\begin{multline*}
 Z_{3D}=\exp\left(\sum_{m_1,m_2=1/2}^\infty \sum_k \frac{q^{k(m_1+m_2)}}k \,\right)=\\
\prod_{m_1,m_2} (1-q^{m_1+m_2})^{-1} = \prod_{n=1}^\infty (1-q^n)^{-n} \,,
\end{multline*}
%
which is the well-known generating function, due to McMahon,
for 3D diagrams.

  

\subsection{Correlation functions}

\subsubsection{}

\begin{definition}
 Given a subset $U\subset \Z\times (\Z+\oh)$, define
the corresponding correlation function by
$$
\rho(U)=\Prob\left(U\subset \fS(\cl)\right)\,.
$$ 
These correlation functions depend on the parameters $\phi[m]$ of the Schur process. 
\end{definition}


In this section we show that 
%
\begin{equation}
  \label{rhodet}
  \rho(U)=\det\big(K(u_i,u_j)\big)_{u_i,u_j\in U}\,,
\end{equation}
%
for a certain kernel $K$ which will be computed explicitly. 

\subsubsection{}

Suppose that
$$
U=\{u_1,\dots,u_n\}\,, \quad u_i=(t_i,x_i)\in \Z\times (\Z+\oh)\,,
$$
and the points $u_i$ are ordered so that
$$
t_1 \le t_2 \le t_3 \dots \le t_n \,.
$$
For convenience, we set
$t_0 =- \infty$.  From \eqref{Tver} 
and \eqref{yn} it is clear that
%
\begin{equation}
  \label{rver}
  \rho(U)=\frac1Z\, (R_U \, v_\emptyset,v_\emptyset)\,,
\end{equation}
%
where $R_U$ is the following operator
$$
R_U = \timeprod_{m>t_n} \Gamma_-(\phi[m]) \, \Gamma_+(\phi[m]) 
\timeprod_{i=1..n} \left(\psi_{x_i} \psi_{x_i}^* \, 
\timeprod_{t_{i-1} < m < t_i} \Gamma_-(\phi[m]) \, \Gamma_+(\phi[m]) 
\right)
$$

\subsubsection{}

Define the operator
$$
\Psi_{x}(t)=\Ad\left(\prod_{m>t} \Gamma_+(\phi[m]) \,
\prod_{m<t} \Gamma_-(\phi[m])^{-1} \right) \cdot \psi_x \,,
$$
where $\Ad$ denotes the action by conjugation, and define
the operator $\Psi^*_x(t)$ similarly. Note the ordering of
the vertex operators inside the $\Ad$ symbol is immaterial
because the vertex operators commute up to a central element.

It follows from \eqref{rver}, \eqref{fix}, and \eqref{Zver} that
$$
\rho(U)=\left(\timeprod \Psi_{x_i}(t_i)\, \Psi^*_{x_i}(t_i) \, \vac,\vac
\right) \,.
$$
Now we apply Wick formula in the following form

\begin{lemma}[Wick formula]
Let $A_i = \sum_k a_{i,k} \, \psi_k$ and 
$A^*_i = \sum_k a^*_{i,k}\, \psi^*_k$. Then
%
\begin{equation}
  \label{Wick}
  \left(\prod A_i \, A^*_i \, \vac, \vac\right)=
\det\big(K_A(i,j)\big)\,,
\end{equation}
%
where
$$
K_A(i,j)=
\begin{cases}
(A_i \, A^*_j \, \vac,\vac)\,, & i \ge j\,,\\
-(A^*_j \, A_i \, \vac, \vac)\,, & i < j \,.
\end{cases}
$$
\end{lemma}

\begin{proof}
 Both sides of \eqref{Wick} are linear in $a_{i,k}$ and
$a^*_{i,k}$, therefore it suffices to verify
\eqref{Wick} for some linear basis in the space of possible
$A_i$'s and $A^*_j$'s. A convenient linear basis is formed
by the series \eqref{psiz} as the parameter $z$ varies. Using the canonical
anticommutation relation satisfied by $\psi(z)$ and $\psi^*(z)$ one then 
verifies \eqref{Wick} directly. 
\end{proof}

We obtain the formula \eqref{rhodet} with
$$
K((t_1,x_1),(t_2,x_2))=
\begin{cases}
  \left(\Psi_{x_1}(t_1)\, \Psi^*_{x_2}(t_2) \, \vac,\vac\right)\,,
& t_1 \ge t_2 \,,\\
-\left(\Psi^*_{x_2}(t_2)\, \Psi_{x_1}(t_1) \, \vac,\vac\right) \,,
& t_1 < t_2 \,.\\
\end{cases}
$$
Note that for $t_1\ne t_2$ the operators 
$\Psi_{x_1}(t_1)$ and $\Psi^*_{x_2}(t_2)$ do not, in general, 
anticommute so the time ordering is important. However,
for $t_1=t_2$ and $x_1\ne x_2$, these operators do 
anticommute, so at equal time the ordering is immaterial. 




\subsubsection{}

A convenient generating function for the kernel $K$ can be 
obtained as follows. Set
%
\begin{equation}
\psi(z)=\sum_{k\in\Z+1/2} z^k \, \psi_k \,, 
\quad 
\psi^*(z)=\sum_{k\in\Z+1/2} z^{-k} \, \psi^*_k \,.\label{psiz}
\end{equation}
%
Set also 
$$
\Psi(t,z)=\Ad\left(\prod_{m>t} \Gamma_+(\phi[m]) \,
\prod_{m<t} \Gamma_-(\phi[m])^{-1} \right) \cdot \psi(z) \,,
$$
and define $\Psi^*(t,z)$ similarly. 

We have from \eqref{adal}
%
\begin{alignat*}{2}
  \Ad(\Gamma_\pm(\phi))\,\cdot\, &\psi(z) &&= \phi^\mp(z^{-1})\, \psi(z)\,,\\
\Ad(\Gamma_\pm(\phi))\,\cdot\, &\psi^*(z) &&= \phi^\mp(z^{-1})^{-1}\, \psi(z)\,.
\end{alignat*}
%
and therefore
%
\begin{equation*}
  \Psi(t,z)=\Phi(t,z)  \,
\psi(z)\,,  \quad
\Psi^*(t,z)=\Phi(t,z)^{-1} \,
\psi(z)\,, 
\end{equation*}
%
where
%
\begin{equation}
  \label{Phi}
 \Phi(t,z)=\frac{\prod_{m>t} \phi^-[m](z^{-1})}{\prod_{m<t} \phi^+[m](z^{-1})} \,. 
\end{equation}
%
Finally, it is obvious from the definitions that
%
\begin{align*}
 (\psi(z) \, \psi^*(w) \, \vac,\vac)&=
\frac{\sqrt{zw}}{z-w}\,, \quad |z|>|w| \,, \\
 -(\psi^*(w) \, \psi(z) \, \vac,\vac)&=
\frac{\sqrt{zw}}{z-w}\,, \quad |z|<|w| \,. 
\end{align*}
%
Putting it all together, we obtain the following

\begin{theorem}\label{t1}
We have
$$
 \rho(U)=\det\big(K(u_i,u_j)\big)_{u_i,u_j\in U}\,,
$$
where the kernel $K$ is determined by the following
generating function
\begin{align}
\bK_{t_1,t_2}(z,w)&=\sum_{x_1,x_2\in\Z+\frac12} z^{x_1} \, w^{-x_2} \,
K((t_1,x_1),(t_2,x_2))\,, \label{bK1}\\
&=\frac{\sqrt{zw}}{z-w} \, \frac{\Phi(t_1,z)}
{\Phi(t_2,w)}\,. \label{bK2}
\end{align}
%
Here the function $\Phi(t,z)$ is defined by \eqref{Phi}, and
\eqref{bK1} is the expansion of \eqref{bK2}
in the region $|z|>|w|$ if  $t_1 \ge t_2$ and
$|z|<|w|$ if $t_1 < t_2$. 
\end{theorem}


\subsubsection{}

In the special case of the measure $\fM_q$ on the 
3D diagrams the function 
\eqref{Phi} specializes to the following function
%
\begin{equation}
  \label{Phip}
  \Phi_{3D}(t,z)=\frac
{\prod_{m > \max(0,-t)} (1-q^{m}/z)}
{\prod_{m > \max(0,t)} (1-q^{m} z)}\,, \quad m\in\Z+\oh\,. 
\end{equation}
%
Consider the following function
%
\begin{equation}
  \label{qdil}
  \qd{z}=\prod_{n=0}^\infty (1-q^n z) \,.
\end{equation}
%
For various reasons, in particular because of the relation 
\eqref{qda}, this function is sometimes called the quantum
dilogarithm function \cite{FK}. 

It is clear that the function \eqref{Phip} has the
following expression in terms of the quantum dilogarithm 
$$
\Phi_{3D}(t,z)=
\begin{cases}
\dfrac{\qd{q^{1/2}/z}} 
{\qd{q^{1/2+t} z}}\,, & t \ge 0\,,\vspace{5pt} \\ 
\dfrac{\qd{q^{1/2-t}/z}}{\qd{q^{1/2} z}}\,, & t \le 0\,.
 \end{cases}
$$

\subsubsection{}\label{rtil}

In order to make a better connection with the geometry of
3D diagrams, let us introduce a different encoding of
diagrams by subsets in the plane. Given a plane 
partition
$$
\pi=(\pi_{ij})\,, \quad i,j=1,2,\dots\,,
$$
we set
$$
\tfS(\pi)=\{(j-i,\pi_{ij}-(i+j-1)/2)\}\,,
\quad i,j=1,2,\dots \,.
$$
There is a well-known correspondence between 3D diagrams and
tilings of the plane by rhombi. Namely, the tiles are the 
images of the faces of the 3D diagram under the projection
%
\begin{equation}
(x,y,z)\mapsto (t,h)=(y-x,z-(x+y)/2)\,.\label{xyz}
\end{equation}
%
The tiling corresponding to the diagram in Figure \ref{f1}
is shown in Figure \ref{f3}. 
%
\begin{figure}[htbp]\psset{unit=0.5cm}
  \begin{center}
    \begin{pspicture}(-7,-4)(7,5)
\scriptsize
\showgrid
\psset{dimen=middle}
\psaxes[axesstyle=frame,Ox=-7,Oy=-4,Dx=2,Dy=2,ticks=none](-7,-4)(7,5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](0,4.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](1,2.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](2, .5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](3,-1.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](4,-2.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](5,-3.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](6,-3.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-1,3.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](0,1.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](1,-1.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](2,-1.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](3,-3.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](4,-3.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-2,1.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-1,0.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](0,-1.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](1,-3.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](2,-3.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-3,0.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-2,-1.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-1,-3.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](0,-3.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-4,-2.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-3,-3.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-2,-3.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-5,-3.0)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-4,-3.5)(1,.5)
\psdiamond[fillstyle=solid,fillcolor=lightgray](-6,-3.5)(1,.5)
\end{pspicture}
    \caption{Horizontal tiles of the tiling corresponding to diagram in Figure \ref{f1}}
    \label{f3}
  \end{center}
\end{figure}

It is clear that under this 
correspondence the horizontal faces of a 3D diagram are
mapped to the horizontal tiles and that the positions 
of the horizontal tiles uniquely determine the tiling and
the diagram $\pi$. The set 
$$
\tfS(\pi) \subset \Z \times \oh \, \Z
$$
is precisely the set of the centers of the horizontal tiles. 
It is also clear that if $\cl$ corresponds to the diagram 
$\pi$, then
$$
(t,h) \in \tfS(\pi) \Leftrightarrow (t,x+|t|/2)\in \fS(\cl) \,.
$$
Theorem \ref{t1} specializes, therefore, to the following
statement

\begin{corollary}\label{cor3D}
For any set $\{(t_i,h_i)\}$, we have
$$
\Prob\left(\{(t_i,h_i)\} \subset \tfS(\pi)\right) =
\det\big[K_{3D} ((t_i,h_i),(t_j,h_j)) \big]\,,
$$
where the kernel $K_{3D}$ is given by the following formula
%
\begin{multline}
  \label{K3D}
  K_{3D} ((t_1,h_1),(t_2,h_2)) = \\
\frac1{(2\pi i)^2}
\int_{|z|=1\pm\epsilon} \int_{|w|=1\mp\epsilon} 
\frac1{z-w} \frac{\Phi_{3D}(t_1,z)}{\Phi_{3D}(t_2,w)}
\frac{dz \, dw}{z^{h_1+\frac{|t_1|+1}2} w^{-h_2-\frac{|t_2|-1}2}}\,.
\end{multline}
%
Here the function $\Phi_{3D}(t,z)$ is defined by
\eqref{Phip}, $0<\epsilon\ll 1$, and one picks the plus sign if $t_1 \ge t_2$
and the negative sign otherwise.
\end{corollary}



\section{Asymptotics}\label{secA}

\subsection{The local shape of a large 3D diagram}

\subsubsection{}

Our goal in this section is to illustrate how suitable 
is the formula \eqref{bK2} for asymptotic analysis. In 
order to be specific, we work out one concrete
example, namely the local shape of a 3D diagram
distributed according to the measure $\fM_q$ as $q\to 1$.
Our computations, however, will be of a very abstract and general 
nature and applicable to a much wider variety of
specialization.


The reader will notice that the passage to the 
asymptotics in \eqref{bK2} is so straightforward that even
the saddle-point analysis is needed in only a very weak 
form, namely as the statement that 
%
\begin{equation}\label{saddle}
\int_\gamma e^{M S(x)} \, dx  \to 0 \,, \quad M\to +\infty\,,
\end{equation}
%
provided the function $S(x)$ is smooth and $\Re S(x)< 0$ 
for all but finitely many points $x\in\gamma$. 


\subsubsection{}
Let $q=e^{-r}$ and $r\to +0$. We begin with the following 

\begin{lemma} 
We have the following convergence in probability
$$
r^3 |\pi| \to
2\zeta(3) \,, \quad r\to +0 \,,
$$
where $|\pi|$ is 
the volume of a 3D diagram 
$\pi$ sampled from  the measure $\fM_q$. 
\end{lemma}
\begin{proof}
First consider the expectation of $|\pi|$ 
\begin{equation*}
\bE|\pi| = \frac{q\frac{d}{dq} Z_{3D}}{Z_{3D}} =
\sum_{n\ge 1} \frac{n^2 q^n}{1-q^n} = 
\sum_{n,k\ge 1} n^2 q^{nk} = 
\sum_k \frac{q^k(1+q^k)}{(1-q^k)^3} 
\sim
\frac{2\zeta(3)}{r^3}  \,. 
\end{equation*}
%
Similarly, the variance of $|\pi|$ behaves like
$$
\Var |\pi| = q\frac{d}{dq} \, \bE|\pi| =
o(r^{-6})\,,
$$
whence $\Var (r^3|\pi|) \to 0$, which concludes the proof. 
\end{proof}

\subsubsection{}


It follows that as $r\to +0$ the typical 3D diagram $\pi$,
scaled by $r$ in all directions, approaches the suitably scaled
limit shape for typical 3D diagrams of a large volume described in \cite{CK}. 
Below we will
also see this limit shape appear from our calculations. 

We are interested in the $r\to+0$ limiting local structure of $\pi$
in the neighborhood of various points in the limit shape. In 
other words, we are interested in the limit of the 
kernel \eqref{K3D} as 
$$
r t_i \to \tau \,, \quad r h_i \to \chi \,,
$$
where the variables 
$\tau$ and $\chi$ describe the global position on the limit
shape, 
in such a way that the relative distances
$$
\Dt=t_1-t_2\,, \quad \Dh=h_1-h_2  \,,
$$
remain fixed. This limit is easy to obtain by a combination 
of residue calculus with saddle-point argument. Since the 
measure $\fM_q$ is obviously symmetric with respect to
the reflection $t\mapsto -t$, we can without loss of generality
assume that $\tau \ge 0$ in our computations. 

\subsubsection{}

We have the following $r\to+0$ asymptotics:
%
\begin{equation}
  \label{qda}
 \ln \qd{z} \sim  r^{-1} \, \int_0^z \frac{\ln(1-w)}{w} \, dw =
- r^{-1} \, \dil(1-z) \,, 
\end{equation}
%
where 
$$
\dil(1-z)=\sum_{n} \frac{z^n}{n^2}\,, \quad |z|\le 1\,,
$$
analytically continued 
with a cut along $(1,+\infty)$. 

Introduce the following
function
$$
S(z;\tau,\chi)=-(\tau/2+\chi)\ln z - \dil(1-1/z) + 
\dil(1-e^{-\tau} z) 
$$
and recall that we made the assumption that $\tau\ge 0$. 
The function $S(z;\tau,\chi)$ is analytic in the complex
plane with cuts along $(0,1)$ and $(e^\tau,+\infty)$. 


As $r\to +0$, the exponentially large term in the integrand
in \eqref{K3D} is
% 
\begin{equation}
  \label{expb}
 \exp\left(\frac1r(S(z;\tau,\chi)-S(w;\tau,\chi))\right)\,.  
\end{equation}
%
The saddle-point method suggests, therefore, to look at the 
critical points of the function $S(z;\tau,\chi)$. Since
$$
z \frac{d}{dz} S(z;\tau,\chi) = -\tau/2 - \chi -
\log(1-1/z)(1-e^{-\tau} z) \,,
$$
the critical points of $S$ are the roots of the quadratic 
polynomial 
$$
(1-1/z)(1-e^{-\tau} z)=e^{-\tau/2-\chi}\,.
$$
The two roots of this polynomial are complex conjugate
if 
%
\begin{equation}
  \label{ineqchi}
|e^{\tau/2}+e^{-\tau/2}-e^{-\chi}| < 2\,,   
\end{equation}
%
which can be expressed equivalently as
%
\begin{equation}
- 2 \ln \left(2 \cosh \frac\tau4\right) <  
\chi < - 2 \ln \left(2 \sinh \frac\tau4\right) \,.
\label{ineqchi2}
 \end{equation}
%
In the case when the roots are complex conjugate they lie on the circle 
$$
\gamma=\{|z|=e^{\tau/2}\}
$$
As we shall see below, the inequality \eqref{ineqchi}
describes precisely the possible values 
of $(\tau,\chi)$ that correspond to the bulk of
the limit shape. 


\subsubsection{}
The following elementary properties of the function 
$S(z;\tau,\chi)$
%
\begin{gather*}
  S(\bar z; \tau,\chi) = \overline{S(z;\tau,\chi)}\,,\\
  S(z;\tau,\chi) + S(e^{\tau}/z;\tau,\chi) = - (\tau/2+\chi) \tau \,,
\end{gather*}
%
imply that on the circle $\gamma$ the real part 
of $S$ is constant, namely,
$$
\Re S(z;\tau,\chi) = - (\tau/2+\chi) \tau/2 \,, \quad z\in\gamma\,.
$$
On $\gamma$ we also have
$$
z \frac{d}{dz} S(z;\tau,\chi) = 3\tau/2 - \chi - \ln|e^\tau-z|^2 \,,
\quad z\in\gamma\,,
$$


{}From this it is clear that when the critical points of $S$
are complex conjugate, they are the points of intersection of 
two following circles
%
\begin{equation}
  \label{intc}
  \{z_c,\bar z_c\}=\{|z|=e^{\tau/2}\} \cap 
\{|z-e^\tau|=e^{3\tau/4-\chi/2}\} \,.
\end{equation}
%
This is illustrated in Figure \ref{f4} which also shows the vector
field 
$$
\nabla\left(\Re S(z;\tau,\chi)\right) = \frac{z^2}{e^\tau} \, \frac{d}{dz} S(z) \,,
\quad z\in\gamma\,.
$$

\begin{figure}[htbp]
\begin{center}
\begin{pspicture}(-3.000000,-4.000000)(5.000000,4.000000)%\showgrid
\uput[l](-2.117000,0){$\gamma$}
\uput{10pt}[u](.995800,1.868000){$z_c$}
\uput{10pt}[d](.995800,-1.868000){$\bar z_c$}
\uput[l](2.117000,0){$e^{\tau/2}$}
\uput[r](4.482000,0){$e^{\tau}$}
\pcline{<-*}(2.504500,3.426000)(4.482000,0)
\Aput{$e^{\frac34\tau-\frac12\chi}$}
\SpecialCoor\pscircle(0,0){2.117000}
\psarc(4.482000,0){3.955000}{120}{240}
\psline{->}(2.117000;0.000000)(3.146000;0.000000)
\psline{->}(2.117000;18.000000)(2.992000;18.000000)
\psline{->}(2.117000;36.000000)(2.646000;36.000000)
\psline{->}(2.117000;54.000000)(2.270000;54.000000)
\psline{->}(2.117000;72.000000)(1.938000;72.000000)
\psline{->}(2.117000;90.000000)(1.665000;90.000000)
\psline{->}(2.117000;108.000000)(1.452000;108.000000)
\psline{->}(2.117000;126.000000)(1.291000;126.000000)
\psline{->}(2.117000;144.000000)(1.180000;144.000000)
\psline{->}(2.117000;162.000000)(1.115000;162.000000)
\psline{->}(2.117000;180.000000)(1.093000;180.000000)
\psline{->}(2.117000;198.000000)(1.115000;198.000000)
\psline{->}(2.117000;216.000000)(1.180000;216.000000)
\psline{->}(2.117000;234.000000)(1.291000;234.000000)
\psline{->}(2.117000;252.000000)(1.452000;252.000000)
\psline{->}(2.117000;270.000000)(1.665000;270.000000)
\psline{->}(2.117000;288.000000)(1.938000;288.000000)
\psline{->}(2.117000;306.000000)(2.270000;306.000000)
\psline{->}(2.117000;324.000000)(2.646000;324.000000)
\psline{->}(2.117000;342.000000)(2.992000;342.000000)
\end{pspicture}
\caption{Gradient of $\Re S(z)$ on the circle $\gamma=\{|z|=e^{\tau/2}\}$}
\label{f4}
\end{center} \end{figure}


\subsubsection{}

Now we are prepared to do the asymptotics in \eqref{K3D}. 
We can deform the contours of the integration in \eqref{K3D}
as follows
$$
 K_{3D} ((t_i,h_i),(t_j,h_j)) = 
\frac1{(2\pi i)^2}
\int_{(1\pm\epsilon)\gamma} dz  \int_{(1\mp\epsilon)\gamma} dw \quad
\dots
$$
where dots stand for the same integrand as in \eqref{K3D}, 
$0<\epsilon\ll 1$, and we pick the plus sign if $t_1 \ge t_2$
and the negative sign otherwise. 

Now we define the contours $\gamma_>$, $\gamma_<$, $\gamma_+$,
$\gamma_-$. This definition will be illustrated by Figure \ref{f5}.
The contour $\gamma_>$ is the circle $|z|=e^{\tau/2}$ slightly
deformed in the direction of the gradient of $\Re S$, see Figure
\ref{f4}. Similarly, the contour $\gamma_{<}$ is the
same circle $|z|=e^{\tau/2}$ slightly pushed in the opposite 
direction. The contours $\gamma_\pm$ are the arcs of the 
circle $|z|=e^{\tau/2}$ between $\bar z_c$  and $z_c$, oriented
toward $z_c$. 

\begin{figure}[htbp]
  \begin{center}
\begin{pspicture}(-4,-4)(4,4)%\showgrid
\psarc[arrowsize=5pt]{<-*}(0,0){3}{60}{300}
\psarc[arrowsize=5pt]{*->}(0,0){3}{-60}{60}
%\pscircle[linestyle=dashed](1.5,0){2.5981}
%\pscircle[linestyle=dotted](-1.5,0){3.9686}
\psccurve[linestyle=dashed](-2,0)(0,2.5)(1.5,2.5981)(4,0)(1.5,-2.5981)(0,-2.5)
\psccurve[linestyle=dotted]
(-4,0)(0,3.5)(1.5,2.5981)(2,0)(1.5,-2.5981)(0,-3.5)
\uput{3pt}[l](-4,0){$\gamma_<$}
\uput{3pt}[r](-2,0){$\gamma_>$}
\uput{3pt}[l](-3,0){$\gamma_-$}
\uput{3pt}[r](3,0){$\gamma_+$}
\uput{5pt}[ur](1.5,2.5981){$z_c$}
\uput{5pt}[dr](1.5,-2.5981){$\bar z_c$}
\psline(3,0)(0,0)(1.5,2.5981)
\psarc(0,0){1}{0}{60}
\SpecialCoor
\uput[ur](1;30){$\theta_*$}
\end{pspicture}

    \caption{Contours $\gamma_>$(dashed), $\gamma_<$(dotted), and
$\gamma_\pm$} \label{f5}
  \end{center}
\end{figure}

Deforming the contours, and picking the residue at $z=w$, we 
obtain
$$
K_{3D} ((t_i,h_i),(t_j,h_j)) = \int^{(1)} + \int^{(2)} \,,
$$
where
$$
\int^{(1)} = 
\frac1{(2\pi i)^2}
\int_{\gamma_<} dz  \int_{\gamma_>} dw \quad
\dots
$$
with the same integrand in as in \eqref{K3D} and
$$
\int^{(2)} = \frac1{2\pi i} \int_{\gamma_\pm} 
\frac
{\qd{q^{1/2+t_2} w}}
{\qd{q^{1/2+t_1} w}}
\frac{dw}{w^{\Dh+\Dt/2+1}} \,,
$$
where we choose $\gamma_+$ if $t_1  \ge t_2$ and 
$\gamma_-$ otherwise. As we shall see momentarily,
$$
\int^{(1)}  \to  0 \,, \quad r\to +0\,,
$$
while $\int^{(2)}$ has a simple limit. 

\subsubsection{}

It is obvious that 
$$
\int^{(2)} \to  \frac1{2\pi i} \int_{\gamma_\pm} 
(1-e^{-\tau} w)^{\Dt} 
\frac{dw}{w^{\Dh+\Dt/2+1}}\,, \quad r\to +0 \,.
$$
The change of variables $w=e^\tau w'$ makes this integral
a standard incomplete beta function integral:
$$
\int^{(2)} \to \frac{e^{-\tau(\Dh+\Dt/2)}}
{2\pi i} \int_{e^{-\tau} \gamma_\pm}
(1-w)^{\Dt} \frac{dw}{w^{\Dh+\Dt/2+1}}\,, \quad r\to +0 \,.
$$
Now notice that the prefactor $e^{-\tau(\Dh+\Dt/2)}$ will cancel 
out of any determinant with this kernel, so it can be ignored. 
We, therefore, make the following 



\begin{definition}
  Introduce the following incomplete beta function kernel
  $$
  \bB_\pm(k,l;z)= \frac{1}{2\pi i}\int_{\bar z}^{z} (1-w)^{k}
  w^{-l-1} \, dw\,,
  $$
  where the path of the integration crosses $(0,1)$ for the plus
  sign and $(-\infty,0)$ for the minus sign.
\end{definition}

\subsubsection{}

It is also obvious from our construction that the function 
$\Re S(z)$ reaches its maximal value on the contour $\gamma_<$
precisely at the points $z_c$ and $\bar z_c$. The same 
points are the minima of the function $S(z)$ on the contour
$\gamma_>$. The behavior of the integral $\int^{(1)}$
is thus determined by the term \eqref{expb} and, by the 
basic principle \eqref{saddle}, the limit of $\int^{(1)}$ 
vanishes. 


\subsubsection{}

We can summarize our discussion as follows. Set
$z_*=e^{-\tau} z_c$, in other words,
%
\begin{equation}
\label{zst}
  \{z_*, \bar z_*\} = \{|z|=e^{-\tau/2}\} \cap 
\{|z-1|=e^{-\tau/4-\chi/2}\}\,, \quad \Im z_*>0\,.
\end{equation}
%
It is  convenient to extend the meaning of 
$z_*$ to denote the point on the circle $|z|=e^{-\tau/2}$
which is the closest point to the circle $|z-1|=e^{-\tau/4-\chi/2}$
in case when the two circles do not intersect. In other
words, we complement the definition \eqref{zst} by  setting 
%
\begin{equation}
  \label{degz}
 z_*=
\begin{cases}
e^{-\tau/2} \,, & \quad  e^{-\chi/2} < e^{\tau/4}-e^{-\tau/4} \,, \\
-e^{-\tau/2}\,, & \quad  e^{-\chi/2} > e^{\tau/4}+e^{-\tau/4} \,. \\
\end{cases} 
\end{equation}

We have established the following


\begin{theorem}\label{t2}
Let $U=\{(t_i,h_i)\}$ and suppose that as $r\to+0$
$$
r t_i\to \tau\ge 0\,, \quad r h_i \to \chi\,,\quad i=1,2,\dots\,, 
$$
in such a way that the differences
$$
\Dt_{ij}=t_i-t_j\,, \quad \Dh_{ij}=h_i-h_j\,,
$$
remain fixed. Then, as $r\to+0$,
$$
\Prob\{U\subset\tfS(\pi)\}\to  
\det\left[
\bB_\pm\left(\Dt_{ij},\Dh_{ij}+\frac{\Dt_{ij}}2;z_*\right)
\right]\,,
$$
where the point $z_*=z_*(\tau,\chi)$ is defined in \eqref{zst}and \eqref{degz}
and the 
choice of the plus sign corresponds to $\Dt_{ij} =t_i - t_j\ge 0$. 
\end{theorem}

\begin{remark}
These formulas can be transformed, see Section \ref{iint}, into a
double integral of form 
considered in \cite{CKP}, Proposition 8.5 and Conjecture 13.5.
 \end{remark}



\begin{remark}
 Observe that the limit correlation are trivial in the cases
covered by \eqref{degz}. In other words, they are nontrivial
unless the inequality \eqref{ineqchi} is  satisfied. 
This means that the inequality \eqref{ineqchi} describes
the values of $(\tau,\chi)$ that correspond to the bulk of
the limit shape. 
 \end{remark}



\subsubsection{}

In particular, denote by $\rho_*(\tau,\chi)$ the
limit of $1$-point correlation function
$$
K_{3D}((t,h),(t,h)) \to \rho_*(\tau,\chi)\,, \quad 
rt\to\tau, \,  r h \to \chi\,. 
$$
This is the limiting density of the horizontal tiles at
the point $(\tau,\chi)$. We have the following 

\begin{corollary}\label{c2}
The limiting density of horizontal tiles is 
$$
\rho_*(\tau,\chi) = \frac{\theta_*}{\pi}  \,,
$$
where $\theta_*=\arg z_*$ (see Figure \ref{f5}), that is, 
%
\begin{equation}
\theta_*=
\arccos \left( \cosh\frac\tau2 - \frac{e^{-\chi}}2\right) \,. \label{th*}
\end{equation}
%
\end{corollary}

The level sets of the density as functions of 
$\tau$ and $\chi$ are plotted in Figure \ref{f6}. More
precisely, Figure \ref{f6} shows the curves  
$$
\theta_*(\tau,\chi)= \frac{k\pi}8\,, \quad k=0,\dots,8\,.
$$
The knowledge of density $\rho_*$ is equivalent to the
knowledge of the limit shape, see Sections \ref{limsh1} and
\ref{limsh2}. We point out, however, that additional
analysis is needed to prove the convergence to the limit
shape in a suitable metric as in \cite{CK}. 


\begin{figure}[htbp]
  \begin{center}
    \scalebox{0.6}{\includegraphics{3ddens.ps}} 
    \caption{Level sets of the density of horizontal tiles}
    \label{f6}
  \end{center}
\end{figure}



\subsubsection{}

Corollary \ref{c2} can be generalized as follows: 

\begin{corollary}
The equal time correlations are given by the
discrete sine kernel, that is, if 
$t_1=t_2=\dots$ then 
$$
\Prob\{U\subset\tfS(\pi)\}\to  
\det\left[
\frac{\sin(\theta_*(h_i-h_j))}{\pi(h_i-h_j)}
\right]\,, 
$$
as $r\to+0$.
\end{corollary}

\subsubsection{}\label{iint}

The incomplete beta kernel $\bB_\pm$ can be transformed 
into a double integral of the form considered in \cite{CKP}
as follows. 

Using the following standard integral 
$$
\frac1{2\pi i}\int_{|z|=\alpha} \frac{z^{-k-1} \, dz}{1-\beta z} 
=
\begin{cases}
  \beta ^k \,, & k\ge 0,\, |\alpha \beta|<1 \,,\\
  -\beta^k \,, & k<0, \, |\alpha\beta|>1 \,, \\
  0\,, & \text{otherwise}\,, 
\end{cases}
$$
we can replace the condition 
$$
|w-1|\lessgtr e^{-\tau/4-\chi/2}\,,
$$
in the definition of $\bB_\pm(k,l;z_*)$ by an extra
integral. We obtain
%
\begin{equation}
\bB_\pm(k,l;z_*)=\frac1{(2\pi i)^2}
\iint_
{
  \begin{subarray}{l}
    |w|=e^{-\tau/2}\\ |z|=e^{\tau/4+\chi/2}
\end{subarray}
}
\frac{z^{-k-1} w^{-l-1}}{1-z+zw}\, dz\, dw\,,
\label{eii}
\end{equation}
%
where the plus sign corresponds to $k\ge 0$. 

\subsubsection{}\label{limsh1}

Let $z(\tau,\chi)$ denote the $z$-coordinate of 
the point on the limit shape corresponding to the point 
$(\tau,\chi)$. This function can be obtained
by integrating the density $\rho_*(\tau,\chi)$ as
follows. 

Consider a tiling such as the one in the Figure 
\ref{f3} and the corresponding 3D diagram, which
for the tiling in  Figure \ref{f3} is shown in 
Figure \ref{f1}. It is clear that the $z$-coordinate
of the face corresponding to a given horizontal tile equals 
the number of holes (that is, positions not occupied by a horizontal
tile) below it.  It follows that
%
\begin{equation}
z(\tau,\chi)=\int_{-\infty}^\chi (1-\rho_*(\tau,s)) \, ds \,. \label{z}
\end{equation}
%
Here, of course, the lower limit of integration can 
be any number between $-\infty$ and the lower boundary of the
limit shape given by the equation \eqref{ineqchi2}. 

Integrating \eqref{th*} we obtain the following formula
%
\begin{equation}
z(\tau,\chi)=\frac1\pi\int_0^{\pi-\theta_*}
\frac{s \, \sin s \,ds}{\cos s + \cosh \frac\tau2}\,.\label{z1}
\end{equation}
%
This integral can be evaluated in terms of the 
dilogarithm function. From \eqref{xyz} we can now compute 
the other two coordinates as follows
%
\begin{equation}
x(\tau,\chi)=z(\tau,\chi)-\chi-\frac\tau2\,,
\quad
y(\tau,\chi)=z(\tau,\chi)-\chi+\frac\tau2\,,\label{xy}
\end{equation}
%
which gives a parametrization of the limit shape. 
A plot of the limit shape is shown in Figure \ref{f7}

\begin{figure}[htbp]
  \begin{center}
   \scalebox{0.6}{\includegraphics{3dlimshape.eps}}     
    \caption{The limit shape}\label{f7}
     \end{center}
\end{figure}

\subsubsection{}\label{limsh2}

To make the connection to the parametrization of the 
limit shape given in \cite{CK}, 
let us now substitute for $\rho_*$ in the integral
\eqref{z} the formula \eqref{eii}.
After a simple coordinate change we obtain 
$$
\rho_*(\tau,\chi) = \frac1{4\pi^2} \iint_0^{2\pi}
\frac{du \,dv}{1+e^{\chi/2+\tau/4+iu}+e^{\chi/2-\tau/4+iv}} \,.
$$
Integrating this in $\chi$ we obtain
$$
z(\tau,\chi)=\frac1{2\pi^2} \iint_0^{2\pi} 
\ln \left|1+e^{\chi/2+\tau/4+iu}+e^{\chi/2-\tau/4+iv}\right| \,
du \,dv \,.
$$
This together with \eqref{xy} is equivalent to following parametrization 
of the limit shape found in \cite{CK}
$$
(x,y,z)=\left(f(A,B,C)-2\ln A,f(A,B,C)-2\ln B, f(A,B,C)-2 \ln C
\right)\,, 
$$
where $A,B,C>0$ and 
$$
f(A,B,C)=\frac1{2\pi^2} \iint_0^{2\pi} 
\ln \left|A+ B e^{iu}+C e^{iv}\right| \,
du \,dv \,.
$$
This parametrization is manifestly symmetric in $x$, $y$, and $z$.
However, it involves integrals that are more complicated to 
evaluate than the parametrization \eqref{z1}. 

Note that the shape considered in \cite{CK} differs from 
our by a factor of $2$ due to different scaling conventions. 


\subsection{Universality}

\subsubsection{}
The reader has surely noticed that all that we really needed
for the asymptotics is to be able to deform the 
contours of integration as in Figure \ref{f5} so that
the points of the intersection of $\gamma_>$ and $\gamma_<$
the minima of the function $\Re S(z)$ on one curve and 
the maxima --- on the other. The intersection points
are then forced to be the critical points of the function
$S(z)$. 

It is clear that this 
principle is very general and applicable in a potentially 
very large variety of situations, such as, for example,
in the case of Plancherel measure, see below. In particular,
the existence of contours of a certain kind is a property
which is preserved under small perturbations. 

\subsubsection{}
One such perturbation would be to consider anisotropic 
partitions. The anisotropy in the $t$-direction is 
especially easy to introduce: one just should replace
$q^{|m|}$ in \eqref{specp} by $q^{V(m)}$ for some 
function $V$. 


\subsubsection{}\label{eqtime}
Observe that the asymptotics of the equal time correlations
are especially easy to obtain in our approach. This is 
because  
$$
\Res_{z=w}\frac{dz}{z-w} \, \frac{\Phi(t_1,z)}
{\Phi(t_2,w)}=1\,, \quad t_1=t_2\,,
$$
and hence the analog of the integral $\int^{(2)}$ becomes simply
the integral
$$
\int^{(2)} = \frac1{2\pi i} \int_{\gamma_\pm} 
\frac{dw}{w^{\Delta x+1}} \,,
$$
which leads to the discrete sine kernel in the variable 
$\Delta x$. 

\subsubsection{}
Let us illustrate these general remarks by briefly discussing 
 the asymptotics for
the poissonized Plancherel measure \cite{BOO}. It corresponds
to the following specialization of the Schur process
$$
\phi_{\Pl}[m]=
\begin{cases}
e^{\sqrt{\alpha} \, z}\,, & m=-\frac12\,,\\
e^{\sqrt{\alpha} \, z^{-1}}\,, & m=\frac12\,,\\
1\,, & \text{otherwise}\,,
\end{cases}
$$
where $\alpha>0$ is the poissonization parameter. 
In particular, only the partition $\lambda(0)$ is 
nontrivial. The correlation kernel at $t=0$ specializes
to 
$$
K_{\Pl}(x,y)=\frac1{(2\pi i)^2} \iint 
\frac{z^{-x-1/2} w^{y-1/2}}{z-w} \, e^{\sqrt{\alpha} (z-z^{-1}-w+w^{-1}) } \,
dz\,dw \,,
$$
which can be expressed in terms of Bessel functions of the 
argument $2\sqrt{\alpha}$, see \cite{BOO,J1}. 




\subsubsection{}

 The $\alpha\to\infty$ asymptotics
of the kernel $K_{\Pl}$ is easy to obtain from the 
classical asymptotics of the Bessel functions, see \cite{BOO}. 
It is, however, instructive to see 
how  this can be done even more quickly in our
framework. Assume that 
$$
\frac{x}{\sqrt{\alpha}}, \frac{y}{\sqrt{\alpha}} \to \xi
$$
in such a way that $\Delta=x-y$ remains fixed. The critical 
points of the action 
$$
S_{\Pl} = z-z^{-1}-\frac{\xi}{2}\, \ln z 
$$
are complex precisely when $|\xi|<2$,
in which case they are the points $e^{\pm i\theta}$, where 
$$
\theta = \arccos(\xi/2) \,.
$$
So, the same argument as we employed above immediately yields
the following formula from \cite{BOO}.
$$
K_{\Pl}(x,y) \to \frac{\sin \theta \Delta}{\pi \Delta}\,.
$$

\subsubsection{}

Of course, a finer analysis (which was carried out in \cite{BOO})
is needed to justify depoissonization in the asymptotics.
 In our situation, a similar problem is to pass from the 
$q\to 1$ asymptotics of the measure $\fM_q$ to the asymptotics
of the uniform measures on partitions of a given volume $N$
as $N\to\infty$. In other words, further work is needed to 
verify the equivalence of ensembles in the asymptotics. 

\subsubsection{}

Similarly, finer analysis is needed to work with the asymptotics
at the edges of the limit shapes where one expects to
see the Airy kernel appear. In the edge scaling, the following
equivalent version of the formula \eqref{bK2}
%
\begin{equation}\label{sumK}
K((t_1,x_1),(t_2,x_2))=
\sum_{m=1/2}^{\infty}
[z^{x_1+m} w^{-x_2-m}] \, \frac{\Phi(t_1,z)}
{\Phi(t_2,w)}\,,
\end{equation}
%
may be helpful because, by analogy to the situation with the
Plancherel measure \cite{BOO,J1}, one could expect to see this 
sum to become the integral representing the Airy kernel
$$
\frac{\Ai(x) \Ai'(y) - \Ai'(x) \Ai(y)}{x-y}=
\int_0^\infty \Ai(x+s) \, \Ai(y+s) \, ds \,.
$$
Further discussion of the Airy-type asymptotics of the
integrals of the form \eqref{bK2}, \eqref{K3D} can be
found in \cite{O2}.

\subsubsection{}

Recently, the techniques of this paper were used in 
\cite{FS} to prove that, indeed, the boundary of a random 3D
Young diagram converges to the Airy process. 

\appendix

\section{Summary of the infinite wedge formulas}

Let the space $V$ be spanned by $\ul{k}$, $k\in\Z+\oh$.
The space $\LV$  is, by definition, spanned by vectors 
$$
v_S=\ul{s_1} \wedge \ul{s_2} \wedge  \ul{s_3} \wedge  \dots\,,
$$
where $S=\{s_1>s_2>\dots\}\subset \Z+\oh$ is such a subset that
both sets
$$
S_+ = S \setminus \left(\Z_{\le 0} - \oh\right) \,, \quad
S_- = \left(\Z_{\le 0} - \oh\right) \setminus S 
$$
are finite. We equip $\LV$ with the inner product 
in which the basis $\{v_S\}$ is orthonormal. In particular,
we have the vectors
$$
v_\lambda=\ul{\lambda_1-\tfrac12} \wedge \ul{\lambda_2-\tfrac32}
\wedge \ul{\lambda_4-\tfrac52} \wedge \dots \,,
$$
where $\lambda$ is a partition. 
The vector 
$$
\vac = \ul{-\tfrac12} \wedge \ul{-\tfrac32} \wedge \ul{-\tfrac52} \wedge \dots
$$
is called the vacuum vector. 

The operator $\psi_k$ is the exterior multiplication by $\ul{k}$
$$
\psi_k \left(f\right) = \ul{k} \wedge f  \,. 
$$
The operator $\psi^*_k$ is the adjoint operator.
These operators satisfy the canonical anti-commutation relations
$$
\psi_k \psi^*_k + \psi^*_k \psi_k = 1\,,
$$
all other anticommutators being equal to $0$. We have 
%
\begin{equation}\label{yn}
\psi_k \psi^*_k \,\, v_S = 
\begin{cases}
v_S\,, & k \in S \,, \\
0 \,, & k \notin S \,.
\end{cases}
\end{equation}
%

The operators $\al_n$ defined by 
$$
\al_n = \sum_{k\in\Z+\frac12} \psi_{k-n}\, \psi^*_k \,, \quad n=\pm 1,\pm2, \dots \,, 
$$
satisfy the Heisenberg commutation relations
$$
\left[\al_n, \al_m\right] = n \, \delta_{n,-m} \,,
$$
see the formula. Clearly, $\al^*_n=\al_{-n}$. It is clear from definitions that %
\begin{equation}\label{adal}
[\al_n,\psi(z)]=z^n\, \psi(z)\,, \quad  [\al_n,\psi^*(w)]=- w^{n}\, \psi^*(w) 
\end{equation}
%
and also that 
%
\begin{equation}
  \label{ann}
 \al_n \, \vac  = 0 \,, \quad  n\le 0 \,.  
\end{equation}


\begin{thebibliography}{99}



\bibitem{BOO}
A.~Borodin, A.~Okounkov, and G.~Olshanski,
\emph{On asymptotics of the Plancherel measures for 
symmetric groups}, J.\ Amer.\ Math.\ Soc.\ \textbf{13} (2000), no.\ 3, 
481--515.  

\bibitem{BP}
R.~Burton and R.~Pemantle,
\emph{Local characteristics, entropy and limit theorems for 
spanning trees and domino tilings via transfer-impendances},
Ann.\ Prob.\ \textbf{21} (1993), 1329--1371. 

\bibitem{CK}
R.~Cerf and R.~Kenyon,
\emph{The low-temperature expansion of the Wulff
crystal in the 3D Ising model}, preprint (2001). 


\bibitem{CEP}
H.~Cohn, N.~Elkies, and J.~Propp,
\emph{Local statistics for random domino tilings of 
the Aztec diamond},
Duke Math.\ J.\ \textbf{85} (1996), no.\ 1, 117--166. 

\bibitem{CKP}
H.~Cohn, R.~Kenyon, and J.~Propp,
\emph{A variational principle for domino tilings},
math.CO/0008220. 

\bibitem{FK}
L.~Faddeev and R.~Kashaev,
\emph{Quantum dilogarithm},
hep-th/9310070. 

\bibitem{FS}
P.~Ferrari  and H.~Spohn,
\emph{Step fluctuations for a faceted crystal},
cond-mat/0212456. 

\bibitem{J1}
K.~Johansson,
\emph{Discrete
orthogonal polynomials and the Plancherel measure},
math.CO/9906120. 

\bibitem{J2}
K.~Johansson,
\emph{Universality of the local spacing distribution in 
certain ensembles of Hermitian Wigner matrices},
math.ph/0006020.

\bibitem{J3}
K.~Johansson,
\emph{Non-intersecting paths, random tilings, and 
random matrices},
math.PR/0011250. 

\bibitem{K}
V.~Kac,
\emph{Infinite dimensional Lie algebras},
Cambridge University Press.

\bibitem{KM}
S.~Karlin and G.~McGregor,
\emph{Coincidence probabilities}, Pacific J.\ Math
\textbf{9} (1959), 1141--1164. 

\bibitem{K1}
R.~Kenyon,
\emph{Local statistics of lattice dimers},
Ann.\ Inst.\ H.\ Poincar\'e, Prob.\ et Stat.\
\textbf{33} (1997), 591--618. 

\bibitem{K2}
R.~Kenyon,
\emph{The planar dimer model with a boundary: a survey},
to appear in Proceedings CRM. 

\bibitem{M}
I.~G.~Macdonald,
\emph{Symmetric functions and Hall
polynomials},
Clarendon Press, 1995. 

\bibitem{O}
A.~Okounkov,
\emph{Infinite wedge and random partitions},
Selecta Math., New Ser., \textbf{7} (2001), 57--81, 
math.RT/9907127. 

\bibitem{O2}
A.~Okounkov,
\emph{Symmetric functions and random partitions},
Symmetric functions 2001: Surveys of Developments and
Perspectives, edited by S.~Fomin, Kluwer Academic
Publishers, 2002. 

\bibitem{PS}
M.~Praehofer and H.~Spohn,
\emph{Scale Invariance of the PNG Droplet and the Airy Process},
math.PR/0105240.

\bibitem{V}
A.~Vershik,
talk at the 1997 conference on Formal Power Series and Algebraic
Combinatorics, Vienna. 


\end{thebibliography}


\end{document}

Schur process is a time-dependent analog of the
Schur measure on partitions studied in math.RT/9907127.
Our first result is that the correlation functions of
the Schur process are determinants with a kernel that
has a nice contour integral representation in terms of
the parameters of the process. This general result is 
then applied to a particular specialization of the
Schur process, namely to random 3-dimensional Young
diagrams. The local geometry of a large random 3-dimensional diagram
is described in terms of a determinantal point process
on a 2-dimensional lattice with the incomplete beta function kernel
(which generalizes the discrete sine kernel). 
A  brief discussion of the universality of this answer
concludes the paper. 


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

math0107056.extracted_bib
\begin{thebibliography}{99}



\bibitem{BOO}
A.~Borodin, A.~Okounkov, and G.~Olshanski,
\emph{On asymptotics of the Plancherel measures for 
symmetric groups}, J.\ Amer.\ Math.\ Soc.\ \textbf{13} (2000), no.\ 3, 
481--515.  

\bibitem{BP}
R.~Burton and R.~Pemantle,
\emph{Local characteristics, entropy and limit theorems for 
spanning trees and domino tilings via transfer-impendances},
Ann.\ Prob.\ \textbf{21} (1993), 1329--1371. 

\bibitem{CK}
R.~Cerf and R.~Kenyon,
\emph{The low-temperature expansion of the Wulff
crystal in the 3D Ising model}, preprint (2001). 


\bibitem{CEP}
H.~Cohn, N.~Elkies, and J.~Propp,
\emph{Local statistics for random domino tilings of 
the Aztec diamond},
Duke Math.\ J.\ \textbf{85} (1996), no.\ 1, 117--166. 

\bibitem{CKP}
H.~Cohn, R.~Kenyon, and J.~Propp,
\emph{A variational principle for domino tilings},
math.CO/0008220. 

\bibitem{FK}
L.~Faddeev and R.~Kashaev,
\emph{Quantum dilogarithm},
hep-th/9310070. 

\bibitem{FS}
P.~Ferrari  and H.~Spohn,
\emph{Step fluctuations for a faceted crystal},
cond-mat/0212456. 

\bibitem{J1}
K.~Johansson,
\emph{Discrete
orthogonal polynomials and the Plancherel measure},
math.CO/9906120. 

\bibitem{J2}
K.~Johansson,
\emph{Universality of the local spacing distribution in 
certain ensembles of Hermitian Wigner matrices},
math.ph/0006020.

\bibitem{J3}
K.~Johansson,
\emph{Non-intersecting paths, random tilings, and 
random matrices},
math.PR/0011250. 

\bibitem{K}
V.~Kac,
\emph{Infinite dimensional Lie algebras},
Cambridge University Press.

\bibitem{KM}
S.~Karlin and G.~McGregor,
\emph{Coincidence probabilities}, Pacific J.\ Math
\textbf{9} (1959), 1141--1164. 

\bibitem{K1}
R.~Kenyon,
\emph{Local statistics of lattice dimers},
Ann.\ Inst.\ H.\ Poincar\'e, Prob.\ et Stat.\
\textbf{33} (1997), 591--618. 

\bibitem{K2}
R.~Kenyon,
\emph{The planar dimer model with a boundary: a survey},
to appear in Proceedings CRM. 

\bibitem{M}
I.~G.~Macdonald,
\emph{Symmetric functions and Hall
polynomials},
Clarendon Press, 1995. 

\bibitem{O}
A.~Okounkov,
\emph{Infinite wedge and random partitions},
Selecta Math., New Ser., \textbf{7} (2001), 57--81, 
math.RT/9907127. 

\bibitem{O2}
A.~Okounkov,
\emph{Symmetric functions and random partitions},
Symmetric functions 2001: Surveys of Developments and
Perspectives, edited by S.~Fomin, Kluwer Academic
Publishers, 2002. 

\bibitem{PS}
M.~Praehofer and H.~Spohn,
\emph{Scale Invariance of the PNG Droplet and the Airy Process},
math.PR/0105240.

\bibitem{V}
A.~Vershik,
talk at the 1997 conference on Formal Power Series and Algebraic
Combinatorics, Vienna. 


\end{thebibliography}