Thread View: comp.sources.hp48
2 messages
2 total messages
Started by Charles Patton
Fri, 22 Jan 1993 04:40
v08i008: suite3d.cp - Suite3D v4.0, Part01/02
Author: Charles Patton
Date: Fri, 22 Jan 1993 04:40
Date: Fri, 22 Jan 1993 04:40
1161 lines
36239 bytes
36239 bytes
Checksum: 2833039556 (verify with brik -cv)
Submitted-by: Charles Patton <charliep@hpcvrs.cv.hp.com>
Posting-number: Volume 8, Issue 8
Archive-name: suite3d.cp/part01
BEGIN_RDME suite3d.rdm
_Suite3D Version 4.0 Additions and Changes_
This version builds on the GRIDMAP functionality of 3.0 to provide for
parametric surface plotting, PARSURFACE. In addition, it changes the
conventional interpretation of XXleft, Xright, etc. from indicating
the output range to the indicating the input range. This allows
PARSURFACE to also use these specifications as well as continuing to
use the normal view-volume parameters to describe the 3D region.
With the addition of the parametric surface plot, we pretty much
complete the graphical tecniques for functions of two variables. In
fact, while this document has referred to 3D Plotting, this is
something of a misnomer. A better name would be "visualization
techniques for functions of two variables." This would cover the
perspective view of the graph of a scalar function of two variables
(WIREFRAME), the slicing view of a scalar function of two variables
(Movie), the contour-map view of a scalar function of two variables
(psContour), the slope interpretation of a scalar function of two
variables (SlopeField), the mapping grid visualization of a
2-vector-valued function of two variables (GRIDMAP), and the image
graph of a 3-vector-valued function of two variables (PARSURFACE).
_Suite3D Version 3.0 Additions and Changes_
Version 3.0 adds one new feature, GRIDMAP, which presents a method
of visualizing maps from the plane to the plane. The idea is simple:
draw the image under the mapping function of a rectilinear grid residing
in the input plane. Besides being used in various graphing programs, such
as 'f(z)' by Lascoux Graphics, it has been shown to be an effective aid
in understanding iterated maps of the plane (see "Grid Imaging for a Two-
Dimensional Map," Judd, Mees, Aihara, and Toyada, _International Journal
of Bifurcation and Chaos_, V1 N1, March 1991.)
As usual, POSTSCRIPT output capabilites for this plotting method are
included and, as usual, you can leave them out if you are short on
room.
_Suite3D Version 2.0 Additions and Changes_
In addition to the slopefield, pseudo-contour, oblique perspective,
Phong-Shaded, and movie plotting capabilities, version 2.0 introduces
*Major Feature* POSTSCRIPT(TM) output for all the graphing routines in a
form suitable for editing/viewing with Adobe Illustrator(TM), sending to a
POSTSCRIPT printer, or including in a \special {\illustration} TeX(TM)
command. Included is a PS-output version of the standard DRAW command.
All the output is in terms of line segments, Bezier curves, and fill-
regions so that it can be scaled to arbitrary size or printed at
very high resolution without loss of smoothness.
If you have ever wanted to produce high-quality function-graph illustrations
with the flexibility that '48 provides, this is for you! (You might be able
to tell that I'm pretty happy with this item.)
*Significant Addition* (relatively) fast WIREFRAME graphing in oblique
3D perspective with adjustable grid spacing.
*Easier View Switching* The 3D plotting parameters have been rearranged
so that all the routines can compute an appropriate XRNG and YRNG from
these. Once set, you can go from view to view with no manual adjustments.
*Other Enhancements*
A Movie single-step has been added so that you can easily step through a
Movie frame-by-frame.
All routines now use user-specified number of X-increments and Y-increments,
as appropriate, so that the WIREFRAME grid, the lattice of slopefield
segements, and number of Movie frames, etc. all references these numbers
rather than being "hard coded" as in the earlier versions.
END_RDME
BEGIN_DOC Suite3D.doc
@ Version 4.0 @
_Introduction_
The programs contained in this document comprise a suite of 3D
graphing/viewing utilities for the HP-48 (an HP-28 version will be
forthcoming provided sufficient interest.)
We had several requirements to consider in creating these
programs. Our aims were that they be (1) purely user code, (2)
relatively short, and (3) psychologically effective. Aims (1) and (2)
are due to our target audience of educators, many of whom have little
contact with technology beyond their use of the HP-48 or HP-28. We
expect that, in many situations, one user will obtain the code in
printed form, enter it into their machine, and transmit it to others
via the infrared I/O.
In exploring visualization techniques on a variety of machines we
found that increasing "realism" (read: ray-traced, Phong-shaded,
hidden-line, etc.) in the graphical presentation of functions of two
variables did not necessarily correlate with increasing ease of
comprehension. These programs represent the results of some of these
experiments (including time-to-completion as an important factor).
We invite you to try them out and experiment yourself. All
suggestions, additions, corrections, insights, commentary, and
criticisms are welcome.
_NO WARRANTY_
This work is provided on an "as is" basis. Hewlett-Packard Co.
provides no warranty whatsoever, either express or implied regarding
the work, including warranties with respect to its merchantability or
fitness for any purpose whatsoever.
_Copyright_
Copyright (C), 1991, Hewlett-Packard Co. Permission to copy all or
part of this work is granted provided that the copies are not made or
distributed for resale (excepting nominal copying fees) and the
_NO WARRANTY_ and this copyright notice are included verbatim. Other
permissions can be arranged by contacting the author.
_Correspondence_
Correspondence on Suite3D suite should be sent to Charles Patton at one of the
following addresses:
snail-mail:
M.S. 5U-L9
Hewlett-Packard Co.
1000 N.E. Circle Blvd.
Corvallis, OR 97330
e-mail:
charliep@cv.hp.com (for Internet hosts)
hplabs!hpcvrs!charliep (for UUCP hosts)
_Organization_
Analogous to the built-in plotting routines, all the Suite3D
programs assume that the function of interest is stored in EQ.
Further, they assume that the function is represented as an expression
in the variables 'X' and 'Y' (e.g. u,v -> sin(u+v) is represented as
'SIN(X+Y)' in EQ).
N.B.> Insure that 'X' and 'Y' are formal (no variables 'X' and 'Y'
N.B.> along the current path).
N.B.> Most of these routines produce their best-looking output with the
N.B.> machine in "CONNECT" mode ( the CNCT button in the MODES menu
N.B.> toggles this mode.)
N.B.> While you are examining the MODES menu, be sure to check that the
N.B.> the machine is in SYMBOLIC EVALUATION mode ( SYM button.)
The viewing region and other Suite3D plotting parameters are stored
in the sub-directory, VPAR. VPAR contains the variables:
Xleft and Xright,
controlling the width of the view-volume,
Yfar and Ynear,
controlling the depth of the view-volume,
Zlow and Zhigh,
controlling the height of the view volume,
XXleft and XXright,
controlling the horizontal range of the GRIDMAP and
PARSURFACE input region,
YYlow and YYhigh,
controlling the vertical range of the GRIDMAP and
PARSURFACE input region,
Xe, Ye, and Ze,
the coordinates of the eye-point,
Nx and Ny,
the number of X- and Y-increments desired, and
hidden
the flag indicating that hidden-line plotting should be used
in the Yview plotter.
VPAR was implemented as a sub-directory so that the REVIEW key can be
used to examine the state of these variables in a way which reminds
the user of their meaning.
Other than VPAR, the programs here are organized into a single
directory for convenience. Inter-dependence of the programs and other
variables is noted in the program description.
_Oversized PICTs_
All of the programs seem to work reasonably well with arbitrary sized
PICT grobs. However, ShapeToShade only draws to the upper-left-hand-corner
of the grob, and Movie only shows the display-sized region of the grob (what
else could it do?) The POSTSCRIPT plotting routines scale their results to
the size of the default PICT grob, but this should pose few problems.
_Descriptions of the Programs_
SlopeField:
The SlopeField program plots a lattice of line segments whose
slopes represent the function value at their centerpoint. Using
SlopeField to plot F(X,Y) allows your eye to pick out integral curves
of the differential equation dy/dx=F(x,y). It is quite useful in
understanding where the "arbitrary constant" in anti-derivatives comes
from.
The number of lattice points per row is determined by Nx and the
number of lattice points per column is determined by Ny. The input region
sampled is given by Xleft < X < Xright and Ynear < Y < Yfar.
psContour:
The psContour program (pseudo-contour) program uses SlopeField to
produce a fast contour plot of the current function. By plotting the
direction field perpendicular to the gradient of the function it
allows your eye to pick out the integral curves (contours) without
actually plotting them. The apparent contours are evenly spaced
visually and so give no information on how steep the graph is at any
particular point.
The number of lattice points per row is determined by Nx and the
number of lattice points per column is determined by Ny. The input region
sampled is given by Xleft < X < Xright and Ynear < Y < Yfar.
YView:
The YView program provides an oblique-view, perspective, 3D
surface plot (viewing toward increasing Y). This produces a sequence of
plots of the function along Y=constant lines in the input domain. These
plots are perspective-projected onto the view-plane relative to the eye
point. In overhead view:
Yfar
+----------------+
. | | .
| |
Xleft | /\ |Xright
. | / \ | .
. | . . |.
+----------------+
. . . . Ynear
. . .
. . . .
---------.----..---.--------------------- view-plane
. . .
. . .
* eye-point (Xe,Ye,Ze)
|<- XRNG ->|
The same picture holds with Zlow replacing Xleft, Zhigh replacing Xright,
and YRNG replacing XRNG (and turning your head 90 degrees to the right.)
In short, Ynear and Yfar and Ny determine the Y-inputs sampled;
Xleft, Xright, and the eye-point determine the XRNG; Zlow, Zhigh,
and the eye-point determine the YRNG. This computation is performed by
the utility, SetWindow.
This is a simple "divide-by-depth" method for perspective
plotting where the viewplane is always 1 unit from the viewpoint and
is parallel to the x-z plane. Since the perspective transformation in
the case can be implemented by a simple change of coordinates,
plotting individual sections is no slower than ordinary plots.
If 'hidden' is non-zero, each plot of a sampled point will erase the
column of pixels below it. Since the curves are plotted back-to-front,
this results in a hidden-line plot of the surface. It works best if
RES is #1 or #2 and connected-mode is on (CNCT.)
Note: To abort this routine, press the [ON] key and then press
the [ENTER] key.
WIREFRAME:
The WIREFRAME program plots an oblique-perspective view of a wire-frame
model of the surface with Nx vertices in each row and Ny vertices in each
column. It calls SetWindow to set the XRNG and YRNG and uses much the same
technique as Yview. The sampled region is determined by Xleft, Xright, Ynear,
and Yfar.
ShapeToShade:
The ShapeToShade program plots the function as a Phong-shaded
figure viewed from above with a light source from above, that
is, shaded according to the angle the tangent plane makes with the incident
light source. It assumes that the variable DPAR contains sixteen 4x4 GROBS
to serve as the dithering pattern. The dither patterns included are probably
not the best possible: insights along these lines are most welcome. The
variables Xleft, Xright, Yfar, and Ynear determine the inputs sampled.
Movie:
The Movie program plots Ny cross-sections of the function plot
varying the Y-value from Yfar to Ynear. The viewing window is determined
by Xleft, Xright, Zlow, and Zhigh. Having plotted these frames, it calls the
utility program, uSMOV (utility-show-movie), to play them back in
repeated sequence.
Note: To abort this routine in the plotting phase, press the [ON]
key and then press the [ENTER] key. To end the movie press any key
(e.g. [ENTER]).
uSMOV:
The uSMOV (utility show-movie) program takes an alternating sequence of
<n> grobs and <n> descriptors (with <2n> on the top of the stack) from the
stack and shows them in sequence, thus producing a movie effect. Stop
the show with any key press but [ON].
SSTMovie:
After stopping Movie or uSMOV, you can use SSTMovie to step through
the sequence of movie frames. To show the next frame, press any key but
[ENTER] or [ON]. Press [ENTER] to quit.
PARSURFACE:
The PARSURFACE routine takes a 3-vector-valued function of two
variables (stored in EQ as a list of three expression in X and Y) and
draws an oblique-view, perspective, 3D plot of a wire-frame model of
the surface determined by the image in 3-space of the graph of this
function, that is, a parametrized surface.
The function determined by the current equation is sampled in a
grid with Nx samples in each row and Ny samples in each column with
inputs from the region [XXleft,XXright]x[YYlow,YYhigh]. Each sample
is perspective-projected onto the View Screen along the line
connecting the sample and the eye-point (Xe,Ye,Ze). Neighboring
samples are connected by straight lines. The region of the View Screen
represented in the PICT grob (and hence on the LCD) is determined by
the projection of the View Volume on the View Screen.
A nice starter example is a parametrized sphere. With the triple,
{ 'SIN(X)*SIN(Y)' 'COS(X)*SIN(Y)' 'COS(Y)' } stored as EQ, the
view-volume set to [-1.1, 1.1]x[-1.1, 1.1]x[-1.1, 1.1], the eye-point
set to (-2.2, 0, 0.5), and the input range set to [0, 6.5]x[0, 3.15]
(RADIANS MODE, PLEASE!), PARSURFACE will produce a perspective plot
of a sphere.
GRIDMAP:
The GRIDMAP routine takes a complex valued function (stored in EQ
as a complex-valued expression in X and Y) and plots the image under
this map of a rectilinear grid with Nx columns and Ny rows which lives
in the region [XXleft,XXright]x[YYnear,YYfar]. The portion of the
output plane shown on the screen is "floor" of the view-volume,
[Xleft,Xright]x[Ylow,Yhigh]. These are additional variables in VPAR.
The trig and arc-trig functions (e.g. 'SIN(X+i*Y)') give very
interesting "starter" examples.
To get the image of a polar grid rather than a rectilinear grid,
precompose you function with the polar-to-rectangular coordinate
change:
'SIN(X+i*Y)' {X 'X*COS(Y)' Y 'X*SIN(Y)'} |
=> 'SIN(X*COS(Y)+i*X*SIN(Y))'
Setting 'Xleft' to 0 and 'Xright' to 1 then corresponds to
setting (the nonexistent) 'Rlow' to 0 and 'Rhigh' to 1. Similarly,
settign 'Ynear' to 0 and 'Yfar' to 2pi corresponds to setting the
angular range.
SetWindow:
This utility maps the view volume and eye-point coordinates into the
appropriate XRNG and YRNG values for perspective plotting (see the picture
in the YView description.) It also gets all the plotting parameters onto
the stack.
_The POSTSCRIPT Drawing Utilities_
Since the PS utilities take up a fair amount of space, and are not of
immediate use to someone without Adobe Illustrator and/or a POSTSCRIPT
printer, all of the above programs have been designed to work properly
even if the PS utility set is not installed. If this is your situation,
simply delete the section of the Suite3D listing starting at the comment,
@ Begin POSTSCRIPT Stuff @, before you send the file to the '48, otherwise,
read on.
When POSTSCRIPT Output Mode is switched on (using PSTOGGLE,) all of the
plotting routines above will, in addition to their normal function,
accumulate POSTSCRIPT commands corresponding to what they were attempting
to plot on the '48 display. These are saved in a sequence of variables,
PSOUT, PSOUT&, PSOUT&&, etc. Although the output is simply ASCII text
saved as '48 character strings, it is broken up into at-most-4Kbyte
chunks so that it is easier to handle on the '48. When this text is
inserted into a "boilerplate" file (described below) the resulting
file can be sent to a POSTSCRIPT printer, or edited/viewed in the
Adobe Illustrator, or compatible, POSTSCRIPT Drawing program.
_Descriptions of the User-intended Programs__
PSTOGGLE:
When executed, this routine switches between normal (no-PS output)
and PS-output definitions of the basic graphics routines (that is, draw,
line, and tile) used in the other Suite3D programs. The new state ("PS is ON"
or "PS is OFF") is displayed on completion of the routine.
PSRESET:
This routine should be used to simply clear any leftover data in the
output variables PSOUT, PSOUT&, etc. making room for a new run.
_Using the PS Capabilities_
_The Boilerplate File_
To effectively use the PS output from the '48 you need to have a
"boilerplate" POSTSCRIPT file in which you can insert your '48 output
(it can even reside on the '48 if you have room .. in this case you
can have your '48 talk directly to a POSTSCRIPT printer ..) The
easiest way to get one is to create a new illustration in Illustrator
with no actual drawing but with the Fill set to NONE, the Line Width
set to, say, .5, and the Line Color set to 100% BLACK. Save this as a
POSTSCRIPT (i.e. text) file HP48PS.ai or some such name.
Open the resulting file with a text editor so you can see what it looks like.
There are two regions of interest. The first is the line near the top of the
file that looks like
%%BoundingBox:x1 y1 x2 y2
where x1, x2, y1, and y2 are integers. You should change these to
%%BoundingBox:0 0 131 64
While this is not strictly necessary, it will allow you to include the '48
produced illustration directly in a TeX document an have the size computed
correctly.
The next region of interest is near the end of file and begins with
%%Note:
and ends with
%%Trailer
Clear out anything between these two (this is the region where the '48
output will be inserted) and save the resulting file. This will be your
"boilerplate" file.
_Creating the Output_
This part is quite easy. After you have found a nice view with one of
the graphing utilities (with PS output turned off to speed things up) set the
RES quite high ( #13d RES [ENTER] will do nicely ) and numeric display
format quite small ( 2 FIX [ENTER] seems pretty good ) to save on room, use
PSRESET to clear the variables (if you want to get rid of a previous session)
and PSTOGGLE to activate PS mode. Now re-active the chosen plotting routine
and let it finish.
When it is finished, transfer the contents of all the non-empty PSOUT variables
(in ASCII mode, please) in order (PSOUT, PSOUT&, PSOUT&&, etc.) into the region
of the boilerplate file noted above. Save the resulting file under a new name
(to preserve your boilerplate file) and you are ready to send it to a POSTSCRIPT
printer, include it in a TeX, or muck around with it in a POSTSCRIPT drawing
program.
_RAM Requirements, etc._
The routines require very different amounts of RAM (corresponding directly
with the output size.) A reasonable psContour results in under 4K of output
while a ShapeToShade can result in nearly 40K of output. The other routines
fall between these two (with reasonable settings for Nx, Ny, RES, and FIX.)
If desired, one could modify the PSADDTO routine (see below) to simply send
accumulated data out over one of the datacomm ports thus passing off the space
requirements to the machine at the other end of the line.
_What's Been Tried_
I've used the PS output in the form discussed above with equally good
results in Illustrator88 on a Mac IIx, direct printing to an Apple LaserWriter,
in a Textures TeX file, and in Adobe Illustrator 1.1 under Windows 3.0.
POSTSCRIPT, Adobe Illustrator, and Illustrator88 are trademarks of Adobe Systems
Corporation;
Textures is a trademark of Blue Sky Research, Inc.;
Apple LaserWriter is a trademark of Apple Computer, Inc.;
Windows is a trademark of MicroSoft Corporation;
TeX is a trademark of the American Mathematical Society.
_Descriptions of the Utilities_
PSTILE:
This utility takes a screen location (as #pixel_row #pixel_column)
followed by two unused parameters and a gray-scale value in the range [0,1],
returns these unchanged to the stack and outputs the PS code to draw a
filled-in 4x4 square at the corresponding location and with the corresponding
gray-scale fill.
PSADDTO:
This utility takes a string off the stack and adds it to the current
PS output variable, checking for overflow of the 4000 character limit
and starting a new output variable if the limit is exceeded.
PSDRAW:
Draws the current EQ (assumed to be a single expression) and outputs
a PS representation of the curve drawn as a connected sequence of Bezier
curves. It assumes that the plot type is currently FUNCTION.
PSPARDRAW
Draws the current EQ (assumed to be a single expression) and outputs
a PS representation of the curve drawn as a connected sequence of
Bezier curves. It assumes that the plot type is currently PARAMETRIC.
PSLINE:
Takes a pair of complex numbers representing the endpoints of a line,
draws the line on the screen and outputs the corresponding PS line drawing
command.
CURRENTOUT:
A variable containing the name of the current PS output variable
('PSOUT', 'PSOUT&', 'PSOUT&&', etc.)
PSCO:
Takes a complex number and returns, as a string, the corresponding
PS coordinate value.
PSCOPAIR:
Takes a pair of complex numbers representing the third and fourth of
four Bezier curve control points and returns these as a string representing
the PS cross-over sequence of a Bezier curve.
derFP
A definition of the derivative of the FP function suitable for
supporting the PS drawing in GRIDMAP.
derIP
A definition of the derivative of the IP function suitable for
supporting the PS drawing in GRIDMAP.
derIM
A definition of the derivative of the IM function suitable for
supporting the PS drawing in GRIDMAP.
derRE
A definition of the derivative of the RE function suitable for
supporting the PS drawing in GRIDMAP.
END_DOC
BEGIN_RPL Suite3D.rpl
%%HP: T(3)A(R)F(.);
DIR
VPAR
DIR
Xleft
0
Xright
3
Ynear
0
Yfar
3
Zlow
-1
Zhigh
2.5
XXleft
0
XXright
3
YYlow
0
YYhigh
3
Xe
2.5
Ye
-1.5
Ze
2
Nx
13
Ny
8
Hidden
0
END
SlopeField
\<< {VPAR Nx} RCL
{VPAR Ny} RCL
{VPAR Xleft} RCL {VPAR Xright} RCL DUP2 XRNG
{VPAR Ynear} RCL {VPAR Yfar} RCL DUP2 YRNG
EQ
0 0 0 0 0 0 0
\-> numx numy left right bot top der hstp vstp hofs vofs x y d
\<< ERASE {# 0d # 0d } PVIEW
right left - numx / 'hstp' STO
top bot - numy / 'vstp' STO
hstp .4 * 'hofs' STO
vstp .4 * 'vofs' STO
bot vstp 2 / + top
FOR y
y 'Y' STO
left hstp 2 / +
right
FOR x
x 'X' STO
der \->NUM 'd' STO
'IFTE(ABS(d*hofs)>vofs,vofs/d+i*vofs,hofs+i*hofs*d)' \->NUM
x y R\->C DUP2 + 3 ROLLD SWAP - line
hstp
STEP
vstp
STEP
\>>
{ X Y } PURGE { } PVIEW
\>>
psContour
\<< EQ
\<< \-> dx dy 'IFTE(dy==0,MAXR,-dx/dy)' \>>
\-> eq slp
\<<
IFERR eq X \.d
eq Y \.d
2 \->LIST
'slp' APPLY
{ X Y } SHOW STEQ
SlopeField
THEN eq STEQ ERRM DOERR
END eq STEQ
\>>
\>>
YView
\<< SetWindow 0
\<< \-> K
\<<
CASE
K TYPE DUP 0 ==
THEN
DROP X K R\->C
X -50 R\->C
DUP2 LINE TLINE
K
END
1 ==
THEN K
END
K EVAL 1 \->LIST
'PRASE' APPLY
END
\>>
\>> \-> Xleft Xright Ynear Yfar Xe Ye Ze Nx Ny prase u hline
\<< 'EQ' RCL
'u' \-> eq u
\<< eq { X '(X-Xe)*u+Xe' Y 'u+Ye' } |
Ze - 'u' / Ze +
{ X u } SHOW
COLCT
IF prase
THEN { & 'hline(&)' } \|vMATCH DROP
END
IFERR
'EQ' STO 'X' INDEP
ERASE
Ynear Yfar - 8 /
\-> stp
\<< Yfar Ye -
Ynear Ye -
FOR u
draw
IF KEY
THEN DROP
"outa here" DOERR
END
stp
STEP
\>>
THEN eq STEQ ERRM DOERR
ELSE eq STEQ
END
{ } PVIEW
\>>
\>>
\>>
WIREFRAME
\<< SetWindow 0 0 0 0
\-> Xmin Xmax Ynear Yfar Xe Ye Ze numx numy prase u v bd1 bd2
\<< 'u' 'v' \-> u v
\<< EQ { X v Y 'u+Ye' } |
Ze - 'u' / Ze +
{ v u } SHOW COLCT ERASE
{ # 0d # 0d } PVIEW
Ynear Yfar - numy /
Xmax Xmin - numx /
\-> eq stpu stpx
\<< Yfar Ye -
Ynear Ye -
FOR u
0 'bd1' STO
Xmin 'v' STO
0 numx
START
v Xe - u / Xe +
eq \->NUM R\->C
IF bd1
THEN DUP2 line
ELSE 1 'bd1' STO
END
IF bd2
THEN numx 2 + ROLL OVER line
END
stpx 'v' STO+
NEXT
1 'bd2' STO
stpu
STEP
numx 1 + DROPN
\>> { } PVIEW
\>>
\>>
\>>
ShapeToShade
\<< {VPAR Xleft} RCL
{VPAR Xright} RCL
{VPAR Ynear} RCL
{VPAR Yfar} RCL
0 0 0 \-> xmin xmax ymin ymax x y eq
\<< xmax xmin - 32 /
ymin ymax - 15.001 /
'x' 'y'
\-> xstp ystp x y
\<< EQ DUP
X \.d .4 - 2 ^ SWAP
Y \.d .4 + 2 ^ +
1 + -.35 ^
{ X x Y y } | COLCT
'eq' STO
ERASE {# 0d # 0d } PVIEW
# 0d
ymax ymin
FOR y
# 0d
xmin xmax
FOR x
DUP2 SWAP 2 \->LIST
PICT SWAP
eq \->NUM
IF
DUP TYPE 0 \=/
THEN
DROP 1
END
tile
15.99 * IP
DPAR SWAP 16 - NEG GET
REPL
4 +
xstp
STEP
DROP
4 +
ystp
STEP DROP { } PVIEW
\>>
\>>
\>>
Movie
\<< {VPAR Xleft} RCL {VPAR Xright} RCL XRNG
{VPAR Zlow} RCL {VPAR Zhigh} RCL YRNG
{VPAR Ynear} RCL {VPAR Yfar} RCL
{VPAR Ny} RCL
EQ
0 0
\-> ynear yfar numy eq ystp y
\<< 'y' 'y' STO
eq { X Y } SHOW
{ Y y } |
ynear yfar - numy / 'ystp' STO
IFERR STEQ
'X' INDEP
FUNCTION
0 yfar ynear
FOR y
ERASE draw
y PICT RCL ROT 2 +
IF KEY
THEN
DROP "outa here"
DOERR
END
ystp
STEP
THEN
eq STEQ
ERRM DOERR
END
eq STEQ
\>> uSMOV
\>>
uSMOV
\<< \-> n
\<< { # 0d # 0d } PVIEW
DO n ROLL
n ROLL
DUP PICT {# 0d # 0d } ROT REPL
UNTIL KEY
END DROP n
\>>
\>>
SSTMovie
\<<
DO
\-> n
\<< n ROLL n ROLL DUP PICT
{# 0d # 0d } ROT REPL n
{ # 0d # 0d } PVIEW
\>>
UNTIL 0 WAIT
51.1 ==
END
\>>
PARSURFACE
\<< SetWindow 3 DROPN EQ
\-> xe ye ze eq
\<< 4 DROPN eq LIST\-> DROP
SWAP ye - SWAP ze - OVER / ze + 'i' *
ROT xe - ROT / xe + +
IFERR
STEQ
0 dogridmap
THEN eq STEQ ERRM DOERR
ELSE eq STEQ
END
\>>
\>>
GRIDMAP
\<< 1 dogridmap \>>
dogridmap
\<< EQ PPAR VPAR XXright XXleft YYlow YYhigh
Xleft Xright Ynear Yfar Nx Ny
UPDIR
\-> setrng eq pp X1 X2 Y1 Y2 xr1 xr2 yr1 yr2 NX NY
\<< X2 X1 -
Y2 Y1 -
\-> DX DY
\<< eq { X
'X1+DX*(1+INV(NX-1))*
(.5+(-1)^IP(NY*((1-INV(NX*NY))*TTT+.5/(NX*NY)))*
(-.5+FP(NY*((1-INV(NX*NY))*TTT+.5/(NX*NY)))))-
.5*(DX/(NX-1))'
Y
'Y1+DY/(NY-1)*IP(NY*((1-INV(NX*NY))*TTT+.5/(NX*NY)))'
} | { TTT } SHOW
eq { X
'X1+DX/(NX-1)*IP(NX*((1-INV(NY*NX))*TTT+.5/(NY*NX)))'
Y
'Y1+DY*(1+INV(NY-1))*
(.5+(-1)^IP(NX*((1-INV(NY*NX))*TTT+.5/(NY*NX)))*
(-.5+FP(NX*((1-INV(NY*NX))*TTT+.5/(NY*NX)))))-
.5*(DY/(NY-1))'
} | { TTT } SHOW
SWAP
IFERR { TTT 0 1 } INDEP
PARAMETRIC
IF setrng
THEN
xr1 xr2 XRNG
yr1 yr2 YRNG
END
NX NY * 1 - INV RES
STEQ
ERASE pardraw
STEQ pardraw
{ } PVIEW
pp 'PPAR' STO eq STEQ
THEN eq STEQ pp 'PPAR' STO
ERRM DOERR
END
\>>
\>>
\>>
DPAR {
GROB 4 4 00400000
GROB 4 4 00402000
GROB 4 4 90000080
GROB 4 4 40104010
GROB 4 4 20802090
GROB 4 4 8050A010
GROB 4 4 50A05080
GROB 4 4 A050A050
GROB 4 4 50A050A0
GROB 4 4 A050A070
GROB 4 4 70A050E0
GROB 4 4 D070D060
GROB 4 4 B0E0B0E0
GROB 4 4 70D0F0B0
GROB 4 4 F0B0D0F0
GROB 4 4 F0B0F0F0 }
EQ
'2*(2-Y)*EXP(-((X-.5)^2+(Y-1.2)^2))+Y*EXP(-2*((X-2)^2+(Y-2)^2))'
PPAR
{ (-2,0) (2,5) X # 8d (0,0) FUNCTION Y }
SetWindow
\<< PATH
VPAR
Xleft Xright Ynear Yfar Zlow Zhigh Xe Ye Ze Nx Ny Hidden 0
\-> Xleft Xright Ynear Yfar Zlow Zhigh Xe Ye Ze Nx Ny Hidden Ue
\<< EVAL
\<< \-> u y '(u-Ue)/(y-Ye)+Ue' SWAP OVER MAX ROT ROT MIN SWAP \>>
\-> proj
\<< Xe 'Ue' STO
MAXR \->NUM DUP NEG
Xleft Ynear proj EVAL
Xleft Yfar proj EVAL
Xright Ynear proj EVAL
Xright Yfar proj EVAL
XRNG
Ze 'Ue' STO
MAXR \->NUM DUP NEG
Zlow Ynear proj EVAL
Zlow Yfar proj EVAL
Zhigh Ynear proj EVAL
Zhigh Yfar proj EVAL
YRNG
\>>
Xleft Xright Ynear Yfar Xe Ye Ze Nx Ny Hidden
\>>
\>>
draw
DRAW
line
LINE
tile
\<< \>>
pardraw
DRAW
@ Begin POSTSCRIPT Stuff @
PSTOGGLE
\<< "PS is "
IF 'draw' RCL 'PSDRAW' SAME
THEN { DRAW } 1 GET DUP 'draw' STO
'pardraw' STO
{ LINE } 1 GET 'line' STO
\<< \>> 'tile' STO
"Off" +
ELSE 'PSDRAW' 'draw' STO
'PSLINE' 'line' STO
'PSTILE' 'tile' STO
'PSPARDRAW' 'pardraw' STO
"On" +
END 1 DISP
\>>
PSRESET
\<< "'PSOUT" 'PSOUT'
DO "" SWAP STO
"&" + DUP STR\-> DUP
UNTIL VTYPE -1 ==
END
DROP2 'PSOUT' 'CURRENTOUT' STO
\>>
PSTILE
\<< DUP \->STR
" g
"
+ 5 PICK B\->R
DUP 4 + \->STR " " +
SWAP \->STR " " +
8 PICK # 64d SWAP - B\->R
DUP 4 - \->STR
" " + SWAP \->STR " " +
\-> X2 X1 Y1 Y2
\<< X2 + Y1 +
"m
"
+ X2 + Y2 +
"L
"
+ X1 + Y2 +
"L
"
+ X1 + Y1 +
"L
"
+ X2 + Y1 +
"L
f
"
+
\>> PSADDTO
\>>
PSADDTO
\<<
IF CURRENTOUT SIZE 4000 >
THEN 'CURRENTOUT' RCL \->STR
1 OVER SIZE 1 - SUB "&" + STR\->
DUP 'CURRENTOUT' STO STO
ELSE
'CURRENTOUT' RCL SWAP STO+
END
\>>
CURRENTOUT
PSOUT
PSCOPAIR
\<< 'PPAR(1)' EVAL DUP
'PPAR(2)' EVAL SWAP -
\-> p1 p2 o d
\<< p2 o - C\->R
d C\->R ROT SWAP / 64 *
ROT ROT / 131 *
p1 o - C\->R d C\->R
ROT SWAP / 64 *
ROT ROT / 131 *
\>> \-> y2 x2 y1 x1
\<< x1 \->STR " " +
y1 \->STR " " + +
x2 \->STR " " + +
y2 \->STR " " + +
x2 x1 - x2 + \->STR " " +
y2 y1 - y2 + \->STR " " + +
\>>
\>>
PSDRAW
\<< PPAR OBJ\-> 4 DROPN
0 0
\-> hm vm indp rs flop \Gdx
\<<
IF rs TYPE 10 ==
THEN rs # 0d 2 \->LIST PX\->C hm - RE
ELSE
IF rs 0 ==
THEN { # 1d # 0d } PX\->C hm - RE
ELSE rs
END
END
3 / '\Gdx' STO
'EQ' RCL 'vm' STO
\<< \-> vl
\<< vl \->NUM
indp \->NUM
\-> vlu indv
\<<
IF flop
THEN indv \Gdx - vl indp \.d \->NUM
\Gdx *
vlu SWAP - R\->C
'indp+vl*i' \->NUM PSCOPAIR
3 ROLLD + "c
"
+
PSADDTO
ELSE
'indp+vl*i' \->NUM
PSCO "m
"
+
indv \Gdx +
vl indp \.d \->NUM
\Gdx * vlu + R\->C PSCO +
1 'flop' STO
END
vlu
\>>
\>>
\>> 'hm' STO
IFERR vm {& 'hm(QUOTE(&))' } \|vMATCH DROP STEQ
DRAW vm STEQ
THEN vm STEQ ERRM DOERR
END "S
"
PSADDTO
\>>
\>>
PSPARDRAW
\<< 'PPAR(3)' EVAL OBJ\-> DROP 'PPAR(4)' EVAL 0 0
\-> indp hm vm rs flop \Gdx
\<<
IF rs 0 ==
THEN # 1d 'rs' STO
END
IF rs TYPE 10 ==
THEN rs B\->R 131 / vm hm - *
ELSE rs
END 3 / '\Gdx' STO 'EQ' RCL 'vm' STO
\<< \-> vl
\<< vl \->NUM indp \->NUM
\-> vlu indv
\<<
IF flop
THEN vl indp \.d \->NUM \Gdx * vlu SWAP - (0,0) + vlu (0,0) +
PSCOPAIR 3 ROLLD +
"c
" + PSADDTO
ELSE vlu (0,0) + PSCO
"m
"
+ vl indp \.d \->NUM \Gdx * vlu + (0,0) + PSCO +
1 'flop' STO
END
vlu
\>>
\>>
\>> 'hm' STO
IFERR vm { & 'hm(QUOTE(&))' } \|vMATCH DROP STEQ
DRAW vm STEQ
THEN vm STEQ ERRM DOERR
END
"S
"
PSADDTO
\>>
\>>
PSCO
\<< 'PPAR(1)' EVAL - C\->R
'PPAR(2)-PPAR(1)' EVAL C\->R
ROT SWAP / 64 *
ROT ROT / 131 * \->STR
" " + SWAP \->STR
" " + +
\>>
PSLINE
\<< \-> C1 C2
\<< C1 PSCO
"m
"
+ C2 PSCO +
"l
S
"
+ PSADDTO
C1 C2 LINE
\>>
\>>
derFP
\<< \-> K DK 'DK' \>>
derIP
\<< \-> K DK '0' \>>
derIM
\<< \-> K DK 'IM(DK)' \>>
derRE
\<< \-> K DK 'RE(DK)' \>>
PSOUT
""
PSOUT&
""
PSOUT&&
""
PSOUT&&&
""
PSOUT&&&&
""
PSOUT&&&&&
""
PSOUT&&&&&&
""
END
END_RPL
v08i009: suite3d.cp - Suite3D v4.0, Part02/02
Author: Charles Patton
Date: Fri, 22 Jan 1993 04:41
Date: Fri, 22 Jan 1993 04:41
578 lines
36943 bytes
36943 bytes
Checksum: 397875271 (verify with brik -cv)
Submitted-by: Charles Patton <charliep@hpcvrs.cv.hp.com>
Posting-number: Volume 8, Issue 9
Archive-name: suite3d.cp/part02
BEGIN_ASC Suite3d.asc
%%HP: T(1);
"69A20FF7FBE4000000B00535F45545626262626262B0C2A205000042000A0053
5F455456262626262A0C2A205000022000900535F455456262626290C2A20500
0002000800535F4554562626280C2A2050000E1000700535F45545626270C2A2
050000C1000600535F455456260C2A2050000A1000500535F4554550C2A20500
008100050465627255450D9D20E1632BEF22D6E2010B4D6E202044B48BA20D6E
202044B4AC7C1B213093632B2130550005046562794D450D9D20E1632BEF22D6
E2010B4D6E202044B48BA20D6E202044B4918C1B213093632B21305500050465
627940550D9D20E1632BEF22D6E2010B4D6E202044B48BA204B2A2B213093632
B2130A400050465627640550D9D20E1632BEF22D6E2010B4D6E202044B48BA20
D6E202044B4B213093632B213005000600535C494E45460D9D20E16321C432D6
E20203413D6E20203423E1632D6E2020341384E2040053534F4C2A2090000D6A
076BA1D6E2020342384E2040053534F476BA1C2A20D0000C6A035A076BA184E2
070053514444445F4D6E20203413D6E20203423893E1EF53293632B2130CD000
40053534F440D9D20E16328BA209C2A28BA2084E204005051425B21309FF3004
6F1B2130EB3A190DA1E89C18BA20ED2A28BA2084E204005051425B21309FF300
46F19C2A28BA2084E204005051425B21309FF30046F190DA1B2130EB3A1E89C1
E0CF1DBBF150FA1339201000000000000460EEDA1E0CF1E0CF150FA133920200
0000000001310EEDA1B0BC1C2A20700000276BA1DBBF1B0BC1C2A20700000276
BA176BA193632B2130251009005350514254425147590D9D20E16328BA203F2A
28BA2084E204005051425B21309FF30046F1B2130EB3A1B7FC18DBF18BA20803
A28BA2084E204005051425B21309FF30046F1B2130EB3A14B2A24B2A21C432D6
E204096E64607D6E202086D6D6E202067D6D6E20202737D6E204066C6F607D6E
20202987E16323CE22D6E202027374B2A2279E1AFE22D9D20E4A205100010000
0000000000045632D6E2020273797632DCC02B21305DF223CE22D6E202027376
8BC1339201000000000000010279E1AFE22D9D20D6E20202737BB69133920200
000000000131050FA1D6E202067D6D6E202086D690DA1EEDA1B21305BF22D6E2
02027375DF223F2A250FA145632D6E2020298797632DCC024563284E20205415
9763204B0245632D6E202067D697632DCC02C9432D9D20E16321C432D6E20206
7C6E1632D6E202067C64E5A1D6E204096E646074E5A11C432D6E203067C657D6
E204096E64667E16323CE22D6E204066C6F607AFE22D9D20D6E202067C6D6E20
4096E64607E7FE14E5A1D6E20202987EEDA1D6E203067C657DBBF190DA177920
0000000000000000000000000000000076BA1D6E203067C65777920000000000
0000000000000000000000076BA184E2080053534F4051494253F2A20DCF176B
A1C2A209000036A076BA184E2070053514444445F4B21305BF22D9D20D6E2030
67C657779200000000000000000000000000000000076BA184E2040053534F4C
2A2090000D6A076BA1D6E202067C6D6E204096E64607E7FE14E5A1D6E2020298
7EEDA1D6E203067C65776BA1779200000000000000000000000000000000076B
A184E2040053534F476BA19C2A245632D6E204066C6F60797632DCC02B21305D
F22D6E203067C657EF532EF53293632B213045632D6E202086D697632DCC02FD
332D9D20D6E202067D647A2084E2010628BA208BA2084E201062B2130005F18B
A20D6E202086D6B21309FF30046F1B2130B2130D8AF18DBF1E41F1091E1D6E20
2067D6E41F1B2130F1732D9D20D6E202067D6E41F13A3A1933A1B21305DF22C2
A209000035A084E2070053514444445F4EF53293632B21309160060053544251
47560D9D20E163284E204005051425B7FC1803A246CF14B2A24B2A21C432D6E2
02086D6D6E202067D6D6E204096E64607D6E20202737D6E204066C6F607D6E20
202987E16323CE22D6E2020273768BC1339201000000000000010279E1AFE22D
9D20D6E20202737E4A20510000000000000000000ED2A2387C1A72E1D6E20208
6D690DA1AC7C1B21305BF22D9D203CE22D6E202027374B2A2279E1AFE22D9D20
47A20E4A20510001000000000000000E4A20510000000000000000000B2130A7
2E1D6E202086D690DA1AC7C1B21305BF22D6E202027375DF22B21305DF223F2A
250FA145632D6E2020298797632DCC024563284E202054159763204B0245632D
6E202067D697632DCC02C9432D9D20E16321C432D6E202067C6E1632D6E20206
7C64E5A1D6E204096E646074E5A11C432D6E203067C657D6E204096E64667E16
323CE22D6E204066C6F607AFE22D9D20D6E204096E64667D6E2020298790DA1D
6E202067C6D6E204096E64607E7FE14E5A1D6E20202987EEDA1D6E203067C657
DBBF190DA1E97C18BA20D6E204096E64607D6E202067C654BA1EEDA176BA1B21
304E5A184E2080053534F4051494253F2A20DCF176BA1C2A209000036A076BA1
84E2070053514444445F4B21305BF22D9D208BA20D6E204096E64607D6E20206
7C654BA1EEDA176BA1B21304E5A184E2040053534F4C2A2090000D6A076BA1D6
E204096E64667D6E2020298776BA1D6E202067C6D6E204096E64607E7FE14E5A
1D6E20202987EEDA1D6E203067C65776BA1E97C184E2040053534F476BA19C2A
245632D6E204066C6F60797632DCC02B21305DF22D6E203067C657EF532EF532
93632B213045632D6E202086D697632DCC02FD332D9D20D6E202067D647A2084
E2010628BA208BA2084E201062B2130005F18BA20D6E202086D6B21309FF3004
6F1B2130B2130D8AF18DBF1E41F1091E1D6E202067D6E41F1B2130F1732D9D20
D6E202067D6E41F13A3A1933A1B21305DF22C2A209000035A084E20700535144
44445F4EF53293632B21301E50080053534F40514942580D9D20E16328BA209C
2A28BA2084E204005051425B21309FF30046F1B2130EB3A178BF18BA20ED2A28
BA2084E204005051425B21309FF30046F1B2130EB3A1DBBF190DA11C432D6E20
200713D6E20200723D6E2010F6D6E201046E1632D6E20200723D6E2010F690DA
1E89C1D6E201046E89C1E0CF1DBBF150FA1339201000000000000460EEDA1E0C
F1E0CF150FA1339202000000000001310EEDA1D6E20200713D6E2010F690DA1E
89C1D6E201046E89C1E0CF1DBBF150FA1339201000000000000460EEDA1E0CF1
E0CF150FA1339202000000000001310EEDA1EF5321C432D6E20209723D6E2020
8723D6E20209713D6E20208713E1632D6E20208713B0BC1C2A20700000276BA1
D6E20209713B0BC1C2A20700000276BA176BA1D6E20208723B0BC1C2A2070000
0276BA176BA1D6E20209723B0BC1C2A20700000276BA176BA1D6E20208723D6E
2020871390DA1D6E2020872376BA1B0BC1C2A20700000276BA1D6E20209723D6
E2020971390DA1D6E2020972376BA1B0BC1C2A20700000276BA176BA1EF53293
632B2130D2300A03455252554E445F45545A084E20500535F455459200070053
514444445F470D9D20E16323CE2284E20A03455252554E445F455458B9C13392
03000000000000040D5CE1AFE22D9D204563284E20A03455252554E445F45545
9763204B02B0BC19C2A292CF18B9C19C2A290DA1C58C1C2A20700006276BA162
BC178BF14563284E20A03455252554E445F4554597632DCC02DCC02B21305BF2
2D9D204563284E20A03455252554E445F455459763204B02DBBF1B4402B21305
DF2293632B2130351006005354594C45460D9D20E163278BF1B0BC1C2A20B000
00276A076BA1D13A2A9CF1BB69178BF1803A276BA1B0BC1C2A20700000276BA1
DBBF1B0BC1C2A20700000276BA1C53A2A9CF1E4A20510000400000000000000D
BBF190DA1BB69178BF1803A290DA1B0BC1C2A20700000276BA1DBBF1B0BC1C2A
20700000276BA11C432D6E20208523D6E20208513D6E20209513D6E20209523E
1632D6E2020852376BA1D6E2020951376BA1C2A2090000D6A076BA1D6E202085
2376BA1D6E2020952376BA1C2A2090000C4A076BA1D6E2020851376BA1D6E202
0952376BA1C2A2090000C4A076BA1D6E2020851376BA1D6E2020951376BA1C2A
2090000C4A076BA1D6E2020852376BA1D6E2020951376BA1C2A20D0000C4A066
A076BA1EF53284E2070053514444445F493632B2130852007005352554355445
70D9D20E1632C2A2011000720535F455454563284E20500535F45545976323C0
32C2A2050000DBBF1DCC02C2A20700006276BA178BF162BC178BF1DE03282EC1
683A2279E19B6323FBF14563284E20500535F45545976324563284E20A034552
52554E445F4554597632DCC0293632B21303F00080053545F47474C45480D9D2
0E1632C2A20110000535029637023CE224563284E2040462716779763204B024
563284E206005354425147597632167E1AFE22D9D2047A20091E1B21309C2A26
C7D178BF14563284E20404627167797632DCC024563284E20700716274627167
797632DCC0247A20893E1B21309C2A26C7D14563284E2040C696E65697632DCC
02C9432D9D20E163293632B21304563284E20404796C65697632DCC02C2A20B0
000F4666676BA1B21305BF22D9D204563284E206005354425147597632456328
4E20404627167797632DCC024563284E20600535C494E454976324563284E204
0C696E65697632DCC024563284E206005354594C454976324563284E20404796
C65697632DCC024563284E2090053505142544251475976324563284E2070071
6274627167797632DCC02C2A2090000F4E676BA1B21305DF229C2A2485A19363
2B2130E920070071627462716777029E20200FB0D1000404796C65640D9D20E1
63293632B21300200040C696E6564029E20200EC07100040462716774029E202
00FB071000903556477596E646F67790D9D20E1632521A184E20406505142584
E205085C656664784E206085279676864784E205095E656162784E2040956616
2784E2040A5C6F67784E2050A58696768684E2020855684E2020955684E2020A
55684E2020E48784E2020E49784E20608496464656E64B2A21C432D6E205085C
6566647D6E2060852796768647D6E205095E6561627D6E204095661627D6E204
0A5C6F677D6E2050A586967686D6E20208556D6E20209556D6E2020A556D6E20
20E487D6E2020E497D6E20608496464656E6D6E20205556E1632EB3A1C9432D9
D20E1632BEF22D6E201057D6E2010978BA20D6E201057D6E2020555690DA1D6E
201097D6E2020955690DA150FA1D6E2020555676BA1B2130DBBF192CF117CB1E
0CF1E0CF13ECB1DBBF193632B21301C432D6E20400727F6A6E1632D6E2020855
645632D6E2020555697632DCC02FDAA14E5A178BF1599A1D6E205085C6566647
D6E205095E6561627D6E20400727F6A6EB3A1D6E205085C6566647D6E2040956
61627D6E20400727F6A6EB3A1D6E2060852796768647D6E205095E6561627D6E
20400727F6A6EB3A1D6E2060852796768647D6E204095661627D6E20400727F6
A6EB3A1126E1D6E2020A55645632D6E2020555697632DCC02FDAA14E5A178BF1
599A1D6E2040A5C6F677D6E205095E6561627D6E20400727F6A6EB3A1D6E2040
A5C6F677D6E204095661627D6E20400727F6A6EB3A1D6E2050A586967686D6E2
05095E6561627D6E20400727F6A6EB3A1D6E2050A586967686D6E20409566162
7D6E20400727F6A6EB3A1146E1EF532D6E205085C6566647D6E2060852796768
647D6E205095E6561627D6E204095661627D6E20208556D6E20209556D6E2020
A556D6E2020E487D6E2020E497D6E20608496464656E6EF53293632B21302350
040050514254047A207792000000000000000290000000000000000779200000
000000000020000000000000005084E201085E4A205100080000000000000007
792000000000000000000000000000000000166E184E201095B21306B0002054
15208BA20ED2A2ED2A284E20109590DA1EEDA184E20108533920999000000000
005090DA1ED2A2D20B184E20109533920000000000000021090DA1ED2A2D20B1
76BA1599A1509B1EEDA184E201095B93A284E201085ED2A290DA1ED2A2D20B18
4E201095ED2A290DA1ED2A2D20B176BA1EEDA1509B1EEDA176BA1B2130EF0004
0440514254047A20E1B2071000400004000000400000E1B20710004000040000
00402000E1B2071000400004000090000080E1B2071000400004000040104010
E1B2071000400004000020802090E1B207100040000400008050A010E1B20710
00400004000050A05080E1B20710004000040000A050A050E1B2071000400004
000050A050A0E1B20710004000040000A050A070E1B2071000400004000070A0
50E0E1B20710004000040000D070D060E1B20710004000040000B0E0B0E0E1B2
071000400004000070D0F0B0E1B20710004000040000F0B0D0F0E1B207100040
00040000F0B0F0F0B21306D1009046F676279646D6160790D9D20E163284E202
0541584E20400505142584E20406505142584E20708585279676864784E20608
585C656664784E20509595C6F67784E206095958696768684E205085C6566647
84E206085279676864784E205095E656162784E20409566162784E2020E48784
E2020E497B51A11C432D6E206037564727E676D6E20205617D6E20200707D6E2
0208513D6E20208523D6E20209513D6E20209523D6E2030872713D6E20308727
23D6E2030972713D6E2030972723D6E2020E485D6E2020E495E1632D6E202085
23D6E2020851390DA1D6E20209523D6E2020951390DA11C432D6E20204485D6E
20204495E1632D6E2020561747A2084E2010858BA20D6E20208513D6E2020448
59C2A2D6E2020E4859C2A290DA1872B176BA1EEDA13392099900000000000506
83A2D6E2020E4959C2A2D6E2020E485D6E2020E495EEDA1872B190DA184E2030
454545EEDA1339209990000000000050D6E2020E485D6E2020E495EEDA150FA1
76BA1EEDA1D6BB1D20B1339209990000000000059D6E2020E4959C2A2D6E2020
E485D6E2020E495EEDA1872B190DA184E2030454545EEDA13392099900000000
00050D6E2020E485D6E2020E495EEDA150FA176BA1EEDA13ABB176BA1EEDA176
BA1EEDA176BA1339209990000000000050D6E20204485D6E2020E4859C2A290D
A150FA1EEDA190DA1B213084E2010958BA20D6E20209513D6E20204495D6E202
0E4959C2A290DA150FA1D6E2020E4959C2A2D6E2020E485D6E2020E495EEDA18
72B190DA184E2030454545EEDA1339209990000000000050D6E2020E485D6E20
20E495EEDA150FA176BA1EEDA1D6BB1EEDA176BA1B2130B2130453F147A2084E
2030454545B21303DA02D6E2020561747A2084E2010858BA20D6E20208513D6E
20204485D6E2020E4859C2A290DA150FA1D6E2020E4859C2A2D6E2020E495D6E
2020E485EEDA1872B190DA184E2030454545EEDA1339209990000000000050D6
E2020E495D6E2020E485EEDA150FA176BA1EEDA1D6BB1EEDA176BA1B213084E2
010958BA20D6E20209513D6E202044959C2A2D6E2020E4959C2A290DA1872B17
6BA1EEDA1339209990000000000050683A2D6E2020E4859C2A2D6E2020E495D6
E2020E485EEDA1872B190DA184E2030454545EEDA1339209990000000000050D
6E2020E495D6E2020E485EEDA150FA176BA1EEDA1D6BB1D20B13392099900000
00000059D6E2020E4859C2A2D6E2020E495D6E2020E485EEDA1872B190DA184E
2030454545EEDA1339209990000000000050D6E2020E495D6E2020E485EEDA15
0FA176BA1EEDA13ABB176BA1EEDA176BA1EEDA176BA133920999000000000005
0D6E20204495D6E2020E4959C2A290DA150FA1EEDA190DA1B2130B2130453F14
7A2084E2030454545B21303DA02DBBF1FD332D9D2047A2084E20304545454B2A
29C2A2B2130A40E11C6E13CE22D6E206037564727E676AFE22D9D20D6E203087
2713D6E2030872723126E1D6E2030972713D6E2030972723146E1B21305DF22D
6E2020E485D6E2020E495EEDA19C2A290DA1872B1621E1E41F1F52E184E20700
7162746271677E41F184E20700716274627167747A20B21300F2E1D6E2020070
74563284E20400505142597632DCC02D6E20205617E41F1B2130F1732D9D20D6
E20205617E41F1D6E202007074563284E20400505142597632DCC023A3A1933A
1B21305DF22EF532EF53293632B21305C9007074259444D4140570D9D20E1632
9C2A284E209046F676279646D6160793632B213044000A005142535552564143
454A0D9D20E163284E20903556477596E646F6773F2A246CF184E202054151C4
32D6E20208756D6E20209756D6E2020A756D6E20205617E1632803A246CF1D6E
20205617A59C18DBF1DBBF1D6E2020975690DA1DBBF1D6E2020A75690DA192CF
150FA1D6E2020A75676BA18BA2054BA1B2130EEDA1E0CF1D6E2020875690DA1E
0CF150FA1D6E2020875676BA176BA1FD332D9D20E41F14B2A284E209046F6762
79646D61607B2130F1732D9D20D6E20205617E41F13A3A1933A1B21305BF22D9
D20D6E20205617E41F1B21305DF22EF53293632B2130FB10080353545D4F6679
65680D9D20E16323C0321C432D6E2010E6E1632D6E2010E65BCF1D6E2010E65B
CF178BF1634E147A20E4A20510000000000000000000E4A20510000000000000
000000B2130E0CF1AE8C1D6E2010E647A20E4A20510000000000000000000E4A
20510000000000000000000B21300F2E1EF532DE0324B2A2F17A133920100000
0000001150279E19B63293632B2130D2100505735D4F46550D9D20E16321C432
D6E2010E6E163247A20E4A20510000000000000000000E4A2051000000000000
0000000B21300F2E13C032D6E2010E65BCF1D6E2010E65BCF178BF1634E147A2
0E4A20510000000000000000000E4A20510000000000000000000B2130E0CF1A
E8C1DE032378A19B6328DBF1D6E2010E6EF53293632B2130D010050D4F667965
650D9D20E163247A2084E20406505142584E205085C6566647B213004B0247A2
084E20406505142584E2060852796768647B213004B02126E147A2084E204065
05142584E2040A5C6F677B213004B0247A2084E20406505142584E2050A58696
7686B213004B02146E147A2084E20406505142584E205095E6561627B213004B
0247A2084E20406505142584E204095661627B213004B0247A2084E204065051
42584E2020E497B213004B0284E202054154B2A24B2A21C432D6E205097E6561
627D6E204097661627D6E2040E657D697D6E20205617D6E204097374707D6E20
1097E163245632D6E2010979763245632D6E20109797632DCC02D6E202056174
7A2084E20108584E201095B21303DA0247A2084E201095D6E201097B2130453F
1D6E205097E6561627D6E20409766162790DA1D6E2040E657D69750FA145632D
6E20409737470797632DCC02FD332D9D20E41F14563284E20108597632A40E11
66E14B2A2D6E204097661627D6E205097E65616270A132D6E201097F52E184E2
04046271677D6E201097634E104B02E0CF1ED2A276BA13CE22378A1AFE22D9D2
08DBF1C2A2071000F65747160286562756933A1B21305DF22D6E204097374707
08332B2130F1732D9D20D6E20205617E41F13A3A1933A1B21305DF22D6E20205
617E41F1EF53284E20505735D4F46593632B21303F300C0358616075645F6358
6164656C0D9D20E163247A2084E20406505142584E205085C6566647B213004B
0247A2084E20406505142584E2060852796768647B213004B0247A2084E20406
505142584E205095E6561627B213004B0247A2084E20406505142584E2040956
61627B213004B024B2A24B2A24B2A21C432D6E204087D696E6D6E204087D6168
7D6E204097D696E6D6E204097D61687D6E201087D6E201097D6E20205617E163
2D6E204087D61687D6E204087D696E690DA133920100000000000023050FA1D6
E204097D696E6D6E204097D6168790DA133920100000000010051050FA145632
D6E2010879763245632D6E201097976321C432D6E204087374707D6E20409737
4707D6E201087D6E201097E163284E2020541578BF184E201085E7FE13392099
9000000000004090DA1ED2A2D20B1DBBF184E201095E7FE13392099900000000
0004076BA1ED2A2D20B176BA19C2A276BA1339209990000000000539D20B147A
2084E201085D6E20108784E201095D6E201097B2130453F151A0245632D6E202
0561797632DCC02F52E147A20E4A20510000000000000000000E4A2051000000
0000000000000B21300F2E1E4A20510000000000000000000D6E204097D61687
D6E204097D696E60A132D6E201097E4A20510000000000000000000D6E204087
D696E6D6E204087D616870A132D6E2010872ABF1DBBF1ED2A2387C1634E1DBBF
1D6E202056174E5A13CE2278BF168BC14B2A2D9AE1AFE22D9D208DBF19C2A2B2
1305DF2284E20404796C656339201000000000099510EEDA1D6BB184E2040440
51425DBBF133920100000000000061090DA1599A16C7D1AE8C1803A276BA1D6E
204087374707083328DBF1803A276BA1D6E204097374707083328DBF147A20B2
1300F2E1EF532EF53293632B2130F25009075942554642514D45490D9D20E163
284E20903556477596E646F6774B2A24B2A24B2A24B2A21C432D6E204085D696
E6D6E204085D61687D6E205095E6561627D6E204095661627D6E20208556D6E2
0209556D6E2020A556D6E2040E657D687D6E2040E657D697D6E2050072716375
6D6E201057D6E201067D6E2030264613D6E2030264623E163245632D6E201057
9763245632D6E201067976321C432D6E201057D6E201067E163284E202054154
7A2084E201085D6E20106784E2010958BA20D6E201057D6E2020955676BA1B21
30B2130453F1D6E2020A55690DA145632D6E2010579763250FA1D6E2020A5567
6BA147A20D6E201067D6E201057B21303DA0251A02F52E147A20E4A205100000
00000000000000E4A20510000000000000000000B21300F2E1D6E205095E6561
627D6E20409566162790DA1D6E2040E657D69750FA1D6E204085D61687D6E204
085D696E690DA1D6E2040E657D68750FA11C432D6E20205617D6E20403747075
7D6E204037470787E1632D6E204095661627D6E2020955690DA1D6E205095E65
61627D6E2020955690DA10A132D6E2010574B2A245632D6E203026461397632D
CC02D6E204085D696E645632D6E20106797632DCC024B2A2D6E2040E657D6873
0132D6E201067D6E2020855690DA1D6E20105750FA1D6E2020855676BA1D6E20
2056174E5A1E97C13CE22D6E2030264613AFE22D9D202ABF184E2040C696E656
B21305BF22D9D209C2A245632D6E203026461397632DCC02B21305DF223CE22D
6E2030264623AFE22D9D20D6E2040E657D687ED2A276BA15BCF192CF184E2040
C696E656B21305DF22D6E20403747078745632D6E20106797632B4402C42329C
2A245632D6E203026462397632DCC02D6E20403747075708332D6E2040E657D6
879C2A276BA146CF1EF53247A20B21300F2E1EF532EF53293632B21308550050
956596567750D9D20E163284E20903556477596E646F6774B2A2C9432D9D20E1
6321C432D6E2010B4E1632D8732D9D20D6E2010B468BC178BF14B2A2279E18A7
32D9D208DBF184E201085D6E2010B4E97C184E20108533920100000000000005
9E97C12ABF1893E12C3E1D6E2010B4B21305DF229C2A2279E18A732D6E2010B4
5DF22D6E2010B4EB3A19C2A2387C14563284E2050052514355497632D55F1B21
305DF22EF53293632B21301C432D6E205085C6566647D6E2060852796768647D
6E205095E6561627D6E204095661627D6E20208556D6E20209556D6E2020A556
D6E2020E487D6E2020E497D6E20500727163756D6E201057D6E205086C696E65
6E16324563284E202054159763204B0245632D6E201057976321C432D6E20205
617D6E201057E1632D6E2020561747A2084E2010858BA2084E201085D6E20208
55690DA1D6E201057EEDA1D6E2020855676BA1B213084E2010958BA20D6E2010
57D6E2020955676BA1B2130B2130453F1D6E2020A55690DA145632D6E2010579
763250FA1D6E2020A55676BA147A2084E201085D6E201057B21303DA0251A023
CE22D6E20500727163756AFE22D9D2047A2084E2010628BA2084E2010628BA20
D6E205086C696E656B21309FF30046F1B2130B2130D8AF18DBF1B21305DF22FD
332D9D204563284E2020541597632DCC024563284E20108597632A40E1F52E1D
6E205095E6561627D6E20409566162790DA1C53A250FA11C432D6E2030374707
E1632D6E204095661627D6E2020955690DA1D6E205095E6561627D6E20209556
90DA10A132D6E20105784E2040462716773CE22378A1AFE22D9D208DBF1C2A20
71000F65747160286562756933A1B21305DF22D6E203037470708332EF532B21
30F1732D9D20D6E20205617E41F13A3A1933A1B21305BF22D9D20D6E20205617
E41F1B21305DF2247A20B21300F2E1EF532EF53293632B21304750090073734F
6E647F6572790D9D20E163284E20205415C9432D9D20E1632BEF22D6E2020468
7D6E202046978BA20D6E202046974B2A2279E18BA20FDAA1B21308BA20D6E202
04687599A1D6E2020469750FA1B2130EF3A1B213093632B21301C432D6E20205
617D6E203037C607E1632FD332D9D20D6E2020561784E201085E7FE1D6E20205
61784E201095E7FE1ED2A2387C145632D6E203037C60797632D55F147A2084E2
0108584E201095B21303DA02E41F184E20A035C6F60756649656C646B2130F17
32D9D20D6E20205617E41F13A3A1933A1B21305DF22D6E20205617E41F1EF532
93632B21303D100A035C6F60756649656C646A0D9D20E163247A2084E2040650
5142584E2020E487B213004B0247A2084E20406505142584E2020E497B213004
B0247A2084E20406505142584E205085C6566647B213004B0247A2084E204065
05142584E2060852796768647B213004B022ABF1126E147A2084E20406505142
584E205095E6561627B213004B0247A2084E20406505142584E204095661627B
213004B022ABF1146E184E202054154B2A24B2A24B2A24B2A24B2A24B2A24B2A
21C432D6E2040E657D687D6E2040E657D697D6E2040C6566647D6E2050279676
8647D6E203026F647D6E203047F607D6E2030465627D6E204086374707D6E204
067374707D6E204086F66637D6E204067F66637D6E201087D6E201097D6E2010
46E1632F52E147A20E4A20510000000000000000000E4A205100000000000000
00000B21300F2E1D6E20502796768647D6E2040C656664790DA1D6E2040E657D
68750FA145632D6E20408637470797632DCC02D6E203047F607D6E203026F647
90DA1D6E2040E657D69750FA145632D6E20406737470797632DCC02D6E204086
374707339209990000000000040EEDA145632D6E204086F6663797632DCC02D6
E204067374707339209990000000000040EEDA145632D6E204067F6663797632
DCC02D6E203026F647D6E204067374707ED2A250FA176BA1D6E203047F6070A1
32D6E201097D6E2010974563284E20109597632DCC02D6E2040C6566647D6E20
4086374707ED2A250FA176BA1D6E205027967686470A132D6E201087D6E20108
74563284E20108597632DCC02D6E20304656274E5A145632D6E20104697632DC
C028BA20D6E201046D6E204086F66637EEDA1F1AA1D6E204067F66637D5CE18B
A20D6E204067F66637D6E20104650FA154BA1D6E204067F66637EEDA176BA1B2
1308BA20D6E204086F6663754BA1D6E204086F66637EEDA1D6E201046EEDA176
BA1B2130EF3A1B21304E5A1D6E201087D6E201097E97C12ABF176BA13F2A20DC
F1DBBF190DA184E2040C696E656D6E20408637470708332D6E20406737470708
332EF53247A2084E20108584E201095B2130EFE0247A20B21300F2E193632B21
303360040650514254069A20FF7C420000000608496464656E66033920000000
00000000005200020E49720339200000000000000080D100020E487203392010
00000000000310D100020A55620339200000000000000020D100020955620339
200000000000000519D100020855620339200000000000000520D10006095958
69676866033920000000000000003052000509595C6F67750339200000000000
0000003200070858527967686477033920000000000000003072000608585C65
66647603392000000000000000005200050A5869676865033920000000000000
05203200040A5C6F677403392000000000000000191200040956616274033920
0000000000000030120005095E65616275033920000000000000000032000608
5279676864760339200000000000000030520005085C65666475033920000000
00000000002C6F"
END_ASC
BYTES: #F6C2h 10405
BEGIN_UU Suite3d.uue
begin 644 suite3d
M2%!(4#0X+466*O!_OTX````+4%-/550F)B8F)B8++"I0```D`*``-?54165B
M8F)BHL"B`@4`(`(`"5!33U54)B8F)@DL*E```"``@``U]51%96)B@L"B`@4`
MX`$`!U!33U54)B8'+"I0```<`&``-?54165BP*("!0"@`0`%4%-/550%+"I0
M```8`%!`5B8G5530V0(>-K+^(FTN$+#4Y@("1$NX*M#F`@)$2\K'L1(#.3:R
M$@-5`%!`5B:7U%30V0(>-K+^(FTN$+#4Y@("1$NX*M#F`@)$2QG(L1(#.3:R
M$@-5`%!`5B:7!%70V0(>-K+^(FTN$+#4Y@("1$NX*D`K*BLQD&,C*S&@!``%
M9&5R1E`%G2W@82/K+]+F`@%+;2X@0+2$JP)M+B!`M+02`SDVLA(#4`!@`#7%
ME.149-#9`AXV$DPC;2X@,!33Y@("0S(>-M+F`@)#,4@N0``U-?3$H@()`-"F
M<+8:;2X@,"2#Y`($4%-#3V>KP:("#0#`IC"E<+8:2"YP`#451$1$]=3F`@)#
M,6TN(#`D@SD>_C628R,K,<`-``104T-/!)TMX&$CN"J0+"JX*H#D`@104$%2
M*S&0_P-`]K$2`[ZCD=`:CLF!JP+>HH*K`D@N0``%%22U$@/Y/P!D'\FB@JL"
M2"Y```45)+42`_D_`&0?":VQ$@.^H^&8'`[\T;L?!:\QDP(!``````!`!NZM
MX<`?#OQ1\!HS*2```````!`3X-X:"\O!H@('``!RMAJ]^[&P'"PJ<```(&>K
M<;8:.3:R$@-2`9``-045)$4D%725T-D"'C:"JP+SHH*K`D@N0``%%22U$@/Y
M/P!D'RLQX#L:>\^!O1^X*H`P*K@J@.0"!%!005(K,9#_`T#VL1(#OJ-!*RJT
MHA),(VTN0)#F1@;7Y@(":&UM+B!@U];F`@)R<VTN0&#&]@;7Y@("DG@>-C+L
M(FTN("`W1RLJ<NFA[R*=+>"D`A4`$`````````!`92-M+B`@-Y=G(\T,LA(#
MU2\R[")M+B`@-V>X'#,I$````````!`@EQ[Z+M+9`FTN("`WMVL9,RD@````
M```0$U#P&FTN(UN8"`FAM":WAWAHK,5#[(FTN("`W5_TB\Z)2\!I4-M+F
M`@*2>'DVTLP@5#:"Y`("15%Y-@*T(%0VTN8"`G9M>3;2S""<--+9`AXV$DPC
M;2X@8,?F82-M+B!@QT9>&FTN0)#F1@9'7AK!--+F`@-V;'5M+D"0YD9FYV$C
MPR[2Y@($9FQO</HNTMD";2X@8,?6Y@($:6YD<'[O05X:;2X@((GGWAIM+C!@
MQU;7NQ\)K7&7`@````````````````````!GJ]'F`@-V;'5W*0``````````
M``````````!PMAI(+H``-37T!!64)#4O*M#\<;8:+"J0``!C"F>K@>0"!U!3
M041$5$\K,5#[(ITMT.8"`W9L=7<I`````````````````````'"V&D@N0``U
M-?3$H@()`-"F<+8:;2X@8,?6Y@($:6YD<'[O05X:;2X@((GGWAIM+C!@QU9W
MMAIW*0````````````````````!PMAI(+D``-37T=+8:R:)"92-M+D!@QO8&
MEV<CS0RR$@/5+]+F`@-V;'7^->)?(SDVLA(#5#;2Y@(":&UY-M+,(-\STMD"
M;2X@8-=&IP)(+A!@@JL"N"J`Y`(!)BLQ`%`?N"K0Y@(":&TK,9#_`T#VL1(#
M*S'0J!_8^^$4'Y#AT>8"`G9M3O&Q$@,?-]+9`FTN(YA0?HZ.1,QHK,5#]
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
M;2Y0D.56%B;7Y@($<')O:KZCT>8"!%IL;W=M+D"0918FU^8"!'!R;VJ^H]'F
M`@5::&EG:&TN4)#E5A8FU^8"!'!R;VJ^H]'F`@5::&EG:&TN0)!E%B;7Y@($
M<')O:KZC$60>_C72Y@(%6&QE9G1M+F"`)9=VAD;7Y@(%66YE87)M+D"0918F
MU^8"`EAE;2X@D%76Y@("6F5M+B#@A-?F`@).>6TN8("41D96YN9?(SDVLA(#
M,@5```45)$5`IP)W*0`````````@"0````````!PEP(``````````@``````
M```%2"X0@.6D`A4`@`````````!PEP(`````````````````````8>:!Y`(!
M62LQ8`L``D51`K@JX"TJWJ*"Y`(!60FMX=X:2"X0@#63`ID)```````%":WA
M+2HML('D`@%9,RD`````````$I#0&MZBT@(;9ZM1F1H%N>'>&D@N$)"U.2I(
M+A"`Y2TJ":WA+2HML('D`@%9WJ*2T!K>HM("&V>KX=X:!;GAWAIGJ[$2`_X`
M0$`$%21%0*<"'BMP`0`$`$`````$```>*W`!``0`0`````0"`!XK<`$`!`!`
M```)```('BMP`0`$`$````0!!`$>*W`!``0`0````@@""1XK<`$`!`!````(
M!0H!'BMP`0`$`$````4*!0@>*W`!``0`0```"@4*!1XK<`$`!`!````%"@4*
M'BMP`0`$`$````H%"@<>*W`!``0`0```!PH%#AXK<`$`!`!````-!PT&'BMP
M`0`$`$````L."PX>*W`!``0`0```!PT/"QXK<`$`!`!````/"PT/'BMP`0`$
M`$````\+#P\K,6`=``ED;V=R:61M87`)G2W@82-(+B!0%(7D`@104$%22"Y`
M8`45)(7D`@=86')I9VAT2"Y@@(7%5F9&A^0"!5E9;&]W2"Y@D)6%EG:&AN0"
M!5AL969T2"Y@@"67=H9&A^0"!5EN96%R2"Y`D&46)H?D`@).>$@N(."4MQ4:
MP332Y@(&<V5T<FYG;2X@4!;7Y@("<'!M+B"`%=/F`@)8,FTN()`5T^8"`EDR
M;2XP@"<7T^8"`WAR,FTN,)`G%]/F`@-Y<C)M+B#@A-7F`@).61XVTN8"`E@R
M;2X@@!63T!IM+B"0)=/F`@)9,0FM$4PC;2X@0(35Y@("1%D>-M+F`@)E<70J
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
MY@(!=6TN$Y@(#8F0Q;2XP($8FXV$C5#;2Y@(!=7DV0F4C;2X08)=G(\$T
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
M1I?0&FTN0.!6UX97\!I4-M+F`@1H<W1P>3;2S"!M+C!`]P;7Y@(#8F]T":W1
MY@($;G5M>06O064C;2Y`8#='!Y=G(\T,TN8"!&AS='`S*9"9``````!`X-X:
M5#;2Y@($:&]F<WDVTLP@;2Y`8#='!S>3`ID)```````$[JU!92-M+D!@]V8V
MEV<CS0S2Y@(#8F]T;2Y`8#='!^<M*@6O<;8:;2XP0/<&!QHC;2X0D-?F`@%Y
M5#:"Y`(!67DVTLP@;2Y`P%9F1M?F`@1H<W1PWJ)2\!IGJ]'F`@5R:6=H=*`Q
MTN8"`7AM+A"`1V4C2"X0@)5G(\T,TN8"`V1E<N2E064C;2X00)9G(\T,@JL"
M;2X00-;F`@1H;V9S[JWQH1IM+D!@]V8VU\4>N"K0Y@($=F]F<VTN$$!6\!I%
MJ]'F`@1V;V9S[JUQMAHK,8"K`FTN0(#V9C97M!IM+D"`]F8VY]X:;2X00.;>
M&F>KL1(#_J.Q$@/DI='F`@%X;2X0D.=Y'*+[<;8:\Z("S1^]^Y'0&D@N0,"6
MYE;6Y@($:'-T<(`STN8"!'9S='"`,^)?(W0J@.0"`5A(+A"0M1(#_@Y"IP(K
M,0`O'CDVLA(#,P9`8`45)$5@J0+_QR0```!@@)1&1E;F9C"3`@``````````
M)0`@X)0G,),"``````````@=`"#@A"<PDP(!```````P`1T`(*!5)C"3`@``
M```````"'0`@D%4F,),"````````4)$=`""`528PDP(```````!0`AT`8)"5
MA99VAF8PDP(``````````R4`4)"5Q?9V5S"3`@``````````(P!P@(4EEW:&
M1G<PDP(``````````R<`8("%Q59F1F<PDP(``````````"4`4*"%EG:&5C"3
M`@```````%`"(P!`H,7V=D<PDP(`````````D2$`0)!E%B9',),"````````
M``,A`%"0Y586)E<PDP(``````````",`8(`EEW:&1F<PDP(``````````R4`
24(#%5F9&5S"3`@``````````
`
end
sum -r/size 10042/14372 section (from "begin" to "end")
sum -r/size 29546/10413 entire input file
END_UU
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads