Comparar commits

..

10 Commits

Autor SHA1 Mensagem Data
Michael Sweet d996e1ac50 Save changes. 2016-03-17 15:01:39 -04:00
Michael Sweet ce6379738a Make sure submodules are intiialized on the first build... 2016-03-17 10:43:45 -04:00
Michael Sweet 6f2911b5b2 Use --recursive pull to pick up changes from upstream. 2016-03-17 10:34:53 -04:00
Michael Sweet 443cd51633 Save new location of CUPS repositories. 2016-03-17 10:26:46 -04:00
Michael Sweet b4dea4d7c6 Ignore generated files. 2016-03-15 12:19:16 -04:00
Michael Sweet 608728d8a4 Add date to log files. 2016-03-15 12:11:03 -04:00
Michael Sweet 3dd728977a Update build script to work with Git. 2016-03-15 12:08:54 -04:00
Michael Sweet 5b8f8fee67 Re-add development (master) submodule. 2016-03-15 11:57:44 -04:00
Michael Sweet a6d5d8328d First set of changes for making build/test environment work with Git. 2016-03-15 11:36:02 -04:00
Michael Sweet 89c7a9d178 Initial import of CUPS build & test framework 2016-03-15 11:24:40 -04:00
744 arquivos alterados com 6465 adições e 190175 exclusões
+10
Ver Arquivo
@@ -0,0 +1,10 @@
*.o
.buildrev
buildtest.env
build.log
temp
tools/.buildrev
tools/Makefile
tools/config.log
tools/config.status
tools/sendbuildlog
+7
Ver Arquivo
@@ -0,0 +1,7 @@
[submodule "stable"]
path = stable
url = https://github.com/apple/cups.git
branch = branch-2.1
[submodule "development"]
path = development
url = https://github.com/apple/cups.git
-386
Ver Arquivo
@@ -1,386 +0,0 @@
<HTML>
<HEAD>
<TITLE>Software License Agreement - Common UNIX Printing System</TITLE>
</HEAD>
<BODY BGCOLOR=#ffffff>
<H2 ALIGN="CENTER">Common UNIX Printing System License Agreement</H2>
<P ALIGN="CENTER">Copyright 1997-1999 by Easy Software Products<BR>
44141 AIRPORT VIEW DR STE 204<BR>
HOLLYWOOD, MARYLAND 20636-3111 USA<BR>
<BR>
Voice: +1.301.373.9603<BR>
Email: cups-info@cups.org<BR>
WWW: http://www.cups.org
<H3>Introduction</H3>
<P>The Common UNIX Printing System<SUP>TM</SUP>, or CUPS<SUP>TM</SUP>,
is provided under the GNU General Public License, Version 2. A copy of
this license follows this introduction.
<P>For those not familiar with the GNU General Public License, the license
basically allows you to:
<UL>
<LI>Use the CUPS software at no charge.
<LI>Distribute verbatim copies of the software in source or
binary form.
<LI>Sell verbatim copies of the software for a media fee, or
sell support for the software.
<LI>Distribute or sell printer drivers and filters that use the
CUPS API so long as source code is made available under the GPL.
</UL>
<P>What this license <B>does not</B> allow you to do is make changes or
add features to CUPS and then sell a binary distribution without source
code. You have to provide source for any new drivers, changes, or
additions to the software, and all code must be provided under the GPL.
<P>Also, since we have trademarked the Common UNIX Printing System, CUPS,
and CUPS logo, you may not release a derivative product using those names
without permission from Easy Software Products.
<H3>Binary Distribution Rights</H3>
<P>Easy Software Products also sells rights to the CUPS source code
under a binary distribution license for vendors that are unable to
release source code for their drivers or additions and modifications to
CUPS under the GPL. For pricing information please contact us at the
address shown above.
<P>The Common UNIX Printing System utilizes GNU GhostScript 4.03 to
convert PostScript files into a stream of raster images. For binary
distribution licensing of this software, please contact:
<BLOCKQUOTE>Miles Jones<BR>
Director of Marketing<BR>
Artifex Software Inc.<BR>
454 Las Gallinas Ave., Suite 108<BR>
San Rafael, CA 94903 USA<BR>
Voice: +1.415.492.9861<BR>
Fax: +1.415.492.9862<BR>
EMail: info@arsoft.com
</BLOCKQUOTE>
<H3>Support</H3>
<P>Easy Software Products sells software support for distributors and
resellers of CUPS. Support for users of CUPS is available from Easy
Software Products through our ESP Print software.
<H3>Trademarks</H3>
<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the
trademark property of Easy Software Products. Any derivative of this
software may not use any of these trademarks without the expressed
written consent of Easy Software Products.
<H2 ALIGN="CENTER">GNU General Public License</H2>
<P ALIGN="CENTER">Version 2, June 1991<BR>
<BR>
Copyright 1989, 1991 Free Software Foundation, Inc.<BR>
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
<P ALIGN="CENTER">Everyone is permitted to copy and distribute verbatim
copies of this license document, but changing it is not allowed.
<H3>Preamble</H3>
<P>The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
<P>When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
<P>To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
<P>For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
<P>We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
<P>Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
<P>Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
<P>The precise terms and conditions for copying, distribution and
modification follow.
<H3>GNU GENERAL PUBLIC LICENSE<BR>
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</H3>
<OL START="0">
<LI>This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
<P>Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
<LI>You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
<P>You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
<LI>You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
<OL TYPE="a">
<LI>You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
<LI>You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
<LI>if the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
</OL>
<P>These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
<P>Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
<P>In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
<LI>You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
<OL TYPE="a">
<LI>Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
<LI>Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
<LI>Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
</OL>
<P>The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
<P>If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
<LI>You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
<LI>You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
<LI>Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
<LI>If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
<P>If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
<P>It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
<P>This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
<LI>If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
<LI>The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
<P>Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
<LI>If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
</OL>
<H3>NO WARRANTY</H3>
<OL START="11">
<LI>BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
<LI>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
</OL>
<H3>END OF TERMS AND CONDITIONS</H3>
</BODY>
</HTML>
+922 -286
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-111
Ver Arquivo
@@ -1,111 +0,0 @@
#
# "$Id$"
#
# Common makefile definitions for the Common UNIX Printing System (CUPS).
#
# @configure_input@
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
#
# Programs...
#
AR = @AR@
AWK = @AWK@
CC = @CC@
CP = @CP@
HTMLDOC = @HTMLDOC@
LN = /bin/ln -sf
MKDIR = @MKDIR@ -p
NROFF = @GROFF@ -T ascii
RANLIB = @RANLIB@
RM = @RM@ -f
SHELL = /bin/sh
#
# Program options...
#
# OPTIM defines the common compiler optimization/debugging options.
# OPTIONS defines other compile-time options (currently only -dDEBUG for
# extra debug info)
#
ARFLAGS = crvs
CFLAGS = @CFLAGS@ $(OPTIM) -I.. $(OPTIONS)
IMGLIBS = @IMGLIBS@ $(LIBS) -lm
LDFLAGS = @LDFLAGS@ $(OPTIM)
LIBS = @LIBS@ -L../cups -lcups
OPTIM = @OPTIM@
OPTIONS =
#
# Directories...
#
# The first section uses the GNU names (which are *extremely*
# difficult to find in a makefile because they are lowercase...)
# We have to define these first because autoconf uses ${prefix}
# and ${exec_prefix} for most of the other directories...
#
# This is immediately followed by definition in ALL CAPS for the
# needed directories...
#
bindir = @bindir@
datadir = @datadir@
exec_prefix = @exec_prefix@
includedir = @includedir@
infodir = @infodir@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
top_srcdir = @top_srcdir@
BINDIR = @bindir@
DATADIR = @CUPS_DATADIR@
INCLUDEDIR = $(includedir)/cups
LIBDIR = $(libdir)
LOCALEDIR = @CUPS_LOCALEDIR@
MANDIR = @mandir@
SBINDIR = @sbindir@
SERVERROOT = @CUPS_SERVERROOT@
#
# Rules...
#
.SUFFIXES: .a .c .h .1 .2 .3 .4 .5 .6 .7 .8 .o .z
.c.o:
$(CC) $(CFLAGS) -c $<
.1.z .2.z .3.z .4.z .5.z .6.z .7.z .8.z:
$(NROFF) -man $< >t
pack -f t
mv t.z $@
#
# End of "$Id$"
#
-68
Ver Arquivo
@@ -1,68 +0,0 @@
#
# "$Id$"
#
# Top-level Makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
include Makedefs
#
# Directories to make...
#
DIRS = cups backend berkeley cgi-bin filter man pstoraster \
scheduler systemv
#
# Make all targets...
#
all:
for dir in $(DIRS); do\
(cd $$dir; make);\
done
#
# Remove object and target files...
#
clean:
for dir in $(DIRS); do\
(cd $$dir; make clean);\
done
#
# Install object and target files...
#
install:
for dir in $(DIRS); do\
(cd $$dir; make install);\
done
(cd conf; make install)
(cd data; make install)
(cd doc; make install)
(cd fonts; make install)
(cd ppd; make install)
#
# End of "$Id$".
#
-141
Ver Arquivo
@@ -1,141 +0,0 @@
<HTML>
<HEAD>
<TITLE>README - Common UNIX Printing System</TITLE>
</HEAD>
<BODY>
<H1>README - CUPS v1.0b3</H1>
<H2>Contents</H2>
<UL>
<LI><A HREF="#intro">Introduction</A>
<LI><A HREF="#require">Requirements</A>
<LI><A HREF="#use">Using CUPS</A>
<LI><A HREF="#known">Known Problems</A>
<LI><A HREF="#report">Reporting Problems</A>
<LI><A HREF="#resources">Other Resources</A>
<LI><A HREF="#legal">Legal Stuff</A>
</UL>
<H2><A NAME="intro">Introduction</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
and users. CUPS provides the System V and Berkeley command-line
interfaces.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis
for managing print jobs and queues. The Line Printer Daemon (LPD,
RFC1179), Server Message Block (SMB), and AppSocket protocols are also
supported with reduced functionality.
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript (currently
based off GNU GhostScript 4.03) and an image file RIP that can be used to
support non-PostScript printers.
<H2><A NAME="require">Requirements</A></H2>
You'll need an ANSI C compiler to build CUPS on your system. As its name
implies, CUPS is designed to run on the UNIX operating system, however
the CUPS interface library and most of the filters and backends supplied
with CUPS should also run under Microsoft&reg; Windows&reg;.
<P>For the image file filters you'll need the JPEG, PNG, TIFF, and ZLIB
libraries. CUPS will build without these, but with reduced functionality.
<P>If you make changes to the man pages you'll need GNU groff or another
nroff-like package.
<P>The documentation is formatted using the HTMLDOC software (again, not
needed unless you make changes.)
<H2><A NAME="use">Using CUPS</A></H2>
<P>Pre-compiled binary distributions are available for CUPS from our
web site at
<A HREF="http://www.cups.org/software.html">http://www.cups.org/software.html</A>.
If you'd like to build CUPS from the source, please read the Software
Administrator's Manual.
<P>Once you have installed CUPS, the Software Administrator's Manual and
Software User's Manual are excellent places to start setting things up.
<H2><A NAME="known">Known Problems</A></H2>
The following known problems are being worked on and should be resolved for
the fourth beta release of CUPS:
<UL>
<LI>Documentation is not completed.
<LI>The lpc command currently only supports the help and status
commands.
<LI>The class and job CGIs are currently not provided.
</UL>
CUPS has been built and tested on the following operating systems:
<UL>
<LI>Digital UNIX 4.0d
<LI>HP-UX 10.20 and 11.0
<LI>IRIX 5.3, 6.2, 6.5.3
<LI>Linux (RedHat 5.2)
<LI>Solaris 2.5.1, 2.6, 2.7 (aka 7)
</UL>
The client libraries and filters have been successfully compiled under
Microsoft Windows using Visual C++ 6.0.
<H2><A NAME="report">Reporting Problems</A></H2>
If you have problems, please send an email to
<A HREF="mailto:cups-support@cups.org">cups-support@cups.org</A>. Include
your operating system and version, compiler and version, and any errors
or problems you've run into.
<H2><A NAME="resources">Other Resources</A></H2>
See the CUPS web site at "http://www.cups.org" for other site links.
<P>You can subscribe to the CUPS mailing list by sending a message containing
"subscribe cups" to <A HREF="mailto:majordomo@cups.org">majordomo@cups.org</A>.
This list is provided to discuss problems, questions, and improvements to
the CUPS software. New releases of CUPS are announced to this list as well.
<H2><A NAME="legal">Legal Stuff</A></H2>
CUPS is Copyright 1993-1999 by Easy Software Products. CUPS, the CUPS logo,
and the Common UNIX Printing System are the trademark property of Easy Software
Products.
<P>CUPS is provided under the terms of the
<A HREF="LICENSE.html">GNU General Public License</A>
which is located in the files "LICENSE.html" and "LICENSE.txt". For commercial
support and "binary-only" licensing information, please contact:
<UL>
Attn: CUPS Licensing Information
<BR>Easy Software Products
<BR>44141 Airport View Drive, Suite 204
<BR>Hollywood, Maryland 20636-3111 USA
<P>Voice: +1.301.373.9603
<BR>Email: <A HREF="mailto:cups-info@cups.org">cups-info@cups.org</A>
<BR>WWW: <A HREF="http://www.cups.org">http://www.cups.org</A>
</UL>
<P>If you're interested in a complete, commercial printing solution for UNIX,
check out our ESP Print software at <A HREF="http://www.easysw.com/print.html">
http://www.easysw.com/print.html</A>.
</BODY>
</HTML>
+25 -101
Ver Arquivo
@@ -1,113 +1,37 @@
README - CUPS v1.0b3
README.txt - 2016-03-15
-----------------------
Contents
This directory contains an automated build and test environment for CUPS.
* Introduction
* Requirements
* Using CUPS
* Known Problems
* Reporting Problems
* Other Resources
* Legal Stuff
Introduction
ENVIRONMENT
The Common UNIX Printing System provides a portable printing layer for UNIX®
operating systems. It has been developed by Easy Software Products to
promote a standard printing solution for all UNIX vendors and users. CUPS
provides the System V and Berkeley command-line interfaces.
If present, the buildtest.env file sets additional shell variables for the
build and test scripts described below. The following variables are
currently supported:
CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis for
managing print jobs and queues. The Line Printer Daemon (LPD, RFC1179),
Server Message Block (SMB), and AppSocket protocols are also supported with
reduced functionality.
BUILDOPTIONS - Configure options that are passed to each target
BUILDNOTIFY - An email address or URL that specifies where the
build log should be sent.
BUILDSUBJECT - A string to include in the subject (default is empty
string)
CUPS adds network printer browsing and PostScript Printer Description
("PPD")-based printing options to support real world applications under
UNIX.
CUPS also includes a customized version of GNU GhostScript (currently based
off GNU GhostScript 4.03) and an image file RIP that can be used to support
non-PostScript printers.
SCRIPTS
Requirements
The build.sh script builds the current stable branch of CUPS along with
master ("latest"), running "make check" in each. Normally you will run the
script via a cron job:
You'll need an ANSI C compiler to build CUPS on your system. As its name
implies, CUPS is designed to run on the UNIX operating system, however the
CUPS interface library and most of the filters and backends supplied with
CUPS should also run under Microsoft® Windows®.
0 0 * * 0 /path/to/build.sh --update --quiet clean all
0 0 * * 1-6 /path/to/build.sh --update --quiet
For the image file filters you'll need the JPEG, PNG, TIFF, and ZLIB
libraries. CUPS will build without these, but with reduced functionality.
The "--update" option tells build.sh to do an "git pull" prior to building.
If you make changes to the man pages you'll need GNU groff or another
nroff-like package.
The "--quiet" option tells build.sh to work quietly and optionally send the
build log via email or HTTP POST for recording, automated processing, etc.
The documentation is formatted using the HTMLDOC software (again, not needed
unless you make changes.)
Using CUPS
Pre-compiled binary distributions are available for CUPS from our web site
at http://www.cups.org/software.html. If you'd like to build CUPS from the
source, please read the Software Administrator's Manual.
Once you have installed CUPS, the Software Administrator's Manual and
Software User's Manual are excellent places to start setting things up.
Known Problems
The following known problems are being worked on and should be resolved for
the fourth beta release of CUPS:
* Documentation is not completed.
* The lpc command currently only supports the help and status commands.
* The class and job CGIs are currently not provided.
CUPS has been built and tested on the following operating systems:
* Digital UNIX 4.0d
* HP-UX 10.20 and 11.0
* IRIX 5.3, 6.2, 6.5.3
* Linux (RedHat 5.2)
* Solaris 2.5.1, 2.6, 2.7 (aka 7)
The client libraries and filters have been successfully compiled under
Microsoft Windows using Visual C++ 6.0.
Reporting Problems
If you have problems, please send an email to cups-support@cups.org. Include
your operating system and version, compiler and version, and any errors or
problems you've run into.
Other Resources
See the CUPS web site at "http://www.cups.org" for other site links.
You can subscribe to the CUPS mailing list by sending a message containing
"subscribe cups" to majordomo@cups.org. This list is provided to discuss
problems, questions, and improvements to the CUPS software. New releases of
CUPS are announced to this list as well.
Legal Stuff
CUPS is Copyright 1993-1999 by Easy Software Products. CUPS, the CUPS logo,
and the Common UNIX Printing System are the trademark property of Easy
Software Products.
CUPS is provided under the terms of the GNU General Public License which is
located in the files "LICENSE.html" and "LICENSE.txt". For commercial
support and "binary-only" licensing information, please contact:
Attn: CUPS Licensing Information
Easy Software Products
44141 Airport View Drive, Suite 204
Hollywood, Maryland 20636-3111 USA
Voice: +1.301.373.9603
Email: cups-info@cups.org
WWW: http://www.cups.org
If you're interested in a complete, commercial printing solution for UNIX,
check out our ESP Print software at http://www.easysw.com/print.html.
The "clean" and "all" options specify build targets; the default target is
"all". In the example above, the first line tells cron to run the script at
midnight each day; Sunday (day 0) also does a clean build, while every other
day only builds files that have changed.
-98
Ver Arquivo
@@ -1,98 +0,0 @@
#
# "$Id$"
#
# Backend makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
include ../Makedefs
TARGETS = lpd parallel serial smb socket
OBJS = lpd.o parallel.o serial.o smb.o socket.o
#
# Make all targets...
#
all: $(TARGETS)
#
# Clean all object files...
#
clean:
rm -f $(OBJS) $(TARGETS)
#
# Install all targets...
#
install:
-$(MKDIR) $(SERVERROOT)/backend
$(CP) $(TARGETS) $(SERVERROOT)/backend
#
# lpd
#
lpd: lpd.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o lpd lpd.o $(LIBS)
lpd.o: ../cups/cups.h ../Makedefs
#
# parallel
#
parallel: parallel.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o parallel parallel.o $(LIBS)
parallel.o: ../cups/cups.h ../Makedefs
#
# serial
#
serial: serial.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o serial serial.o $(LIBS)
serial.o: ../cups/cups.h ../Makedefs
#
# smb
#
smb: smb.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o smb smb.o $(LIBS)
smb.o: ../cups/cups.h ../Makedefs
#
# socket
#
socket: socket.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o socket socket.o $(LIBS)
socket.o: ../cups/cups.h ../Makedefs
#
# End of "$Id$".
#
-394
Ver Arquivo
@@ -1,394 +0,0 @@
/*
* "$Id$"
*
* Line Printer Daemon backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Send a file to the printer or server.
* lpd_command() - Send an LPR command sequence and wait for a reply.
* lpd_queue() - Queue a file using the Line Printer Daemon protocol.
*/
/*
* Include necessary headers.
*/
#include <cups/cups.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <cups/string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#if defined(WIN32) || defined(__EMX__)
# include <winsock.h>
#else
# include <sys/socket.h>
# include <netinet/in.h>
# include <arpa/inet.h>
# include <netdb.h>
#endif /* WIN32 || __EMX__ */
extern int rresvport(int *port); /* Hello? No prototype for this... */
/*
* Local functions...
*/
static int lpd_command(int lpd_fd, char *format, ...);
static int lpd_queue(char *hostname, char *printer, char *filename,
char *user, int copies);
/*
* 'main()' - Send a file to the printer or server.
*
* Usage:
*
* printer-uri job-id user title copies options [file]
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
char method[255], /* Method in URI */
hostname[1024], /* Hostname */
username[255], /* Username info (not used) */
resource[1024], /* Resource info (printer name) */
filename[1024]; /* File to print */
int port; /* Port number (not used) */
int status; /* Status of LPD job */
if (argc < 6 || argc > 7)
{
fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
argv[0]);
return (1);
}
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, copy stdin to a temporary file and print the temporary
* file.
*/
if (argc == 6)
{
/*
* Copy stdin to a temporary file...
*/
FILE *fp; /* Temporary file */
char buffer[8192]; /* Buffer for copying */
int bytes; /* Number of bytes read */
if ((fp = fopen(tmpnam(filename), "w")) == NULL)
{
perror("lpd: unable to create temporary file");
return (1);
}
while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
if (fwrite(buffer, 1, bytes, fp) < bytes)
{
perror("lpd: unable to write to temporary file");
fclose(fp);
unlink(filename);
return (1);
}
fclose(fp);
}
else
strcpy(filename, argv[6]);
/*
* Extract the hostname and printer name from the URI...
*/
httpSeparate(argv[0], method, username, hostname, &port, resource);
/*
* Queue the job...
*/
status = lpd_queue(hostname, resource + 1, filename,
argv[2] /* user */, atoi(argv[4]) /* copies */);
/*
* Remove the temporary file if necessary...
*/
if (argc < 7)
unlink(filename);
/*
* Return the queue status...
*/
return (status);
}
/*
* 'lpd_command()' - Send an LPR command sequence and wait for a reply.
*/
static int /* O - Status of command */
lpd_command(int fd, /* I - Socket connection to LPD host */
char *format, /* I - printf()-style format string */
...) /* I - Additional args as necessary */
{
va_list ap; /* Argument pointer */
char buf[1024]; /* Output buffer */
int bytes; /* Number of bytes to output */
char status; /* Status from command */
/*
* Format the string...
*/
va_start(ap, format);
bytes = vsprintf(buf, format, ap);
va_end(ap);
fprintf(stderr, "lpd: lpd_command %02.2x %s", buf[0], buf + 1);
/*
* Send the command...
*/
if (send(fd, buf, bytes, 0) < bytes)
return (-1);
/*
* Read back the status from the command and return it...
*/
if (recv(fd, &status, 1, 0) < 1)
return (-1);
fprintf(stderr, "lpd: lpd_command returning %d\n", status);
return (status);
}
/*
* 'lpd_queue()' - Queue a file using the Line Printer Daemon protocol.
*/
static int /* O - Zero on success, non-zero on failure */
lpd_queue(char *hostname, /* I - Host to connect to */
char *printer, /* I - Printer/queue name */
char *filename, /* I - File to print */
char *user, /* I - Requesting user */
int copies) /* I - Number of copies */
{
FILE *fp; /* Job file */
char localhost[255]; /* Local host name */
int error; /* Error number */
struct stat filestats; /* File statistics */
int port; /* LPD connection port */
int fd; /* LPD socket */
char control[10240], /* LPD control 'file' */
*cptr; /* Pointer into control file string */
char status; /* Status byte from command */
struct sockaddr_in addr; /* Socket address */
struct hostent *hostaddr; /* Host address */
size_t nbytes, /* Number of bytes written */
tbytes; /* Total bytes written */
char buffer[8192]; /* Output buffer */
/*
* First try to reserve a port for this connection...
*/
if ((hostaddr = gethostbyname(hostname)) == NULL)
{
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s",
hostname, strerror(errno));
return (1);
}
fprintf(stderr, "INFO: Attempting to connect to host %s for printer %s\n",
hostname, printer);
memset(&addr, 0, sizeof(addr));
memcpy(&(addr.sin_addr), hostaddr->h_addr, hostaddr->h_length);
addr.sin_family = hostaddr->h_addrtype;
addr.sin_port = htons(515); /* LPD/printer service */
for (port = 732;;)
{
if ((fd = rresvport(&port)) < 0)
{
perror("ERROR: Unable to connect to printer");
return (1);
}
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
error = errno;
close(fd);
fd = -1;
if (error == ECONNREFUSED)
{
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...",
hostname);
sleep(30);
}
else if (error == EADDRINUSE)
{
port --;
if (port < 721)
port = 732;
}
else
{
perror("ERROR: Unable to connect to printer");
return (1);
}
}
else
break;
}
/*
* Next, open the print file and figure out its size...
*/
if (stat(filename, &filestats))
{
perror("lpd: unable to stat print file");
return (1);
}
if ((fp = fopen(filename, "rb")) == NULL)
{
perror("lpd: unable to open print file for reading");
return (1);
}
/*
* Send a job header to the printer, specifying no banner page and
* literal output...
*/
lpd_command(fd, "\002%s\n", printer); /* Receive print job(s) */
gethostname(localhost, sizeof(localhost));
if (strchr(localhost, '.') != NULL)
*strchr(localhost, '.') = '\0';
sprintf(control, "H%s\nP%s\n", localhost, user);
cptr = control + strlen(control);
while (copies > 0)
{
sprintf(cptr, "ldfA%03.3d%s\n", getpid() % 1000, localhost);
cptr += strlen(cptr);
copies --;
}
sprintf(cptr, "UdfA%03.3d%s\nNdfA%03.3d%s\n",
getpid() % 1000, localhost,
getpid() % 1000, localhost);
fprintf(stderr, "lpd: Control file is:\n%s", control);
lpd_command(fd, "\002%d cfA%03.3d%s\n", strlen(control), getpid() % 1000,
localhost);
fprintf(stderr, "lpd: Sending control file (%d bytes)\n", strlen(control));
if (send(fd, control, strlen(control) + 1, 0) < (strlen(control) + 1))
{
perror("ERROR: Unable to write control file");
status = 1;
}
else if (read(fd, &status, 1) < 1 || status != 0)
fprintf(stderr, "ERROR: Remote host did not accept control file (%d)\n",
status);
else
{
/*
* Send the print file...
*/
fputs("lpd: Control file sent successfully\n", stderr);
lpd_command(fd, "\003%d dfA%03.3d%s\n", filestats.st_size,
getpid() % 1000, localhost);
fprintf(stderr, "lpd: Sending data file (%u bytes)\n",
(unsigned)filestats.st_size);
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
fprintf(stderr, "INFO: Spooling LPR job, %u%% complete...\n",
(unsigned)(100 * tbytes / filestats.st_size));
if (send(fd, buffer, nbytes, 0) < nbytes)
{
perror("ERROR: Unable to send print file to printer");
break;
}
else
tbytes += nbytes;
}
send(fd, "", 1, 0);
if (tbytes < filestats.st_size)
status = 1;
else if (recv(fd, &status, 1, 0) < 1 || status != 0)
fprintf(stderr, "ERROR: Remote host did not accept data file (%d)\n",
status);
else
fputs("lpd: Data file sent successfully\n", stderr);
}
/*
* Close the socket connection and input file and return...
*/
close(fd);
fclose(fp);
return (status);
}
/*
* End of "$Id$".
*/
-179
Ver Arquivo
@@ -1,179 +0,0 @@
/*
* "$Id$"
*
* Parallel port backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Send a file to the specified parallel port.
*/
/*
* Include necessary headers.
*/
#include <cups/cups.h>
#include <stdio.h>
#include <stdlib.h>
#include <cups/string.h>
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
#else
# include <unistd.h>
# include <fcntl.h>
# include <termios.h>
#endif /* WIN32 || __EMX__ */
/*
* 'main()' - Send a file to the specified parallel port.
*
* Usage:
*
* printer-uri job-id user title copies options [file]
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
char method[255], /* Method in URI */
hostname[1024], /* Hostname */
username[255], /* Username info (not used) */
resource[1024], /* Resource info (device and options) */
*options; /* Pointer to options */
int port; /* Port number (not used) */
FILE *fp; /* Print file */
int fd; /* Parallel device */
int error; /* Error code (if any) */
size_t nbytes, /* Number of bytes written */
tbytes; /* Total number of bytes written */
char buffer[8192]; /* Output buffer */
struct termios opts; /* Parallel port options */
if (argc < 6 || argc > 7)
{
fputs("Usage: parallel job-id user title copies options [file]\n", stderr);
return (1);
}
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, send stdin instead...
*/
if (argc == 6)
fp = stdin;
else
{
/*
* Try to open the print file...
*/
if ((fp = fopen(argv[6], "rb")) == NULL)
{
perror("ERROR: unable to open print file");
return (1);
}
}
/*
* Extract the device name and options from the URI...
*/
httpSeparate(argv[0], method, username, hostname, &port, resource);
/*
* See if there are any options...
*/
if ((options = strchr(resource, '?')) != NULL)
{
/*
* Yup, terminate the device name string and move to the first
* character of the options...
*/
*options++ = '\0';
}
/*
* Open the parallel port device...
*/
if ((fd = open(resource, O_WRONLY)) == -1)
{
perror("ERROR: Unable to open parallel port device file");
return (1);
}
/*
* Set any options provided...
*/
tcgetattr(fd, &opts);
opts.c_lflag &= ~(ICANON | ECHO | ISIG); /* Raw mode */
/**** No options supported yet ****/
tcsetattr(fd, TCSANOW, &opts);
/*
* Finally, send the print file...
*/
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
/*
* Write the print data to the printer...
*/
if (write(fd, buffer, nbytes) < nbytes)
{
perror("ERROR: Unable to send print file to printer");
break;
}
else
tbytes += nbytes;
if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
}
/*
* Close the socket connection and input file and return...
*/
close(fd);
if (fp != stdin)
fclose(fp);
return (0);
}
/*
* End of "$Id$".
*/
-297
Ver Arquivo
@@ -1,297 +0,0 @@
/*
* "$Id$"
*
* Serial port backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Send a file to the printer or server.
*/
/*
* Include necessary headers.
*/
#include <cups/cups.h>
#include <stdio.h>
#include <stdlib.h>
#include <cups/string.h>
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
#else
# include <unistd.h>
# include <fcntl.h>
# include <termios.h>
#endif /* WIN32 || __EMX__ */
/*
* 'main()' - Send a file to the printer or server.
*
* Usage:
*
* printer-uri job-id user title copies options [file]
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
char method[255], /* Method in URI */
hostname[1024], /* Hostname */
username[255], /* Username info (not used) */
resource[1024], /* Resource info (device and options) */
*options, /* Pointer to options */
name[255], /* Name of option */
value[255], /* Value of option */
*ptr; /* Pointer into name or value */
int port; /* Port number (not used) */
FILE *fp; /* Print file */
int fd; /* Parallel device */
int error; /* Error code (if any) */
size_t nbytes, /* Number of bytes written */
tbytes; /* Total number of bytes written */
char buffer[8192]; /* Output buffer */
struct termios opts; /* Parallel port options */
if (argc < 6 || argc > 7)
{
fputs("Usage: serial job-id user title copies options [file]\n", stderr);
return (1);
}
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, send stdin instead...
*/
if (argc == 6)
fp = stdin;
else
{
/*
* Try to open the print file...
*/
if ((fp = fopen(argv[6], "rb")) == NULL)
{
perror("ERROR: unable to open print file");
return (1);
}
}
/*
* Extract the device name and options from the URI...
*/
httpSeparate(argv[0], method, username, hostname, &port, resource);
/*
* See if there are any options...
*/
if ((options = strchr(resource, '?')) != NULL)
{
/*
* Yup, terminate the device name string and move to the first
* character of the options...
*/
*options++ = '\0';
}
/*
* Open the parallel port device...
*/
if ((fd = open(resource, O_WRONLY)) == -1)
{
perror("ERROR: Unable to open serial port device file");
return (1);
}
/*
* Set any options provided...
*/
tcgetattr(fd, &opts);
opts.c_lflag &= ~(ICANON | ECHO | ISIG); /* Raw mode */
if (options != NULL)
while (*options)
{
/*
* Get the name...
*/
for (ptr = name; *options && *options != '=';)
*ptr++ = *options++;
*ptr = '\0';
if (*options == '=')
{
/*
* Get the value...
*/
options ++;
for (ptr = value; *options && *options != '+';)
*ptr++ = *options++;
*ptr = '\0';
if (*options == '+')
options ++;
}
else
value[0] = '\0';
/*
* Process the option...
*/
if (strcasecmp(name, "baud") == 0)
{
/*
* Set the baud rate...
*/
#if B19200 == 19200
cfsetispeed(&opts, atoi(value));
cfsetospeed(&opts, atoi(value));
#else
switch (atoi(value))
{
case 1200 :
cfsetispeed(&opts, B1200);
cfsetospeed(&opts, B1200);
break;
case 2400 :
cfsetispeed(&opts, B2400);
cfsetospeed(&opts, B2400);
break;
case 4800 :
cfsetispeed(&opts, B4800);
cfsetospeed(&opts, B4800);
break;
case 9600 :
cfsetispeed(&opts, B9600);
cfsetospeed(&opts, B9600);
break;
case 19200 :
cfsetispeed(&opts, B19200);
cfsetospeed(&opts, B19200);
break;
case 38400 :
cfsetispeed(&opts, B38400);
cfsetospeed(&opts, B38400);
break;
default :
fprintf(stderr, "WARNING: Unsupported baud rate %s!\n", value);
break;
}
#endif /* B19200 == 19200 */
}
else if (strcasecmp(name, "bits") == 0)
{
/*
* Set number of data bits...
*/
switch (atoi(value))
{
case 7 :
opts.c_cflag &= ~CSIZE;
opts.c_cflag |= CS7;
opts.c_cflag |= PARENB;
opts.c_cflag &= ~PARODD;
break;
case 8 :
opts.c_cflag &= ~CSIZE;
opts.c_cflag |= CS8;
opts.c_cflag &= ~PARENB;
break;
}
}
else if (strcasecmp(name, "parity") == 0)
{
/*
* Set parity checking...
*/
if (strcasecmp(value, "even") == 0)
{
opts.c_cflag |= PARENB;
opts.c_cflag &= ~PARODD;
}
else if (strcasecmp(value, "odd") == 0)
{
opts.c_cflag |= PARENB;
opts.c_cflag |= PARODD;
}
else if (strcasecmp(value, "none") == 0)
opts.c_cflag &= ~PARENB;
}
}
tcsetattr(fd, TCSANOW, &opts);
/*
* Finally, send the print file...
*/
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
/*
* Write the print data to the printer...
*/
if (write(fd, buffer, nbytes) < nbytes)
{
perror("ERROR: Unable to send print file to printer");
break;
}
else
tbytes += nbytes;
if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
}
/*
* Close the socket connection and input file and return...
*/
close(fd);
if (fp != stdin)
fclose(fp);
return (0);
}
/*
* End of "$Id$".
*/
-66
Ver Arquivo
@@ -1,66 +0,0 @@
/*
* "$Id$"
*
* Server Message Block backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
*/
/*
* Include necessary headers.
*/
#include <cups/cups.h>
#include <stdio.h>
#include <stdlib.h>
#include <cups/string.h>
/*
* 'main()' - Send a file to the printer or server.
*
* Usage:
*
* printer-uri job-id user title copies options [file]
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
if (argc < 6 || argc > 7)
{
fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
argv[0]);
return (1);
}
fputs("ERROR: Backend not implemented yet!\n", stderr);
return (1);
}
/*
* End of "$Id$".
*/
-232
Ver Arquivo
@@ -1,232 +0,0 @@
/*
* "$Id$"
*
* AppSocket backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Send a file to the printer or server.
*/
/*
* Include necessary headers.
*/
#include <cups/cups.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <cups/string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#if defined(WIN32) || defined(__EMX__)
# include <winsock.h>
#else
# include <sys/socket.h>
# include <netinet/in.h>
# include <arpa/inet.h>
# include <netdb.h>
#endif /* WIN32 || __EMX__ */
/*
* 'main()' - Send a file to the printer or server.
*
* Usage:
*
* printer-uri job-id user title copies options [file]
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
char method[255], /* Method in URI */
hostname[1024], /* Hostname */
username[255], /* Username info (not used) */
resource[1024]; /* Resource info (not used) */
FILE *fp; /* Print file */
int port; /* Port number */
int fd; /* AppSocket */
int error; /* Error code (if any) */
struct sockaddr_in addr; /* Socket address */
struct hostent *hostaddr; /* Host address */
int wbytes; /* Number of bytes written */
size_t nbytes, /* Number of bytes read */
tbytes; /* Total number of bytes written */
char buffer[8192], /* Output buffer */
*bufptr; /* Pointer into buffer */
struct timeval timeout; /* Timeout for select() */
fd_set input; /* Input set for select() */
if (argc < 6 || argc > 7)
{
fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
argv[0]);
return (1);
}
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, send stdin instead...
*/
if (argc == 6)
fp = stdin;
else
{
/*
* Try to open the print file...
*/
if ((fp = fopen(argv[6], "rb")) == NULL)
{
perror("ERROR: unable to open print file");
return (1);
}
}
/*
* Extract the hostname and port number from the URI...
*/
httpSeparate(argv[0], method, username, hostname, &port, resource);
if (port == 0)
port = 9100; /* Default to HP JetDirect/Tektronix PhaserShare */
/*
* Then try to connect to the remote host...
*/
if ((hostaddr = gethostbyname(hostname)) == NULL)
{
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s",
hostname, strerror(errno));
return (1);
}
fprintf(stderr, "INFO: Attempting to connect to host %s on port %d\n",
hostname, port);
memset(&addr, 0, sizeof(addr));
memcpy(&(addr.sin_addr), hostaddr->h_addr, hostaddr->h_length);
addr.sin_family = hostaddr->h_addrtype;
addr.sin_port = htons(port);
for (;;)
{
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("ERROR: Unable to connect to printer");
return (1);
}
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
error = errno;
close(fd);
fd = -1;
if (error == ECONNREFUSED)
{
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...\n",
hostname);
sleep(30);
}
else
{
perror("ERROR: Unable to connect to printer");
return (1);
}
}
else
break;
}
/*
* Finally, send the print file...
*/
fputs("INFO: Connected to host, sending print job...\n", stderr);
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
/*
* Write the print data to the printer...
*/
tbytes += nbytes;
bufptr = buffer;
while (nbytes > 0)
{
if ((wbytes = send(fd, bufptr, nbytes, 0)) < 0)
{
perror("ERROR: Unable to send print file to printer");
break;
}
nbytes -= wbytes;
bufptr += wbytes;
}
/*
* Check for possible data coming back from the printer...
*/
timeout.tv_sec = 0;
timeout.tv_usec = 0;
FD_ZERO(&input);
FD_SET(fd, &input);
if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
{
/*
* Grab the data coming back and spit it out to stderr...
*/
if ((nbytes = recv(fd, buffer, sizeof(buffer), 0)) > 0)
fprintf(stderr, "INFO: Received %u bytes of back-channel data!\n",
nbytes);
}
else if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
}
/*
* Close the socket connection and input file and return...
*/
close(fd);
if (fp != stdin)
fclose(fp);
return (0);
}
/*
* End of "$Id$".
*/
-91
Ver Arquivo
@@ -1,91 +0,0 @@
#
# "$Id$"
#
# Berkeley commands makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
include ../Makedefs
TARGETS = lpc lpq lpr lprm
OBJS = lpc.o lpq.o lpr.o lprm.o
#
# Make all targets...
#
all: $(TARGETS)
#
# Clean all object files...
#
clean:
rm -f $(OBJS) $(TARGETS)
#
# Install all targets...
#
install:
-$(MKDIR) $(BINDIR)
-$(MKDIR) $(SBINDIR)
$(CP) lpr lprm $(BINDIR)
$(CP) lpc $(SBINDIR)
#
# lpc
#
lpc: lpc.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o lpc lpc.o $(LIBS)
lpc.o: ../cups/cups.h ../Makedefs
#
# lpq
#
lpq: lpq.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o lpq lpq.o $(LIBS)
lpq.o: ../cups/cups.h ../Makedefs
#
# lpr
#
lpr: lpr.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o lpr lpr.o $(LIBS)
lpr.o: ../cups/cups.h ../Makedefs
#
# lprm
#
lprm: lprm.o ../cups/libcups.a
$(CC) $(LDFLAGS) -o lprm lprm.o $(LIBS)
lprm.o: ../cups/cups.h ../Makedefs
#
# End of "$Id$".
#
-452
Ver Arquivo
@@ -1,452 +0,0 @@
/*
* "$Id$"
*
* "lpc" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Parse options and commands.
* compare_strings() - Compare two command-line strings.
* do_command() - Do an lpc command...
* show_help() - Show help messages.
* show_status() - Show printers.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/debug.h>
/*
* Local functions...
*/
static int compare_strings(char *, char *, int);
static void do_command(http_t *, char *, char *);
static void show_help(char *);
static void show_status(http_t *, char *);
/*
* 'main()' - Parse options and commands.
*/
int
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
http_t *http; /* Connection to server */
char line[1024], /* Input line from user */
*params; /* Pointer to parameters */
/*
* Connect to the scheduler...
*/
http = httpConnect("localhost", ippPort());
if (argc > 1)
{
/*
* Process a single command on the command-line...
*/
do_command(http, argv[1], argv[2]);
}
else
{
/*
* Do the command prompt thing...
*/
printf("lpc> ");
while (gets(line) != NULL)
{
/*
* Find any options in the string...
*/
while (isspace(line[0]))
strcpy(line, line + 1);
for (params = line; *params != '\0'; params ++)
if (isspace(*params))
break;
/*
* Remove whitespace between the command and parameters...
*/
while (isspace(*params))
*params++ = '\0';
/*
* The "quit" and "exit" commands exit; otherwise, process as needed...
*/
if (compare_strings(line, "quit", 1) == 0 ||
compare_strings(line, "exit", 2) == 0)
break;
if (*params == '\0')
do_command(http, line, NULL);
else
do_command(http, line, params);
/*
* Put another prompt out to the user...
*/
printf("lpc> ");
}
}
/*
* Close the connection to the server and return...
*/
httpClose(http);
return (0);
}
/*
* 'compare_strings()' - Compare two command-line strings.
*/
static int /* O - -1 or 1 = no match, 0 = match */
compare_strings(char *s, /* I - Command-line string */
char *t, /* I - Option string */
int tmin) /* I - Minimum number of unique chars in option */
{
int slen; /* Length of command-line string */
slen = strlen(s);
if (slen < tmin)
return (-1);
else
return (strncmp(s, t, slen));
}
/*
* 'do_command()' - Do an lpc command...
*/
static void
do_command(http_t *http, /* I - HTTP connection to server */
char *command, /* I - Command string */
char *params) /* I - Parameters for command */
{
if (compare_strings(command, "status", 4) == 0)
show_status(http, params);
else if (compare_strings(command, "help", 1) == 0 ||
strcmp(command, "?") == 0)
show_help(params);
else
puts("?Invalid command");
}
/*
* 'show_help()' - Show help messages.
*/
static void
show_help(char *command) /* I - Command to describe or NULL */
{
if (command == NULL)
{
puts("Commands may be abbreviated. Commands are:");
puts("");
puts("exit help quit status ?");
}
else if (compare_strings(command, "help", 1) == 0 ||
strcmp(command, "?") == 0)
puts("help\t\tget help on commands");
else if (compare_strings(command, "status", 4) == 0)
puts("status\t\tshow status of daemon and queue");
else
puts("?Invalid help command unknown");
}
/*
* 'show_status()' - Show printers.
*/
static void
show_status(http_t *http, /* I - HTTP connection to server */
char *dests) /* I - Destinations */
{
ipp_t *request, /* IPP Request */
*response, /* IPP Response */
*jobs; /* IPP Get Jobs response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
char *printer, /* Printer name */
*device; /* Device URI */
ipp_pstate_t pstate; /* Printer state */
int accepting; /* Is printer accepting jobs? */
int jobcount; /* Count of current jobs */
char *dptr, /* Pointer into destination list */
*ptr; /* Pointer into printer name */
int match; /* Non-zero if this job matches */
char printer_uri[HTTP_MAX_URI];
/* Printer URI */
DEBUG_printf(("show_status(%08x, %08x)\n", http, dests));
if (http == NULL)
return;
/*
* Build a CUPS_GET_PRINTERS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_PRINTERS;
request->request.op.request_id = 1;
language = cupsLangDefault();
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, "/printers/")) != NULL)
{
DEBUG_puts("show_status: request succeeded...");
/*
* Loop through the printers returned in the list and display
* their status...
*/
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
attr = attr->next;
if (attr == NULL)
break;
/*
* Pull the needed attributes from this job...
*/
printer = NULL;
device = "file:/dev/null";
pstate = IPP_PRINTER_IDLE;
jobcount = 0;
accepting = 1;
while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
{
if (strcmp(attr->name, "printer-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
printer = attr->values[0].string.text;
if (strcmp(attr->name, "device-uri") == 0 &&
attr->value_tag == IPP_TAG_URI)
device = attr->values[0].string.text;
if (strcmp(attr->name, "printer-state") == 0 &&
attr->value_tag == IPP_TAG_ENUM)
pstate = (ipp_pstate_t)attr->values[0].integer;
if (strcmp(attr->name, "printer-is-accepting-jobs") == 0 &&
attr->value_tag == IPP_TAG_BOOLEAN)
accepting = attr->values[0].boolean;
attr = attr->next;
}
/*
* See if we have everything needed...
*/
if (printer == NULL)
{
if (attr == NULL)
break;
else
continue;
}
/*
* See if this is a printer we're interested in...
*/
match = dests == NULL;
if (dests != NULL)
{
for (dptr = dests; *dptr != '\0';)
{
/*
* Skip leading whitespace and commas...
*/
while (isspace(*dptr) || *dptr == ',')
dptr ++;
if (*dptr == '\0')
break;
/*
* Compare names...
*/
for (ptr = printer;
*ptr != '\0' && *dptr != '\0' && *ptr == *dptr;
ptr ++, dptr ++);
if (*ptr == '\0' && (*dptr == '\0' || *dptr == ',' || isspace(*dptr)))
{
match = 1;
break;
}
/*
* Skip trailing junk...
*/
while (!isspace(*dptr) && *dptr != '\0')
dptr ++;
while (isspace(*dptr) || *dptr == ',')
dptr ++;
if (*dptr == '\0')
break;
}
}
/*
* Display the printer entry if needed...
*/
if (match)
{
/*
* If the printer state is "IPP_PRINTER_PROCESSING", then grab the
* current job for the printer.
*/
if (pstate == IPP_PRINTER_PROCESSING)
{
/*
* Build an IPP_GET_JOBS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
* limit
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_JOBS;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL,
cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language->language);
sprintf(printer_uri, "ipp://localhost/printers/%s", printer);
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, printer_uri);
if ((jobs = cupsDoRequest(http, request, "/jobs/")) != NULL)
{
for (attr = jobs->attrs; attr != NULL; attr = attr->next)
if (strcmp(attr->name, "job-id") == 0)
jobcount ++;
ippDelete(jobs);
}
}
/*
* Display it...
*/
printf("%s:\n", printer);
if (strncmp(device, "file:", 5) == 0)
printf("\tprinter is on device \'%s\' speed -1\n", device + 5);
else
printf("\tprinter is on device \'%s\' speed -1\n", device);
printf("\tqueuing is %sabled\n", accepting ? "en" : "dis");
printf("\tprinting is %sabled\n",
pstate == IPP_PRINTER_STOPPED ? "dis" : "en");
if (jobcount == 0)
puts("\tno entries");
else
printf("\t%d entries\n", jobcount);
puts("\tdaemon present");
}
if (attr == NULL)
break;
}
ippDelete(response);
}
}
/*
* End of "$Id$".
*/
-366
Ver Arquivo
@@ -1,366 +0,0 @@
/*
* "$Id$"
*
* "lpq" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
*/
/*
* Include necessary headers...
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/debug.h>
/*
* Local functions...
*/
static int show_jobs(http_t *, char *, char *, int, int);
/*
* 'main()' - Parse options and commands.
*/
int
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
http_t *http; /* Connection to server */
char *dest, /* Desired printer */
*user; /* Desired user */
int id, /* Desired job ID */
interval, /* Reporting interval */
longstatus; /* Show file details */
/*
* Connect to the scheduler...
*/
http = httpConnect("localhost", ippPort());
/*
* Check for command-line options...
*/
dest = NULL;
user = NULL;
id = 0;
interval = 0;
longstatus = 0;
for (i = 1; i < argc; i ++)
if (argv[i][0] == '+')
interval = atoi(argv[i] + 1);
else if (argv[i][0] == '-')
{
switch (argv[i][1])
{
case 'P' : /* Printer */
if (argv[i][2])
dest = argv[i] + 2;
else
{
i ++;
dest = argv[i];
}
break;
case 'l' : /* Long status */
longstatus = 1;
break;
default :
fputs("Usage: lpq [-P dest] [-l] [+interval]\n", stderr);
return (1);
}
}
else if (isdigit(argv[i][0]))
id = atoi(argv[i]);
else
user = argv[i];
/*
* Show the status in a loop...
*/
for (;;)
{
i = show_jobs(http, dest, user, id, longstatus);
if (i && interval)
sleep(interval);
else
break;
}
/*
* Close the connection to the server and return...
*/
httpClose(http);
return (0);
}
/*
* 'show_jobs()' - Show printers.
*/
static int /* O - Number of jobs in queue */
show_jobs(http_t *http, /* I - HTTP connection to server */
char *dest, /* I - Destination */
char *user, /* I - User */
int id, /* I - Job ID */
int longstatus) /* I - 1 if long report desired */
{
ipp_t *request, /* IPP Request */
*response; /* IPP Response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
char *jobdest, /* Pointer into job-printer-uri */
*jobuser, /* Pointer to job-originating-user-name */
*jobname; /* Pointer to job-name */
ipp_jstate_t jobstate; /* job-state */
int jobid, /* job-id */
jobsize, /* job-k-octets */
jobpriority, /* job-priority */
jobcount, /* Number of jobs */
rank; /* Rank of job */
char resource[1024]; /* Resource string */
static char *ranks[10] = /* Ranking strings */
{
"th",
"st",
"nd",
"rd",
"th",
"th",
"th",
"th",
"th",
"th"
};
DEBUG_printf(("show_jobs(%08x, %08x, %08x, %d, %d)\n", http, dest, user, id,
longstatus));
if (http == NULL)
return (0);
/*
* Build an IPP_GET_JOBS or IPP_GET_JOB_ATTRIBUTES request, which requires
* the following attributes:
*
* attributes-charset
* attributes-natural-language
* job-uri or printer-uri
* [
*/
request = ippNew();
request->request.op.operation_id = id ? IPP_GET_JOB_ATTRIBUTES : IPP_GET_JOBS;
request->request.op.request_id = 1;
language = cupsLangDefault();
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
if (dest == NULL)
{
if (id)
sprintf(resource, "ipp://localhost/jobs/%d", id);
else
strcpy(resource, "ipp://localhost/jobs");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
NULL, resource);
}
else
{
sprintf(resource, "ipp://localhost/printers/%s", dest);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
NULL, resource);
}
if (user)
{
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
"requesting-user-name", NULL, user);
ippAddBoolean(request, IPP_TAG_OPERATION, "my-jobs", 1);
}
/*
* Do the request and get back a response...
*/
if (!longstatus)
puts("Rank\tPri Owner Job Files Total Size");
jobcount = 0;
if ((response = cupsDoRequest(http, request, "/jobs/")) != NULL)
{
rank = 1;
/*
* Loop through the job list and display them...
*/
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
attr = attr->next;
if (attr == NULL)
break;
/*
* Pull the needed attributes from this job...
*/
jobid = 0;
jobsize = 0;
jobpriority = 50;
jobstate = IPP_JOB_PENDING;
jobname = "untitled";
jobuser = NULL;
jobdest = NULL;
while (attr != NULL && attr->group_tag == IPP_TAG_JOB)
{
if (strcmp(attr->name, "job-id") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobid = attr->values[0].integer;
if (strcmp(attr->name, "job-k-octets") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobsize = attr->values[0].integer * 1024;
if (strcmp(attr->name, "job-priority") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobpriority = attr->values[0].integer;
if (strcmp(attr->name, "job-state") == 0 &&
attr->value_tag == IPP_TAG_ENUM)
jobstate = (ipp_jstate_t)attr->values[0].integer;
if (strcmp(attr->name, "job-printer-uri") == 0 &&
attr->value_tag == IPP_TAG_URI)
if ((jobdest = strrchr(attr->values[0].string.text, '/')) != NULL)
jobdest ++;
if (strcmp(attr->name, "job-originating-user-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
jobuser = attr->values[0].string.text;
if (strcmp(attr->name, "job-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
jobname = attr->values[0].string.text;
attr = attr->next;
}
/*
* See if we have everything needed...
*/
if (jobdest == NULL || jobid == 0)
{
if (attr == NULL)
break;
else
continue;
}
jobcount ++;
/*
* Display the job...
*/
if (longstatus)
{
puts("");
if (jobstate == IPP_JOB_PROCESSING)
printf("%s: active\t\t\t\t ", jobuser);
else
{
printf("%s: %d%s\t\t\t\t ", jobuser, rank, ranks[rank % 10]);
rank ++;
}
printf("[job %03dlocalhost]\n", jobid);
printf("\t%-33s%d bytes\n", jobname, jobsize);
}
else
{
if (jobstate == IPP_JOB_PROCESSING)
printf("active\t");
else
{
printf("%d%s\t", rank, ranks[rank % 10]);
rank ++;
}
printf(" %-5d%-7.7s%-7d%-19s%d bytes\n", jobpriority, jobuser, jobid,
jobname, jobsize);
}
if (attr == NULL)
break;
}
ippDelete(response);
}
return (jobcount);
}
/*
* End of "$Id$".
*/
-232
Ver Arquivo
@@ -1,232 +0,0 @@
/*
* "$Id$"
*
* "lpr" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Parse options and send files for printing.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <cups/cups.h>
/*
* 'main()' - Parse options and send files for printing.
*/
int
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
int job_id; /* Job ID */
char *dest; /* Destination printer */
char *title; /* Job title */
int priority; /* Job priority (1-100) */
int num_copies; /* Number of copies per file */
int num_files; /* Number of files printed */
int num_options; /* Number of options */
cups_option_t *options; /* Options */
int silent; /* Silent or verbose output? */
char tempfile[1024]; /* Temporary file for printing from stdin */
char buffer[8192]; /* Copy buffer */
FILE *temp; /* Temporary file pointer */
silent = 0;
dest = cupsGetDefault();
num_options = 0;
options = NULL;
num_files = 0;
title = NULL;
for (i = 1; i < argc; i ++)
if (argv[i][0] == '-')
switch (argv[i][1])
{
case 'i' : /* indent */
case 'w' : /* width */
if (argv[i][2] == '\0')
i ++;
case 'c' : /* CIFPLOT */
case 'd' : /* DVI */
case 'f' : /* FORTRAN */
case 'g' : /* plot */
case 'n' : /* Ditroff */
case 't' : /* Troff */
case 'v' : /* Raster image */
fprintf(stderr, "Warning: \'%c\' format modifier not supported - output may not be correct!\n",
argv[i][1]);
break;
case 'l' : /* Literal/raw */
num_options = cupsParseOptions("raw", num_options, &options);
break;
case 'p' : /* Prettyprint */
num_options = cupsParseOptions("prettyprint", num_options, &options);
break;
case 'h' : /* Suppress burst page */
case 's' : /* Don't use symlinks */
break;
case 'm' : /* mail on completion */
fputs("Warning: email notification is not supported!\n", stderr);
break;
case 'P' : /* Destination printer or class */
if (argv[i][2] != '\0')
dest = argv[i] + 2;
else
{
i ++;
dest = argv[i];
}
break;
case '#' : /* Number of copies */
if (argv[i][2] != '\0')
num_copies = atoi(argv[i] + 2);
else
{
i ++;
num_copies = atoi(argv[i]);
}
if (num_copies < 1 || num_copies > 100)
{
fputs("lpr: Number copies must be between 1 and 100.\n", stderr);
return (1);
}
sprintf(buffer, "%d", num_copies);
num_options = cupsAddOption("copies", buffer, num_options, &options);
break;
case 'C' : /* Class */
case 'J' : /* Job name */
case 'T' : /* Title */
if (argv[i][2] != '\0')
title = argv[i] + 2;
else
{
i ++;
title = argv[i];
}
break;
default :
fprintf(stderr, "lpr: Unknown option \'%c\'!\n", argv[i][1]);
return (1);
}
else
{
/*
* Print a file...
*/
if (dest == NULL)
{
fputs("lpr: error - no default destination available.\n", stderr);
return (1);
}
num_files ++;
if (title)
job_id = cupsPrintFile(dest, argv[i], title, num_options, options);
else
{
char *filename;
if ((filename = strrchr(argv[i], '/')) != NULL)
filename ++;
else
filename = argv[i];
job_id = cupsPrintFile(dest, argv[i], filename, num_options, options);
}
if (job_id < 1)
{
fprintf(stderr, "lpr: unable to print file \'%s\'.\n", argv[i]);
return (1);
}
}
/*
* See if we printed anything; if not, print from stdin...
*/
if (num_files == 0)
{
if (dest == NULL)
{
fputs("lpr: error - no default destination available.\n", stderr);
return (1);
}
temp = fopen(tmpnam(tempfile), "w");
if (temp == NULL)
{
fputs("lpr: unable to create temporary file.\n", stderr);
return (1);
}
while ((i = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
fwrite(buffer, 1, i, temp);
i = ftell(temp);
fclose(temp);
if (i == 0)
{
fputs("lpr: stdin is empty, so no job has been sent.\n", stderr);
return (1);
}
if (title)
job_id = cupsPrintFile(dest, tempfile, title, num_options, options);
else
job_id = cupsPrintFile(dest, tempfile, "(stdin)", num_options, options);
if (job_id < 1)
{
fprintf(stderr, "lpr: unable to print file \'%s\'.\n", argv[i]);
return (1);
}
}
return (0);
}
/*
* End of "$Id$".
*/
-198
Ver Arquivo
@@ -1,198 +0,0 @@
/*
* "$Id$"
*
* "lprm" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Parse options and cancel jobs.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <cups/cups.h>
#include <cups/language.h>
/*
* 'main()' - Parse options and cancel jobs.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
http_t *http; /* HTTP connection to server */
int i; /* Looping var */
int job_id; /* Job ID */
char *dest; /* Destination printer */
char uri[1024]; /* Printer or job URI */
ipp_t *request; /* IPP request */
ipp_t *response; /* IPP response */
ipp_op_t op; /* Operation */
cups_lang_t *language; /* Language */
/*
* Setup to cancel individual print jobs...
*/
op = IPP_CANCEL_JOB;
job_id = 0;
dest = cupsGetDefault();
response = NULL;
/*
* Open a connection to the server...
*/
if ((http = httpConnect("localhost", ippPort())) == NULL)
{
fputs("lprm: Unable to contact server!\n", stderr);
return (1);
}
/*
* Process command-line arguments...
*/
for (i = 1; i < argc; i ++)
if (argv[i][0] == '-' && argv[i][1] != '\0')
switch (argv[i][1])
{
case 'P' : /* Cancel jobs on a printer */
if (argv[i][2])
dest = argv[i] + 2;
else
{
i ++;
dest = argv[i];
}
break;
default :
fprintf(stderr, "lprm: Unknown option \'%c\'!\n", argv[i][1]);
return (1);
}
else
{
/*
* Cancel a job or printer...
*/
if (isdigit(argv[i][0]))
{
dest = NULL;
op = IPP_CANCEL_JOB;
job_id = atoi(argv[i]);
}
else if (strcmp(argv[i], "-") == 0)
{
/*
* Cancel all jobs
*/
op = IPP_PURGE_JOBS;
}
else
job_id = 0;
/*
* Build an IPP request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri + job-id *or* job-uri
* [requesting-user-name]
*/
request = ippNew();
request->request.op.operation_id = op;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
if (dest)
{
sprintf(uri, "ipp://localhost/printers/%s", dest);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id",
job_id);
}
else
{
sprintf(uri, "ipp://localhost/jobs/%d", job_id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL,
uri);
}
/*
* Do the request and get back a response...
*/
if (op == IPP_PURGE_JOBS)
response = cupsDoRequest(http, request, "/admin/");
else
response = cupsDoRequest(http, request, "/jobs/");
if (response != NULL)
ippDelete(response);
else
{
fputs("lprm: Unable to cancel job(s)!\n", stderr);
return (1);
}
}
/*
* If nothing has been cancelled yet, cancel the current job on the specified
* (or default) printer...
*/
if (response == NULL)
if (!cupsCancelJob(dest, 0))
{
fputs("lprm: Unable to cancel job(s)!\n", stderr);
return (1);
}
return (0);
}
/*
* End of "$Id$".
*/
+143
Ver Arquivo
@@ -0,0 +1,143 @@
#
# Makefile for CUPS build and test repository.
#
# This makefile MUST be used from the build.sh script, otherwise the
# environment will not be configured properly...
#
# Copyright 2007-2016 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Apple Inc. and are protected by Federal copyright
# law. Distribution and use rights are outlined in the file "LICENSE.txt"
# which should have been included with this file. If this file is
# file is missing or damaged, see the license at "http://www.cups.org/".
# Subdirectories to be built...
DIRS = \
stable/.all \
development/.all \
# Make everything...
all: tools/.all $(DIRS)
# Clean everything...
clean: tools/.clean $(DIRS:.all=.clean)
@echo Removing \"temp\" directory...
rm -rf temp
@echo Removing old failed test reports...
find . -name 'cups-str*.html' -mtime +7 -print -exec rm -f '{}' \;
find . -name 'error_log-*' -mtime +7 -print -exec rm -f '{}' \;
# Make CUPS stable
stable/.all: stable/Makedefs
@echo Making all in CUPS stable...
cd stable && $(MAKE) all check
stable/.clean:
@cd stable; if test -f Makedefs; then \
echo Cleaning CUPS stable...; \
$(MAKE) distclean || exit 1; \
fi
stable/Makedefs: stable/Makedefs.in stable/configure \
stable/packaging/cups.list.in \
stable/config.h.in
@cd stable; if test -f Makedefs; then \
echo Cleaning CUPS stable...; \
$(MAKE) distclean || exit 1; \
fi
@echo Configuring CUPS stable...
cd stable && ./configure $(BUILDOPTIONS) \
--enable-static \
--enable-unit-tests --enable-debug-printfs
stable/configure: stable/configure.ac \
stable/config-scripts/cups-common.m4 \
stable/config-scripts/cups-compiler.m4 \
stable/config-scripts/cups-defaults.m4 \
stable/config-scripts/cups-directories.m4 \
stable/config-scripts/cups-dnssd.m4 \
stable/config-scripts/cups-gssapi.m4 \
stable/config-scripts/cups-largefile.m4 \
stable/config-scripts/cups-libtool.m4 \
stable/config-scripts/cups-manpages.m4 \
stable/config-scripts/cups-network.m4 \
stable/config-scripts/cups-opsys.m4 \
stable/config-scripts/cups-pam.m4 \
stable/config-scripts/cups-poll.m4 \
stable/config-scripts/cups-scripting.m4 \
stable/config-scripts/cups-sharedlibs.m4 \
stable/config-scripts/cups-ssl.m4 \
stable/config-scripts/cups-startup.m4 \
stable/config-scripts/cups-threads.m4
@echo Updating CUPS stable configure script...
cd stable; rm -rf autom4te.cache configure; autoconf
# Make CUPS master (bleeding edge development)
development/.all: development/Makedefs
@echo Making all in CUPS development...
cd development && $(MAKE) all check
development/.clean:
@cd development; if test -f Makedefs; then \
echo Cleaning CUPS development...; \
$(MAKE) distclean || exit 1; \
fi
development/Makedefs: development/Makedefs.in development/configure \
development/packaging/cups.list.in \
development/config.h.in
@cd development; if test -f Makedefs; then \
echo Cleaning CUPS development...; \
$(MAKE) distclean || exit 1; \
fi
@echo Configuring CUPS development...
cd development && ./configure $(BUILDOPTIONS) \
--enable-static \
--enable-unit-tests --enable-debug-printfs
development/configure: development/configure.ac \
development/config-scripts/cups-common.m4 \
development/config-scripts/cups-compiler.m4 \
development/config-scripts/cups-defaults.m4 \
development/config-scripts/cups-directories.m4 \
development/config-scripts/cups-dnssd.m4 \
development/config-scripts/cups-gssapi.m4 \
development/config-scripts/cups-largefile.m4 \
development/config-scripts/cups-libtool.m4 \
development/config-scripts/cups-manpages.m4 \
development/config-scripts/cups-network.m4 \
development/config-scripts/cups-opsys.m4 \
development/config-scripts/cups-pam.m4 \
development/config-scripts/cups-poll.m4 \
development/config-scripts/cups-scripting.m4 \
development/config-scripts/cups-sharedlibs.m4 \
development/config-scripts/cups-ssl.m4 \
development/config-scripts/cups-startup.m4 \
development/config-scripts/cups-threads.m4
@echo Updating CUPS development configure script...
cd development; rm -rf autom4te.cache configure; autoconf
# Make the build tools
tools/.all: tools/Makefile
@echo Making all in tools...
cd tools && $(MAKE) install
tools/.clean:
@cd tools; if test -f Makefile; then \
echo Cleaning tools...; \
$(MAKE) distclean || exit 1; \
fi
tools/Makefile: tools/Makefile.in tools/configure
@cd tools; if test -f Makefile; then \
echo Cleaning tools...; \
$(MAKE) distclean || exit 1; \
fi
@echo Configuring Tools...
cd tools && ./configure $(BUILDOPTIONS) --prefix=$(BASEDIR)/temp
Arquivo executável
+233
Ver Arquivo
@@ -0,0 +1,233 @@
#!/bin/sh
#
# Common script for building the current stable and development (master)
# branches of CUPS.
#
# Copyright 2007-2016 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Apple Inc. and are protected by Federal copyright
# law. Distribution and use rights are outlined in the file "LICENSE.txt"
# which should have been included with this file. If this file is
# file is missing or damaged, see the license at "http://www.cups.org/".
#
# Usage:
#
# build.sh [--if-changed] [--quiet] [--update] [target(s)]
#
# Copy any build/test environment variables...
BUILDOPTIONS=""
BUILDNOTIFY=""
BUILDSUBJECT="[`hostname`]"
if test -f buildtest.env; then
. ./buildtest.env
fi
# Get the path to this script...
BASEDIR=`dirname $0`
if test $BASEDIR = .; then
BASEDIR=`pwd`
fi
# Make sure the temporary directory is there...
if test ! -d $BASEDIR/temp; then
mkdir -p $BASEDIR/temp
fi
# Setup common path stuff...
PATH=""
for dir in /usr/xpg4/bin /usr/ccs/bin /opt/SUNWspro/bin /opt/sfw/bin \
/usr/sfw/bin /usr/bsd /usr/freeware/bin /opt/aCC/bin /usr/contrib/bin \
/usr/local/bin $HOME/oss/bin; do
if test -d $dir; then
PATH="$PATH:$dir"
fi
done
if test "x$PATH" = x; then
PATH="$BASEDIR/temp/bin:/usr/bin:/bin"
else
PATH="$BASEDIR/temp/bin$PATH:/usr/bin:/bin"
fi
export PATH
if test -x /usr/xpg4/bin/grep; then
grep=/usr/xpg4/bin/grep
else
grep=grep
fi
if test -x /usr/local/bin/gmake; then
make=/usr/local/bin/gmake
else
make=make
fi
# Parse command-line arguments:
ifchanged=no
quiet=no
update=no
targets=""
while test $# -gt 0; do
case "$1" in
--ifchanged | --if-changed) ifchanged=yes;;
--quiet) quiet=yes;;
--update | update) update=yes;;
*) targets="$targets $1";;
esac
shift
done
# Start the build...
if test $quiet = yes; then
if test $update = yes; then
exec >/dev/null 2>&1
else
if test -f build.log; then
mv build.log build.log.O
fi
exec >build.log 2>&1
fi
fi
if test "x$targets" = x; then
targets="all"
fi
echo "Starting build of '$targets' on `date`"
if test -f git.log; then
# Show Subversion updates...
echo git pull --recurse-submodules; git submodule update --recursive
cat git.log
git status | $grep modified: >git.log
if test -s git.log; then
echo ""
echo ERROR: Local files have modifications:
echo ""
cat git.log
echo ""
fi
rm -f git.log
fi
# Update and then build safely...
if test $update = yes; then
cd $BASEDIR
(git pull --recurse-submodules; git submodule update --recursive) 2>&1 >git.log
# Need to exec since this script might change...
options=""
if test $quiet = yes; then
options="--quiet $options"
fi
if test $ifchanged = yes; then
options="--ifchanged $options"
fi
exec ./build.sh $options $targets
fi
# Make sure submodules are initialized...
if test ! -f stable/Makedefs.in; then
echo Initializing submodules...
git submodule init
git submodule update
fi
# Look for changes to the dependent projects
changed=0
for dir in . tools stable development; do
rev=`git rev-parse HEAD $dir`
if test -f $dir/.buildrev; then
oldrev=`cat $dir/.buildrev`
else
oldrev=""
fi
if test "x$rev" != "x$oldrev"; then
changed=1
fi
echo $rev >$dir/.buildrev
done
if test $ifchanged = yes -a $changed = 0; then
echo No changes to build.
exit 0
fi
# Setup the compiler flags to point to all of the dependent libraries...
#CFLAGS="-I$BASEDIR/temp/include"
#CPPFLAGS="-I$BASEDIR/temp/include"
#CXXFLAGS="-I$BASEDIR/temp/include"
#DSOFLAGS="-L$BASEDIR/temp/lib"
#LDFLAGS="-L$BASEDIR/temp/lib"
CFLAGS="${CFLAGS:=}"
CPPFLAGS="${CPPFLAGS:=}"
CXXFLAGS="${CXXFLAGS:=}"
DSOFLAGS="${DSOFLAGS:=}"
LDFLAGS="${LDFLAGS:=}"
export CFLAGS
export CPPFLAGS
export CXXFLAGS
export DSOFLAGS
export LDFLAGS
case `uname` in
Linux*)
if test "`uname -m`" = x86_64; then
# 64-bit Linux needs this, at least for now...
X_LIBS="-L/usr/X11R6/lib64"
export X_LIBS
fi
;;
*BSD*)
CFLAGS="$CFLAGS -I/usr/local/include"
CPPFLAGS="$CPPFLAGS -I/usr/local/include"
DSOFLAGS="$DSOFLAGS -L/usr/local/lib"
LDFLAGS="$LDFLAGS -L/usr/local/lib"
;;
esac
# Show the environment...
echo Environment:
env
# Do the build using the top-level makefile...
echo $make -f build.mak BASEDIR=$BASEDIR BUILDOPTIONS="$BUILDOPTIONS" $targets
$make -f build.mak BASEDIR=$BASEDIR BUILDOPTIONS="$BUILDOPTIONS" $targets </dev/null
status=$?
if test $status = 0; then
echo Build succeeded on `date`
else
echo Build failed on `date`
fi
# If configured, send the build log to a central server for processing...
if test "x$BUILDNOTIFY" != x -a -x temp/bin/sendbuildlog -a $quiet = yes; then
attachments=""
date=`date "+%Y-%m-%d"`
if test -f stable/test/cups-str-2.1-$date-$USER.html; then
attachments="$attachments -a stable/test/cups-str-2.1-$date-$USER.html"
fi
if test -f developent/test/cups-str-2.2-$date-$USER.html; then
attachments="$attachments -a developent/test/cups-str-2.2-$date-$USER.html"
fi
temp/bin/sendbuildlog -b $status -s "$BUILDSUBJECT r$rev" $attachments "$BUILDNOTIFY" build.log
fi
-63
Ver Arquivo
@@ -1,63 +0,0 @@
#
# "$Id$"
#
# CGI makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-1999 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
include ../Makedefs
#TARGETS = classes.cgi jobs.cgi printers.cgi
TARGETS = printers.cgi
OBJS = classes.o jobs.o printers.o
#
# Make all targets...
#
all: $(TARGETS)
#
# Clean all object files...
#
clean:
rm -f $(OBJS) $(TARGETS)
#
# Install all targets...
#
install:
-$(MKDIR) $(SERVERROOT)/cgi-bin
$(CP) $(TARGETS) $(SERVERROOT)/cgi-bin
#
# printers.cgi
#
printers.cgi: printers.o ../Makedefs ../cups/libcups.a
$(CC) $(LDFLAGS) -o $@ printers.o $(LIBS)
$(OBJS): ../Makedefs ../cups/cups.h ../cups/ipp.h ../cups/language.h
#
# End of "$Id$".
#
-461
Ver Arquivo
@@ -1,461 +0,0 @@
/*
* "$Id$"
*
* Printer status CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Main entry for CGI.
* show_printer_list() - Show a list of printers...
* show_printer_info() - Show printer information.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/debug.h>
/*
* Local functions...
*/
static void show_printer_list(http_t *http, cups_lang_t *language);
static void show_printer_info(http_t *http, cups_lang_t *language,
char *name);
/*
* 'main()' - Main entry for CGI.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
cups_lang_t *language; /* Language information */
char *printer; /* Printer name */
http_t *http; /* Connection to the server */
setbuf(stdout, NULL);
/*
* Get the request language...
*/
language = cupsLangDefault();
/*
* Connect to the HTTP server...
*/
http = httpConnect("localhost", ippPort());
/*
* Tell the client to expect HTML...
*/
printf("Content-Type: text/html;charset=%s\n\n", cupsLangEncoding(language));
/*
* See if we need to show a list of printers or the status of a
* single printer...
*/
printer = argv[0];
if (strcmp(printer, "/") == 0 || strcmp(printer, "printers.cgi") == 0)
printer = NULL;
/*
* Print the standard header...
*/
puts("<HTML>");
puts("<HEAD>");
if (printer)
puts("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"10\">");
else
puts("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"30\">");
printf("<TITLE>%s on %s - Common UNIX Printing System</TITLE>\n",
printer == NULL ? "Printers" : printer, getenv("SERVER_NAME"));
puts("<LINK REL=STYLESHEET TYPE=\"text/css\" HREF=\"/cups.css\">");
puts("<MAP NAME=\"navbar\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,100,35\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"115,10,205,35\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"220,10,280,35\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"295,10,470,35\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"485,10,590,35\" HREF=\"http://www.cups.org\" ALT=\"Download the Current CUPS Software\">");
puts("</MAP>");
puts("</HEAD>");
puts("<BODY>");
puts("<P ALIGN=CENTER>");
puts("<A HREF=\"http://www.easysw.com\" ALT=\"Easy Software Products Home Page\">");
puts("<IMG SRC=\"/images/logo.gif\" WIDTH=\"71\" HEIGHT=\"40\" BORDER=0 ALT=\"Easy Software Products Home Page\"></A>");
puts("<IMG SRC=\"/images/navbar.gif\" WIDTH=\"540\" HEIGHT=\"40\" USEMAP=\"#navbar\" BORDER=0>");
printf("<H1>%s on %s</H1>\n", printer == NULL ? "Printers" : printer,
getenv("SERVER_NAME"));
fflush(stdout);
puts("<CENTER>");
puts("<TABLE WIDTH=\"90%\" BORDER=\"1\">");
puts("<TR>");
puts("<TH>Name</TH>");
puts("<TH WIDTH=\"50%\">Status</TH>");
puts("<TH WIDTH=\"25%\">Jobs</TH>");
puts("</TR>");
/*
* Show the information...
*/
if (printer == NULL)
show_printer_list(http, language);
else
show_printer_info(http, language, printer);
/*
* Write a standard trailer...
*/
puts("</TABLE>");
puts("</CENTER>");
puts("<HR>");
puts("<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the");
puts("trademark property of <A HREF=\"http://www.easysw.com\">Easy Software");
puts("Products</A>. CUPS is copyright 1997-1999 by Easy Software Products,");
puts("All Rights Reserved.");
puts("</BODY>");
puts("</HTML>");
/*
* Close the HTTP server connection...
*/
httpClose(http);
cupsLangFree(language);
/*
* Return with no errors...
*/
return (0);
}
/*
* 'show_printer_list()' - Show a list of printers...
*/
static void
show_printer_list(http_t *http, /* I - HTTP connection */
cups_lang_t *language)/* I - Client's language */
{
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* IPP attribute */
/*
* Build a CUPS_GET_PRINTERS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_PRINTERS;
request->request.op.request_id = 1;
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, "/printers/")) != NULL)
{
/*
* Loop through the printers returned in the list and display
* their devices...
*/
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
attr = attr->next;
if (attr == NULL)
break;
/*
* Show the printer status for each printer...
*/
while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
{
if (strcmp(attr->name, "printer-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
show_printer_info(http, language, attr->values[0].string.text);
attr = attr->next;
}
if (attr == NULL)
break;
}
ippDelete(response);
}
}
/*
* 'show_printer_info()' - Show printer information.
*/
static void
show_printer_info(http_t *http,
cups_lang_t *language,
char *name)
{
ipp_t *request, /* IPP request */
*response, /* IPP response */
*jobs; /* IPP Get Jobs response */
int jobcount; /* Number of jobs */
ipp_attribute_t *attr; /* IPP attribute */
char *message; /* Printer state message */
int accepting; /* Accepting requests? */
ipp_pstate_t pstate; /* Printer state */
char uri[1024]; /* Printer URI */
/*
* Build a IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
request->request.op.request_id = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
sprintf(uri, "ipp://localhost/printers/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, uri + 15)) != NULL)
{
/*
* Grab the needed printer attributes...
*/
if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL)
pstate = (ipp_pstate_t)attr->values[0].integer;
else
pstate = IPP_PRINTER_IDLE;
if ((attr = ippFindAttribute(response, "printer-state-message", IPP_TAG_TEXT)) != NULL)
message = attr->values[0].string.text;
else
message = NULL;
if ((attr = ippFindAttribute(response, "printer-is-accepting-jobs",
IPP_TAG_BOOLEAN)) != NULL)
accepting = attr->values[0].boolean;
else
accepting = 1;
/*
* Display the printer entry...
*/
puts("<TR>");
printf("<TD VALIGN=TOP><A HREF=\"/printers/%s\">%s</A></TD>\n", name, name);
printf("<TD VALIGN=TOP><IMG SRC=\"/images/printer-%s.gif\" ALIGN=\"LEFT\">\n",
pstate == IPP_PRINTER_IDLE ? "idle" :
pstate == IPP_PRINTER_PROCESSING ? "processing" : "stopped");
printf("%s: %s, %s<BR>\n",
cupsLangString(language, CUPS_MSG_PRINTER_STATE),
cupsLangString(language, pstate == IPP_PRINTER_IDLE ? CUPS_MSG_IDLE :
pstate == IPP_PRINTER_PROCESSING ?
CUPS_MSG_PROCESSING : CUPS_MSG_STOPPED),
cupsLangString(language, accepting ? CUPS_MSG_ACCEPTING_JOBS :
CUPS_MSG_NOT_ACCEPTING_JOBS));
if (message)
printf("<BR CLEAR=ALL><I>\"%s\"</I>\n", message);
else if (!accepting || pstate == IPP_PRINTER_STOPPED)
puts("<BR CLEAR=ALL><I>\"Reason Unknown\"</I>");
puts("</TD>");
/*
* Show a list of jobs as needed...
*/
if (pstate != IPP_PRINTER_IDLE)
{
/*
* Build an IPP_GET_JOBS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_JOBS;
request->request.op.request_id = 1;
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL,
cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language->language);
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
jobs = cupsDoRequest(http, request, uri + 15);
}
else
jobs = NULL;
puts("<TD VALIGN=\"TOP\">");
jobcount = 0;
if (jobs != NULL)
{
char *username; /* Pointer to job-originating-user-name */
int jobid, /* job-id */
size; /* job-k-octets */
for (attr = jobs->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
attr = attr->next;
if (attr == NULL)
break;
/*
* Pull the needed attributes from this job...
*/
jobid = 0;
size = 0;
username = NULL;
while (attr != NULL && attr->group_tag == IPP_TAG_JOB)
{
if (strcmp(attr->name, "job-id") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
jobid = attr->values[0].integer;
if (strcmp(attr->name, "job-k-octets") == 0 &&
attr->value_tag == IPP_TAG_INTEGER)
size = attr->values[0].integer;
if (strcmp(attr->name, "job-originating-user-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
username = attr->values[0].string.text;
attr = attr->next;
}
/*
* Display the job if it matches the current printer...
*/
if (username != NULL)
{
jobcount ++;
printf("<A HREF=\"/jobs/%d\">%s-%d %s %dk</A><BR>\n", jobid, name,
jobid, username, size);
}
if (attr == NULL)
break;
}
ippDelete(jobs);
}
if (jobcount == 0)
puts("None");
puts("</TD>");
puts("</TR>");
ippDelete(response);
}
}
/*
* End of "$Id$".
*/
-61
Ver Arquivo
@@ -1,61 +0,0 @@
#
# "$Id$"
#
# Configuration file makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1993-1999 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
include ../Makedefs
#
# Config files...
#
FILES = classes.conf cupsd.conf mime.convs mime.types printers.conf
#
# Make everything...
#
all:
#
# Clean all config and object files...
#
clean:
#
# Install files...
#
install:
-$(MKDIR) $(SERVERROOT)/conf
for file in $(FILES); do \
if test -e $(SERVERROOT)/conf/$$file ; then \
$(CP) $$file $(SERVERROOT)/conf/$$file.N ; \
else \
$(CP) $$file $(SERVERROOT)/conf ; \
fi ; \
done
#
# End of "$Id$".
#
-72
Ver Arquivo
@@ -1,72 +0,0 @@
#
# "$Id: classes.conf 333 1999-05-17 18:03:40Z mike $"
#
# Sample class configuration file for the Common UNIX Printing System
# (CUPS) scheduler.
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
########################################################################
# #
# This is a sample class configuration file. This file is included #
# from the main configuration file (cups.conf) and lists all of the #
# printer classes known to the system. #
# #
########################################################################
#
# Each class starts with a <Class name> definition. Class names
# can be up to 128 characters in length and are *not* case sensitive.
#
# One <DefaultClass name> entry can appear in this file; if you don't
# define a default destination, the first printer or class becomes
# the default.
#
#<Class sample>
#
# Info: the description for the class.
#
#Info Acme LaserPrint 1000 Printers
#
# MoreInfo: a URL for more information on the printer.
#
#MoreInfo http://www.acme.com/lp1000.html
#
# Location: the location of the printer.
#
#Location Room 101 in the activities building
#
# Printer: adds a printer to the class.
#
#Printer sample
#Printer sample@host2
#</Class>
#
# End of "$Id: classes.conf 333 1999-05-17 18:03:40Z mike $".
#
-332
Ver Arquivo
@@ -1,332 +0,0 @@
#
# "$Id: cupsd.conf 349 1999-05-21 20:53:02Z mike $"
#
# Sample configuration file for the Common UNIX Printing System (CUPS)
# scheduler.
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
########################################################################
# #
# This is the CUPS configuration file. If you are familiar with #
# Apache or any of the other popular web servers, we've followed the #
# same format. Any configuration variable used here has the same #
# semantics as the corresponding variable in Apache. If we need #
# different functionality then a different name is used to avoid #
# confusion... #
# #
########################################################################
#
# Ports/addresses that we listen to. The default port 631 is reserved
# for the Internet Printing Protocol (IPP) and is what we use here.
#
# You can have multiple Port/Listen lines to listen to more than one
# port or address, or to restrict access:
#
# Port 80
# Port 631
# Listen hostname
# Listen hostname:80
# Listen hostname:631
# Listen 1.2.3.4
# Listen 1.2.3.4:631
#
#Port 80
Port 631
#
# User/Group: the user and group the server runs under. Normally this
# must be lp and sys, however you can configure things for another user
# or group as needed.
#
# Note: the server must be run initially as root to support the
# default IPP port of 631. It changes users whenever an external
# program is run...
#
User lp
Group sys
#
# SystemGroup: the group name for "System" (printer administration)
# access.
#
SystemGroup sys
#
# ServerName: the hostname of your server, as advertised to the world.
# By default CUPS will use the hostname of the system.
#
#ServerName myhost.domain.com
#
# ServerAdmin: the email address to send all complaints/problems to.
# By default CUPS will use "root@hostname".
#
#ServerAdmin root@your.domain.com
#
# ServerRoot: the root directory for the scheduler.
# By default the compiled-in value.
#
#ServerRoot /var/cups
#
# AccessLog: the access log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/access_log"
#
#AccessLog logs/access_log
#
# ErrorLog: the error log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/error_log"
#
#ErrorLog logs/error_log
#
# PageLog: the page log file; if this does not start with a leading /
# then it is assumed to be relative to ServerRoot. By default set to
# "logs/page_log"
#
#PageLog logs/page_log
#
# LogLevel: controls the number of messages logged to the ErrorLog
# file and can be one of the following:
#
# debug Log everything.
# info Log all requests and state changes.
# warn Log errors and warnings.
# error Log only errors.
# none Log nothing.
#
LogLevel info
#
# MaxLogSize: controls the maximum size of each log file before they are
# rotated. Defaults to 1048576 (1MB). Set to 0 to disable log rotating.
#
#MaxLogSize 0
#
# MaxRequestSize: controls the maximum size of print files. Set to 0 to
# disable this feature (defaults to 0.)
#
#MaxRequestSize 0
#
# HostNameLookups: whether or not to do lookups on IP addresses to get a
# fully-qualified hostname. This defaults to Off for performance reasons...
#
#HostNameLookups On
#
# Timeout: the timeout before requests time out. Default is 300 seconds.
#
#Timeout 300
#
# KeepAlive: whether or not to support the Keep-Alive connection
# option. Default is on.
#
#KeepAlive On
#
# KeepAliveTimeout: the timeout before Keep-Alive connections are
# automatically closed. Default is 60 seconds.
#
#KeepAliveTimeout 60
#
# ImplicitClasses: whether or not to use implicit classes.
#
# Printer classes can be specified explicitly in the classes.conf
# file, implicitly based upon the printers available on the LAN, or
# both.
#
# When ImplicitClasses is On, printers on the LAN with the same name
# (e.g. Acme-LaserPrint-1000) will be put into a class with the same
# name. This allows you to setup multiple redundant queues on a LAN
# without a lot of administrative difficulties. If a user sends a
# job to Acme-LaserPrint-1000, the job will go to the first available
# queue.
#
# Enabled by default.
#
#ImplicitClasses On
#
# Browsing: whether or not to broadcast printer information to
# other CUPS servers. Enabled by default.
#
#Browsing On
#
# BrowseInterval: the time between browsing updates in seconds. Default
# is 30 seconds.
#
# Note that browsing information is sent whenever a printer's state changes
# as well, so this represents the maximum time between updates.
#
#BrowseInterval 30
#
# BrowseTimeout: the timeout for network printers - if we don't
# get an update within this time the printer will be removed
# from the printer list. This number definitely should not be
# less the BrowseInterval value for obvious reasons. Defaults
# to 300 seconds.
#
#BrowseTimeout 300
#
# BrowsePort: the port used for UDP broadcasts. By default this is
# the IPP port; if you change this you need to do it on all servers.
# Only one BrowsePort is recognized.
#
#BrowsePort 631
#
# BrowseAddress: specifies a broadcast address to be used. By
# default browsing information is broadcast to all active interfaces.
#
# Note: HP-UX 10.20 and earlier do not properly handle broadcast unless
# you have a Class A, B, C, or D netmask (i.e. no CIDR support).
#
#BrowseAddress x.y.z.255
#BrowseAddress x.y.255.255
#BrowseAddress x.255.255.255
#
# DocumentRoot: the root directory for HTTP documents that are served.
# By default the compiled in directory.
#
#DocumentRoot /usr/share/cups/doc
#
# DefaultLanguage: the default language if not specified by the browser.
# If not specified, the current locale is used.
#
#DefaultLanguage en
#
# DefaultCharset: the default character set to use. If not specified,
# defaults to iso-8859-1. Note that this can also be overridden in
# HTML documents...
#
#DefaultCharset iso-8859-1
#
# RIPCache: the amount of memory that each RIP should use to cache
# bitmaps. The value can be any real number followed by "k" for
# kilobytes, "m" for megabytes, "g" for gigabytes, or "t" for tiles
# (1 tile = 256x256 pixels.) Defaults to "32m" (32 megabytes).
#
#RIPCache: 32m
#
# Access permissions for each directory served by the scheduler.
# Locations are relative to DocumentRoot...
#
# AuthType: the authorization to use; currently only "Basic" authorization is
# supported.
#
# AuthClass: the authorization class; currently only "Anonymous", "User",
# "System" (valid user belonging to group SystemGroup), and "Group"
# (valid user belonging to the specified group) are supported.
#
# AuthGroupName: the group name for "Group" authorization.
#
# Order: the order of Allow/Deny processing.
#
# Allow: allows access from the specified hostname, domain, IP address, or
# network.
#
# Deny: denies access from the specified hostname, domain, IP address, or
# network.
#
<Location />
</Location>
<Location /printers>
#
# You may wish to limit access to printers and classes, either with Allow
# and Deny lines, or by requiring a username and password.
#
## Require a username and password
#AuthType Basic
#AuthClass User
## Restrict access to local domain
#Order Deny,Allow
#Deny From All
#Allow From .mydomain.com
</Location>
<Location /admin>
#
# You definitely will want to limit access to the administration tools.
# The default configuration requires a local connection from a user who
# is a member of group "sys" to do any admin tasks. You can change the
# group name using the SystemGroup directive.
#
AuthType Basic
AuthClass System
## Restrict access to local domain
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
#
# End of "$Id: cupsd.conf 349 1999-05-21 20:53:02Z mike $".
#
-62
Ver Arquivo
@@ -1,62 +0,0 @@
#
# "$Id: mime.convs 237 1999-04-21 19:29:35Z mike $"
#
# MIME converts file for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-1999 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
########################################################################
#
# Format of Lines:
#
# source/type destination/type cost filter
#
# General Notes:
#
# Currently the "cost" field is not used (all filters are assumed to
# be equally costly in terms of speed/memory). Also, a filter program
# *must* accept the standard command-line arguments (job-id, user, title,
# copies,options,[filename or stdin]) or this won't work.
#
########################################################################
#
# PostScript filters
#
application/msword application/postscript 50 mswordtops
application/pdf application/postscript 50 pdftops
application/postscript application/vnd.cups-postscript 50 pstops
application/vnd.hp-HPGL application/postscript 50 hpgltops
image/* application/vnd.cups-postscript 50 imagetops
text/html application/postscript 50 htmltops
text/plain application/postscript 50 texttops
########################################################################
#
# Raster filters...
#
image/* application/vnd.cups-raster 50 imagetoraster
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
#
# End of "$Id: mime.convs 237 1999-04-21 19:29:35Z mike $".
#
-123
Ver Arquivo
@@ -1,123 +0,0 @@
#
# "$Id: mime.types 185 1999-03-24 18:38:50Z mike $"
#
# MIME types file for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-1999 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
########################################################################
#
# Format of Lines:
#
# super/type rules
#
# "rules" can be any combination of:
#
# ( expr ) Parenthesis for expression grouping
# + Logical AND
# , or whitespace Logical OR
# ! Logical NOT
# match("pattern") Pattern match on filename
# extension Pattern match on "*.extension"
# ascii(offset,length) True if bytes are valid printable ASCII
# (CR, NL, TAB, BS, 32-126)
# printable(offset,length) True if bytes are printable 8-bit chars
# (CR, NL, TAB, BS, 32-126, 160-254)
# string(offset,"string") True if bytes are identical to string
# char(offset,value) True if byte is identical
# short(offset,value) True if 16-bit integer is identical
# int(offset,value) True if 32-bit integer is identical
# locale("string") True if current locale matches string
#
# General Notes:
#
# MIME type names are case-insensitive. Internally they are converted
# to lowercase. Multiple occurrences of a type will cause the provided
# rules to be appended to the existing definition. Type names are sorted
# in ascending order, so if two types use the same rules to resolve a type
# (e.g. doc extension for two types), the returned type will be the first
# type in the sorted list.
#
# The "printable" rule differs from the "ascii" rule in that it also
# accepts 8-bit characters in the range 160-254.
#
# String constants must be surrounded by "" if they contain whitespace.
# To instead binary data into a string, use the <hex> notation.
#
########################################################################
#
# Application-generated files...
#
application/msword doc string(0,<D0CF11E0A1B11AE1>)
application/pdf pdf string(0,%PDF)
application/postscript ai eps ps string(0,%!) string(0,<04>%!)
application/vnd.hp-HPGL hpgl string(0,<1b>%) string(0,<1b>&)\
string(0,<1b>E) string(0,<201b>)\
string(0,BP;) string(0,IN;) string(0,DF;)
########################################################################
#
# Image files...
#
image/gif gif string(0,GIF87a) string(0,GIF89a)
image/png png string(0,<89>PNG)
image/jpeg jpeg jpg jpe string(6,JFIF)
image/tiff tiff tif string(0,MM) string(0,II)
image/x-photocd pcd string(2048,PCD_IPI)
image/x-portable-anymap pnm
image/x-portable-bitmap pbm string(0,P1) string(0,P4)
image/x-portable-graymap pgm string(0,P2) string(0,P5)
image/x-portable-pixmap ppm string(0,P3) string(0,P6)
image/x-sgi-rgb rgb sgi bw icon short(0,474)
image/x-xbitmap xbm
image/x-xpixmap xpm ascii(0,1024) + string(3,"XPM")
image/x-xwindowdump xwd
# TODO: Add Sun Raster, Alias, SoftImage, GIMP??? files
image/x-sun-raster ras
#image/x-alias pix
#image/x-softimage
#image/x-gimp-xcf xcf xcf.gz
########################################################################
#
# Text files...
#
text/html html htm printable(0,1024) +\
(string(0,"<HTML>") string(0,"<!DOCTYPE"))
text/plain txt printable(0,1024)
########################################################################
#
# CUPS-specific types...
#
application/vnd.cups-postscript
application/vnd.cups-raster string(0,"RaSt") string(0,"tSaR")
application/vnd.cups-raw
#
# End of "$Id: mime.types 185 1999-03-24 18:38:50Z mike $".
#
-89
Ver Arquivo
@@ -1,89 +0,0 @@
#
# "$Id: printers.conf 334 1999-05-17 18:11:26Z mike $"
#
# Sample printer configuration file for the Common UNIX Printing System
# (CUPS) scheduler.
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
########################################################################
# #
# This is a sample printer configuration file. This file is included #
# from the main configuration file (cups.conf) and lists all of the #
# printers known to the system. #
# #
########################################################################
#
# Each printer starts with a <Printer name> definition. Printer names
# can be up to 128 characters in length and are *not* case sensitive.
#
# One <DefaultPrinter name> entry can appear in this file; if you don't
# define a default destination, the first printer or class becomes the
# default.
#
#<Printer sample>
#
# Info: the description for the printer.
#
#Info Acme LaserPrint 1000
#
# MoreInfo: a URL for more information on the printer.
#
#MoreInfo http://www.acme.com/lp1000.html
#
# Location: the location of the printer.
#
#Location Room 101 in the activities building
#
# DeviceURI: the device URI for this printer.
#
#DeviceURI parallel:/dev/plp
#DeviceURI serial:/dev/ttyd1?baud=38400+size=8+parity=none+flow=soft
#DeviceURI scsi:/dev/scsi/sc1d6l0
#DeviceURI socket://hostname:port
#DeviceURI tftp://hostname/path
#DeviceURI ftp://hostname/path
#DeviceURI http://hostname[:port]/path
#DeviceURI ipp://hostname/path
#DeviceURI smb://hostname/printer
#
# State: sets the initial state of the printer. Can be one of the
# following:
#
# Idle - Printer is available to accept new jobs.
# Stopped - Printer is disabled but accepting new jobs.
#
#State Idle
#</Printer>
#
# End of "$Id: printers.conf 334 1999-05-17 18:11:26Z mike $".
#
+35
Ver Arquivo
@@ -0,0 +1,35 @@
#
# "$Id: compiler.m4 142 2006-08-17 14:50:46Z mike $"
#
# Common compiler stuff for autoconf...
#
CFLAGS="${CFLAGS:=}"
LDFLAGS="${LDFLAGS:=}"
LIBS="${LIBS:=}"
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging, default=no],
[if test x$enable_debug = xyes; then
CFLAGS="-g $CFLAGS"
LDFLAGS="-g $LDFLAGS"
fi])
AC_PROG_CC
AC_PATH_PROG(RM,rm)
dnl Support large files.
AC_SYS_LARGEFILE
dnl Add -Wall for GCC...
if test -n "$GCC"; then
dnl Extended warnings...
CFLAGS="-Wshadow -Winline $CFLAGS"
dnl Standard warnings...
CFLAGS="-Wall -Wunused -Wno-char-subscripts -Wno-format-y2k $CFLAGS"
fi
#
# End of "$Id: compiler.m4 142 2006-08-17 14:50:46Z mike $".
#
+26
Ver Arquivo
@@ -0,0 +1,26 @@
#
# "$Id$"
#
# Common C++ compiler stuff for autoconf...
#
CXXFLAGS="${CXXFLAGS:=}"
if test x$enable_debug = xyes; then
CXXFLAGS="-g $CXXFLAGS"
fi
AC_PROG_CXX
dnl Add -Wall for GCC...
if test -n "$GCC"; then
dnl Extended warnings...
CXXFLAGS="-Wshadow -Wconversion -Winline $CXXFLAGS"
dnl Standard warnings...
CXXFLAGS="-Wall -Wunused -Wno-char-subscripts -Wno-format-y2k $CXXFLAGS"
fi
#
# End of "$Id$".
#
+119
Ver Arquivo
@@ -0,0 +1,119 @@
#
# "$Id: library.m4 44 2006-05-08 19:33:22Z mike $"
#
# Common directory stuff for autoconf...
#
dnl Get the operating system, version number, and architecture...
uname=`uname`
uversion=`uname -r | sed -e '1,$s/^[[^0-9]]*\([[0-9]]*\)\.\([[0-9]]*\).*/\1\2/'`
uarch=`uname -m`
case "$uname" in
GNU* | GNU/*)
uname="GNU"
;;
IRIX*)
uname="IRIX"
;;
Linux*)
uname="Linux"
;;
esac
dnl Fix "prefix" variable if it hasn't been specified...
if test "$prefix" = "NONE"; then
prefix="/"
fi
dnl Fix "exec_prefix" variable if it hasn't been specified...
if test "$exec_prefix" = "NONE"; then
if test "$prefix" = "/"; then
exec_prefix="/usr"
else
exec_prefix="$prefix"
fi
fi
dnl Fix "bindir" variable...
if test "$bindir" = "\${exec_prefix}/bin"; then
bindir="$exec_prefix/bin"
fi
dnl Fix "sbindir" variable...
if test "$sbindir" = "\${exec_prefix}/sbin"; then
sbindir="$exec_prefix/sbin"
fi
dnl Fix "sharedstatedir" variable if it hasn't been specified...
if test "$sharedstatedir" = "\${prefix}/com" -a "$prefix" = "/"; then
sharedstatedir="/usr/com"
fi
dnl Fix "datarootdir" variable if it hasn't been specified...
if test "$datarootdir" = "\${prefix}/share"; then
if test "$prefix" = "/"; then
datarootdir="/usr/share"
else
datarootdir="$prefix/share"
fi
fi
dnl Fix "datadir" variable if it hasn't been specified...
if test "$datadir" = "\${prefix}/share"; then
if test "$prefix" = "/"; then
datadir="/usr/share"
else
datadir="$prefix/share"
fi
elif test "$datadir" = "\${datarootdir}"; then
datadir="$datarootdir"
fi
dnl Fix "includedir" variable if it hasn't been specified...
if test "$includedir" = "\${prefix}/include" -a "$prefix" = "/"; then
includedir="/usr/include"
fi
dnl Fix "localstatedir" variable if it hasn't been specified...
if test "$localstatedir" = "\${prefix}/var"; then
if test "$prefix" = "/"; then
if test "$uname" = Darwin; then
localstatedir="/private/var"
else
localstatedir="/var"
fi
else
localstatedir="$prefix/var"
fi
fi
dnl Fix "sysconfdir" variable if it hasn't been specified...
if test "$sysconfdir" = "\${prefix}/etc"; then
if test "$prefix" = "/"; then
if test "$uname" = Darwin; then
sysconfdir="/private/etc"
else
sysconfdir="/etc"
fi
else
sysconfdir="$prefix/etc"
fi
fi
dnl Fix "libdir" variable for IRIX 6.x...
if test "$libdir" = "\${exec_prefix}/lib"; then
if test "$uname" = "IRIX"; then
libdir="$exec_prefix/lib32"
else
if test "$uname" = Linux -a -d /usr/lib64; then
libdir="$exec_prefix/lib64"
else
libdir="$exec_prefix/lib"
fi
fi
fi
#
# End of "$Id: library.m4 44 2006-05-08 19:33:22Z mike $".
#
+42
Ver Arquivo
@@ -0,0 +1,42 @@
#
# "$Id: library.m4 44 2006-05-08 19:33:22Z mike $"
#
# Common library stuff for autoconf...
#
dnl Library commands and flags...
AC_PROG_RANLIB
AC_PATH_PROG(AR,ar)
case "$uname" in
Darwin* | *BSD*)
ARFLAGS="-rcv"
;;
*)
ARFLAGS="crvs"
;;
esac
AC_SUBST(ARFLAGS)
dnl PIC support...
if test -n "$GCC"; then
CFLAGS="-fPIC $CFLAGS"
else
case `uname` in
HP-UX*)
# HP-UX
CFLAGS="+z $CFLAGS"
;;
SunOS*)
# Solaris
CFLAGS="-KPIC $CFLAGS"
;;
esac
fi
#
# End of "$Id: library.m4 44 2006-05-08 19:33:22Z mike $".
#
-101
Ver Arquivo
@@ -1,101 +0,0 @@
/*
* "$Id$"
*
* Configuration file for the Common UNIX Printing System (CUPS).
*
* @configure_input@
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
/*
* Version of software...
*/
#define CUPS_SVERSION "CUPS v1.0"
/*
* Where are files stored?
*/
#define CUPS_LOCALEDIR "/usr/lib/locale"
#define CUPS_SERVERROOT "/var/cups"
#define CUPS_DATADIR "/usr/share/cups"
/*
* Do we have various image libraries?
*/
#undef HAVE_LIBPNG
#undef HAVE_LIBZ
#undef HAVE_LIBJPEG
#undef HAVE_LIBTIFF
/*
* Does this machine store words in big-endian (MSB-first) order?
*/
#undef WORDS_BIGENDIAN
/*
* Which directory functions and headers do we use?
*/
#undef HAVE_DIRENT_H
#undef HAVE_SYS_DIR_H
#undef HAVE_SYS_NDIR_H
#undef HAVE_NDIR_H
/*
* Do we have <shadow.h>?
*/
#undef HAVE_SHADOW_H
/*
* Do we have <crypt.h>?
*/
#undef HAVE_CRYPT_H
/*
* Do we have the strXXX() functions?
*/
#undef HAVE_STRDUP
#undef HAVE_STRCASECMP
#undef HAVE_STRNCASECMP
/*
* What signal functions to use?
*/
#undef HAVE_SIGSET
#undef HAVE_SIGACTION
/*
* What wait functions to use?
*/
#undef HAVE_WAITPID
#undef HAVE_WAIT3
/*
* End of "$Id$".
*/
-152
Ver Arquivo
@@ -1,152 +0,0 @@
dnl
dnl "$Id$"
dnl
dnl Configuration script for the Common UNIX Printing System (CUPS).
dnl
dnl Copyright 1997-1999 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
dnl property of Easy Software Products and are protected by Federal
dnl copyright law. Distribution and use rights are outlined in the file
dnl "LICENSE.txt" which should have been included with this file. If this
dnl file is missing or damaged please contact Easy Software Products
dnl at:
dnl
dnl Attn: CUPS Licensing Information
dnl Easy Software Products
dnl 44145 Airport View Drive, Suite 204
dnl Hollywood, Maryland 20636-3111 USA
dnl
dnl Voice: (301) 373-9603
dnl EMail: cups-info@cups.org
dnl WWW: http://www.cups.org
dnl
AC_INIT(cups/cups.h)
AC_CONFIG_HEADER(config.h)
AC_PREFIX_DEFAULT(/usr)
dnl Clear default debugging options and set normal optimization by
dnl default unless the user asks for debugging specifically.
dnl CFLAGS="${CFLAGS:=}"
dnl CXXFLAGS="${CXXFLAGS:=}"
dnl OPTIM="-O"
dnl AC_SUBST(OPTIM)
dnl AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],
dnl if eval "test x$enable_debug = xyes"; then
dnl OPTIM="-g"
dnl fi)
dnl Clear default debugging options and set debugging by
dnl default unless the user asks for no debugging specifically.
CFLAGS="${CFLAGS:=}"
CXXFLAGS="${CXXFLAGS:=}"
OPTIM="-g"
AC_SUBST(OPTIM)
AC_ARG_ENABLE(debug, [ --disable-debug turn off debugging [default=no]],
if eval "test x$disable_debug = xyes"; then
OPTIM="-O"
fi)
dnl Checks for programs...
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
AC_PROG_RANLIB
AC_PATH_PROG(AR,ar)
AC_PATH_PROG(CP,cp)
AC_PATH_PROG(MKDIR,mkdir)
AC_PATH_PROG(RM,rm)
AC_PATH_PROG(GROFF,groff)
AC_PATH_PROG(HTMLDOC,htmldoc)
dnl Architecture checks...
AC_C_BIGENDIAN
uname=`uname`
if test "$uname" = "IRIX64"; then
uname=IRIX
fi
dnl Check for libraries...
AC_CHECK_LIB(c,crypt,LIBS="$LIBS",AC_CHECK_LIB(crypt,crypt))
AC_CHECK_HEADER(crypt.h, AC_DEFINE(HAVE_CRYPT_H))
AC_CHECK_LIB(sec,getspent)
AC_CHECK_LIB(socket,socket,
if test "$uname" != "IRIX"; then
LIBS="$LIBS -lsocket"
else
echo "Not using -lsocket since you are running IRIX."
fi)
AC_CHECK_LIB(nsl,gethostbyaddr,
if test "$uname" != "IRIX"; then
LIBS="$LIBS -lnsl"
else
echo "Not using -lnsl since you are running IRIX."
fi)
IMGLIBS=""
AC_SUBST(IMGLIBS)
AC_CHECK_HEADER(jpeglib.h,
AC_DEFINE(HAVE_LIBJPEG)
IMGLIBS="$IMGLIBS -ljpeg")
AC_CHECK_HEADER(zlib.h,
AC_DEFINE(HAVE_LIBZ)
IMGLIBS="$IMGLIBS -lz")
AC_CHECK_HEADER(png.h,
AC_DEFINE(HAVE_LIBPNG)
IMGLIBS="$IMGLIBS -lpng")
AC_CHECK_HEADER(tiff.h,
AC_DEFINE(HAVE_LIBTIFF)
IMGLIBS="$IMGLIBS -ltiff")
dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_DIRENT
AC_CHECK_HEADER(shadow.h,AC_DEFINE(HAVE_SHADOW_H))
dnl Checks for string functions.
AC_CHECK_FUNCS(strdup)
AC_CHECK_FUNCS(strcasecmp)
AC_CHECK_FUNCS(strncasecmp)
dnl Checks for signal functions.
AC_CHECK_FUNCS(sigset)
AC_CHECK_FUNCS(sigaction)
dnl Checks for wait functions.
AC_CHECK_FUNCS(waitpid)
AC_CHECK_FUNCS(wait3)
dnl Fix "prefix" variable if it hasn't been specified...
if test "$prefix" = "NONE"; then
prefix="/usr"
fi
dnl CUPS_SERVERROOT needs special attention for the default location...
if test "$prefix" = "/usr"; then
CUPS_SERVERROOT="/var/cups"
else
CUPS_SERVERROOT="$prefix/var/cups"
fi
AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$CUPS_SERVERROOT")
AC_SUBST(CUPS_SERVERROOT)
dnl Set the CUPS_LOCALE directory...
CUPS_LOCALEDIR="$prefix/lib/locale"
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$CUPS_LOCALEDIR")
AC_SUBST(CUPS_LOCALEDIR)
dnl Set the CUPS_DATAFILE directory...
CUPS_DATADIR="$prefix/share/cups"
AC_DEFINE_UNQUOTED(CUPS_DATADIR, "$CUPS_DATADIR")
AC_SUBST(CUPS_DATADIR)
AC_OUTPUT(Makedefs)
dnl
dnl End of "$Id$".
dnl
-113
Ver Arquivo
@@ -1,113 +0,0 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "cups"=.\cups\cups.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "hpgltops"=.\filter\hpgltops.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Project: "image"=.\filter\image.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "pstops"=.\filter\pstops.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "testmime"=.\cups\testmime.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Project: "testppd"=.\cups\testppd.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Project: "texttops"=.\filter\texttops.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################
-130
Ver Arquivo
@@ -1,130 +0,0 @@
#
# "$Id$"
#
# Support library Makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44145 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
include ../Makedefs
#
# Object files...
#
OBJS = emit.o filter.o http.o ipp.o language.o mark.o mime.o \
options.o page.o ppd.o raster.o string.o type.o util.o
#
# Header files to install...
#
HEADERS = cups.h http.h ipp.h language.h mime.h ppd.h raster.h
#
# Targets in this directory...
#
TARGETS = libcups.a testmime testppd testhttp
#
# Make all targets...
#
all: $(TARGETS)
#
# Remove object and target files...
#
clean:
rm -f $(OBJS) $(TARGETS)
#
# Install object and target files...
#
install: all
-$(MKDIR) $(LIBDIR)
$(CP) libcups.a $(LIBDIR)
-$(MKDIR) $(INCLUDEDIR)/cups
$(CP) $(HEADERS) $(INCLUDEDIR)/cups
#
# libcups.a
#
libcups.a: $(OBJS)
$(RM) $@
$(AR) $(ARFLAGS) $@ $(OBJS)
$(RANLIB) $@
#
# cups_C.h - the default POSIX locale that is compiled in.
#
cups_C.h: ../locale/C/cups_C
$(RM) cups_C.h
$(AWK) '{print "\"" $$0 "\","}' < ../locale/C/cups_C > cups_C.h
emit.o: ppd.h ../config.h ../Makedefs
filter.o: mime.h ../config.h ../Makedefs
http.o: http.h ipp.h string.h ../config.h ../Makedefs
ipp.o: http.h ipp.h ../config.h ../Makedefs
language.o: cups_C.h language.h string.h ../config.h ../Makedefs
mark.o: ppd.h ../config.h ../Makedefs
mime.o: mime.h ../config.h ../Makedefs
options.o: cups.h ../config.h ../Makedefs
page.o: ppd.h ../config.h ../Makedefs
ppd.o: ppd.h ../config.h ../Makedefs
raster.o: raster.h ../config.h ../Makedefs
string.o: string.h ../config.h ../Makedefs
type.o: mime.h ../config.h ../Makedefs
util.o: cups.h http.h ipp.h ../config.h ../Makedefs
#
# testhttp
#
testhttp: testhttp.o libcups.a
$(CC) $(LDFLAGS) -o $@ testhttp.o $(LIBS)
testhttp.o: http.h ../Makedefs
#
# testmime
#
testmime: testmime.o libcups.a
$(CC) $(LDFLAGS) -o $@ testmime.o $(LIBS)
testmime.o: mime.h ../Makedefs
#
# testppd
#
testppd: testppd.o libcups.a
$(CC) $(LDFLAGS) -o $@ testppd.o $(LIBS)
testppd.o: ppd.h ../Makedefs
#
# End of "$Id$".
#
-136
Ver Arquivo
@@ -1,136 +0,0 @@
/*
* "$Id$"
*
* API definitions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
#ifndef _CUPS_CUPS_H_
# define _CUPS_CUPS_H_
/*
* Include necessary headers...
*/
# include <cups/ipp.h>
# include <cups/mime.h>
# include <cups/ppd.h>
/*
* C++ magic...
*/
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* Constants...
*/
# define CUPS_VERSION 1.0
# define CUPS_DATE_ANY -1
/*
* Types and structures...
*/
typedef unsigned cups_ptype_t; /**** Printer Type/Capability Bits ****/
enum /* Not a typedef'd enum so we can OR */
{
CUPS_PRINTER_LOCAL = 0x0000, /* Local printer or class */
CUPS_PRINTER_CLASS = 0x0001, /* Printer class */
CUPS_PRINTER_REMOTE = 0x0002, /* Remote printer or class */
CUPS_PRINTER_BW = 0x0004, /* Can do B&W printing */
CUPS_PRINTER_COLOR = 0x0008, /* Can do color printing */
CUPS_PRINTER_DUPLEX = 0x0010, /* Can do duplexing */
CUPS_PRINTER_STAPLE = 0x0020, /* Can staple output */
CUPS_PRINTER_COPIES = 0x0040, /* Can do copies */
CUPS_PRINTER_COLLATE = 0x0080, /* Can collage copies */
CUPS_PRINTER_PUNCH = 0x0100, /* Can punch output */
CUPS_PRINTER_COVER = 0x0200, /* Can cover output */
CUPS_PRINTER_BIND = 0x0400, /* Can bind output */
CUPS_PRINTER_SORT = 0x0800, /* Can sort output */
CUPS_PRINTER_SMALL = 0x1000, /* Can do Letter/Legal/A4 */
CUPS_PRINTER_MEDIUM = 0x2000, /* Can do Tabloid/B/C/A3/A2 */
CUPS_PRINTER_LARGE = 0x4000, /* Can do D/E/A1/A0 */
CUPS_PRINTER_VARIABLE = 0x8000 /* Can do variable sizes */
};
/*
* Types & structures...
*/
typedef struct /**** Printer Information ****/
{
char name[IPP_MAX_NAME], /* Printer or class name */
uri[HTTP_MAX_URI]; /* Universal resource identifier */
unsigned char info[IPP_MAX_NAME], /* Printer or class info/description */
location[IPP_MAX_NAME]; /* Location text */
ipp_pstate_t state; /* Printer state */
unsigned char message[IPP_MAX_NAME]; /* State text */
cups_ptype_t type; /* Printer type/capability codes */
} cups_browse_t;
typedef struct /**** Printer Options ****/
{
char *name; /* Name of option */
char *value; /* Value of option */
} cups_option_t;
/*
* Functions...
*/
extern int cupsCancelJob(char *printer, int job);
#define cupsDoRequest(http,request,resource) cupsDoFileRequest((http),(request),(resource),NULL)
extern ipp_t *cupsDoFileRequest(http_t *http, ipp_t *request,
char *resource, char *filename);
extern int cupsGetClasses(char ***classes);
extern char *cupsGetPPD(char *printer);
extern char *cupsGetDefault(void);
extern int cupsGetPrinters(char ***printers);
extern int cupsPrintFile(char *printer, char *filename, char *title,
int num_options, cups_option_t *options);
extern int cupsAddOption(char *name, char *value, int num_options,
cups_option_t **options);
extern void cupsFreeOptions(int num_options, cups_option_t *options);
extern char *cupsGetOption(char *name, int num_options,
cups_option_t *options);
extern int cupsParseOptions(char *arg, int num_options,
cups_option_t **options);
extern int cupsMarkOptions(ppd_file_t *ppd, int num_options,
cups_option_t *options);
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_CUPS_H_ */
/*
* End of "$Id$".
*/
-57
Ver Arquivo
@@ -1,57 +0,0 @@
/*
* "$Id$"
*
* Debugging macros for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
#ifndef _CUPS_DEBUG_H_
# define _CUPS_DEBUG_H_
/*
* Include necessary headers...
*/
# include <stdio.h>
/*
* The debug macros are used if you compile with DEBUG defined.
*
* Usage:
*
* DEBUG_puts("string")
* DEBUG_printf(("format string", arg, arg, ...));
*
* Note the extra parenthesis around the DEBUG_printf macro...
*/
# ifdef DEBUG
# define DEBUG_puts(x) puts(x)
# define DEBUG_printf(x) printf x
# else
# define DEBUG_puts(x)
# define DEBUG_printf(x)
# endif /* DEBUG */
#endif /* !_CUPS_DEBUG_H_ */
/*
* End of "$Id$".
*/
-301
Ver Arquivo
@@ -1,301 +0,0 @@
/*
* "$Id$"
*
* PPD code emission routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* PostScript is a trademark of Adobe Systems, Inc.
*
* Contents:
*
* ppdEmit() - Emit code for marked options to a file.
* ppdEmitFd() - Emit code for marked options to a file.
*/
/*
* Include necessary headers...
*/
#include "ppd.h"
#include <stdlib.h>
#include "string.h"
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
#else
# include <unistd.h>
#endif /* WIN32 || __EMX__ */
/*
* Local functions...
*/
static int ppd_sort(ppd_choice_t **c1, ppd_choice_t **c2);
static int ppd_collect(ppd_file_t *ppd, ppd_section_t section,
ppd_choice_t ***choices);
/*
* 'ppdEmit()' - Emit code for marked options to a file.
*/
int /* O - 0 on success, -1 on failure */
ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
FILE *fp, /* I - File to write to */
ppd_section_t section) /* I - Section to write */
{
int i, /* Looping var */
count; /* Number of choices */
ppd_choice_t **choices; /* Choices */
ppd_size_t *size; /* Custom page size */
if ((count = ppd_collect(ppd, section, &choices)) == 0)
return (0);
for (i = 0; i < count; i ++)
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
{
/*
* Send DSC comments with option...
*/
if (fprintf(fp, "%%%%BeginFeature: %s %s\n",
((ppd_option_t *)choices[i]->option)->keyword,
choices[i]->choice) < 0)
{
free(choices);
return (-1);
}
if (strcmp(((ppd_option_t *)choices[i]->option)->keyword, "PageSize") == 0 &&
strcmp(choices[i]->choice, "Custom") == 0)
{
/*
* Variable size; write out standard size options (this should
* eventually be changed to use the parameter positions defined
* in the PPD file...)
*/
size = ppdPageSize(ppd, "Custom");
fprintf(fp, "%.0f %.0f 0 0 0\n", size->width, size->length);
if (choices[i]->code == NULL)
{
/*
* This can happen with certain buggy PPD files that don't include
* a CustomPageSize command sequence... We just use a generic
* Level 2 command sequence...
*/
fputs("pop pop pop\n", fp);
fputs("<</PageSize[7 -2 roll]/ImagingBBox null>>setpagedevice\n", fp);
}
}
if (choices[i]->code != NULL && choices[i]->code[0] != '\0')
{
if (fputs(choices[i]->code, fp) < 0)
{
free(choices);
return (-1);
}
if (choices[i]->code[strlen(choices[i]->code) - 1] != '\n')
putc('\n', fp);
}
if (fputs("%%EndFeature\n", fp) < 0)
{
free(choices);
return (-1);
}
}
else if (fputs(choices[i]->code, fp) < 0)
{
free(choices);
return (-1);
}
free(choices);
return (0);
}
/*
* 'ppdEmitFd()' - Emit code for marked options to a file.
*/
int /* O - 0 on success, -1 on failure */
ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
int fd, /* I - File to write to */
ppd_section_t section) /* I - Section to write */
{
int i, /* Looping var */
count; /* Number of choices */
ppd_choice_t **choices; /* Choices */
char buf[1024]; /* Output buffer for feature */
if ((count = ppd_collect(ppd, section, &choices)) == 0)
return (0);
for (i = 0; i < count; i ++)
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
{
/*
* Send DSC comments with option...
*/
sprintf(buf, "%%%%BeginFeature: %s %s\n",
((ppd_option_t *)choices[i]->option)->keyword, choices[i]->choice);
if (write(fd, buf, strlen(buf)) < 1)
{
free(choices);
return (-1);
}
if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
{
free(choices);
return (-1);
}
if (write(fd, "%%EndFeature\n", 13) < 1)
{
free(choices);
return (-1);
}
}
else if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
{
free(choices);
return (-1);
}
free(choices);
return (0);
}
/*
* 'ppd_sort()' - Sort options by ordering numbers...
*/
static int /* O - -1 if c1 < c2, 0 if equal, 1 otherwise */
ppd_sort(ppd_choice_t **c1, /* I - First choice */
ppd_choice_t **c2) /* I - Second choice */
{
if (((ppd_option_t *)(*c1)->option)->order < ((ppd_option_t *)(*c2)->option)->order)
return (-1);
else if (((ppd_option_t *)(*c1)->option)->order > ((ppd_option_t *)(*c2)->option)->order)
return (1);
else
return (0);
}
/*
* 'ppd_collect()' - Collect all marked options that reside in the specified
* section.
*/
static int /* O - Number of options marked */
ppd_collect(ppd_file_t *ppd, /* I - PPD file data */
ppd_section_t section, /* I - Section to collect */
ppd_choice_t ***choices) /* O - Pointers to choices */
{
int i, j, k, m; /* Looping vars */
ppd_group_t *g, /* Current group */
*sg; /* Current sub-group */
ppd_option_t *o; /* Current option */
ppd_choice_t *c; /* Current choice */
int count; /* Number of choices collected */
ppd_choice_t **collect; /* Collected choices */
if (ppd == NULL)
return (0);
/*
* Allocate memory for up to 1000 selected choices...
*/
count = 0;
collect = calloc(sizeof(ppd_choice_t *), 1000);
/*
* Loop through all options and add choices as needed...
*/
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
{
for (j = g->num_options, o = g->options; j > 0; j --, o ++)
if (o->section == section)
for (k = o->num_choices, c = o->choices; k > 0; k --, c ++)
if (c->marked && count < 1000)
{
collect[count] = c;
count ++;
}
for (j = g->num_subgroups, sg = g->subgroups; j > 0; j --, sg ++)
for (k = sg->num_options, o = sg->options; k > 0; k --, o ++)
if (o->section == section)
for (m = o->num_choices, c = o->choices; m > 0; m --, c ++)
if (c->marked && count < 1000)
{
collect[count] = c;
count ++;
}
}
/*
* If we have more than 1 marked choice, sort them...
*/
if (count > 1)
qsort(collect, count, sizeof(ppd_choice_t *),
(int (*)(const void *, const void *))ppd_sort);
/*
* Return the array and number of choices; if 0, free the array since
* it isn't needed.
*/
if (count > 0)
{
*choices = collect;
return (count);
}
else
{
*choices = NULL;
free(collect);
return (0);
}
}
/*
* End of "$Id$".
*/
-297
Ver Arquivo
@@ -1,297 +0,0 @@
/*
* "$Id$"
*
* File type conversion routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* mimeAddFilter() - Add a filter to the current MIME database.
* mimeFilter() - Find the fastest way to convert from one type to another.
* compare() - Compare two filter types...
* lookup() - Lookup a filter...
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "string.h"
#include "mime.h"
/*
* Local functions...
*/
static int compare(mime_filter_t *, mime_filter_t *);
static mime_filter_t *lookup(mime_t *, mime_type_t *, mime_type_t *);
/*
* 'mimeAddFilter()' - Add a filter to the current MIME database.
*/
mime_filter_t * /* O - New filter */
mimeAddFilter(mime_t *mime, /* I - MIME database */
mime_type_t *src, /* I - Source type */
mime_type_t *dst, /* I - Destination type */
int cost, /* I - Relative time/resource cost */
char *filter) /* I - Filter program to run */
{
mime_filter_t *temp; /* New filter */
/*
* Range-check the input...
*/
if (mime == NULL || src == NULL || dst == NULL || filter == NULL)
return (NULL);
if (strlen(filter) > (MIME_MAX_FILTER - 1))
return (NULL);
/*
* See if we already have an existing filter for the given source and
* destination...
*/
if ((temp = lookup(mime, src, dst)) != NULL)
{
/*
* Yup, does the existing filter have a higher cost? If so, copy the
* filter and cost to the existing filter entry and return it...
*/
if (temp->cost > cost)
{
temp->cost = cost;
strcpy(temp->filter, filter);
}
}
else
{
/*
* Nope, add a new one...
*/
if (mime->num_filters == 0)
temp = malloc(sizeof(mime_filter_t));
else
temp = realloc(mime->filters, sizeof(mime_filter_t) * (mime->num_filters + 1));
if (temp == NULL)
return (NULL);
mime->filters = temp;
temp += mime->num_filters;
mime->num_filters ++;
/*
* Copy the information over and sort if necessary...
*/
temp->src = src;
temp->dst = dst;
temp->cost = cost;
strcpy(temp->filter, filter);
if (mime->num_filters > 1)
qsort(mime->filters, mime->num_filters, sizeof(mime_filter_t),
(int (*)(const void *, const void *))compare);
}
/*
* Return the new/updated filter...
*/
return (temp);
}
/*
* 'mimeFilter()' - Find the fastest way to convert from one type to another.
*/
mime_filter_t * /* O - Array of filters to run */
mimeFilter(mime_t *mime, /* I - MIME database */
mime_type_t *src, /* I - Source file type */
mime_type_t *dst, /* I - Destination file type */
int *num_filters) /* O - Number of filters to run */
{
int i, j, /* Looping vars */
num_temp, /* Number of temporary filters */
num_mintemp, /* Number of filters in the minimum */
cost, /* Current cost */
mincost; /* Current minimum */
mime_filter_t *temp, /* Temporary filter */
*mintemp, /* Current minimum */
*mincurrent, /* Current filter for minimum */
*current, /* Current filter */
*filters; /* Filters to use */
/*
* Range-check the input...
*/
if (mime == NULL || src == NULL || dst == NULL || num_filters == NULL)
return (NULL);
*num_filters = 0;
/*
* See if there is a filter that can convert the files directly...
*/
if ((temp = lookup(mime, src, dst)) != NULL)
{
/*
* Got a direct filter!
*/
if ((filters = (mime_filter_t *)malloc(sizeof(mime_filter_t))) == NULL)
return (NULL);
memcpy(filters, temp, sizeof(mime_filter_t));
*num_filters = 1;
return (filters);
}
/*
* OK, now look for filters from the source type to any other type...
*/
mincost = 9999999;
mintemp = NULL;
for (i = mime->num_filters, current = mime->filters; i > 0; i --, current ++)
if (current->src == src)
{
/*
* See if we have any filters that can convert from the destination type
* of this filter to the final type...
*/
if ((temp = mimeFilter(mime, current->dst, dst, &num_temp)) == NULL)
continue;
/*
* Found a match; see if this one is less costly than the last (if
* any...)
*/
for (j = 0, cost = 0; j < num_temp; j ++)
cost += temp->cost;
if (cost < mincost)
{
if (mintemp != NULL)
free(mintemp);
mincost = cost;
mintemp = temp;
num_mintemp = num_temp;
mincurrent = current;
}
else
free(temp);
}
if (mintemp != NULL)
{
/*
* Hey, we got a match! Add the current filter to the beginning of the
* filter list...
*/
filters = (mime_filter_t *)realloc(mintemp, sizeof(mime_filter_t) *
(num_mintemp + 1));
if (filters == NULL)
{
*num_filters = 0;
return (NULL);
}
memmove(filters + 1, filters, num_mintemp * sizeof(mime_filter_t));
memcpy(filters, mincurrent, sizeof(mime_filter_t));
*num_filters = num_mintemp + 1;
return (filters);
}
return (NULL);
}
/*
* 'compare()' - Compare two filter types...
*/
static int /* O - Comparison result */
compare(mime_filter_t *f0, /* I - First filter */
mime_filter_t *f1) /* I - Second filter */
{
int i; /* Result of comparison */
if ((i = strcmp(f0->src->super, f1->src->super)) == 0)
if ((i = strcmp(f0->src->type, f1->src->type)) == 0)
if ((i = strcmp(f0->dst->super, f1->dst->super)) == 0)
i = strcmp(f0->dst->type, f1->dst->type);
return (i);
}
/*
* 'lookup()' - Lookup a filter...
*/
static mime_filter_t * /* O - Filter for src->dst */
lookup(mime_t *mime, /* I - MIME database */
mime_type_t *src, /* I - Source type */
mime_type_t *dst) /* I - Destination type */
{
mime_filter_t key; /* Key record for filter search */
if (mime->num_filters == 0)
return (NULL);
key.src = src;
key.dst = dst;
return ((mime_filter_t *)bsearch(&key, mime->filters, mime->num_filters,
sizeof(mime_filter_t),
(int (*)(const void *, const void *))compare));
}
/*
* End of "$Id$".
*/
-1392
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-316
Ver Arquivo
@@ -1,316 +0,0 @@
/*
* "$Id$"
*
* Hyper-Text Transport Protocol definitions for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
#ifndef _CUPS_HTTP_H_
# define _CUPS_HTTP_H_
/*
* Include necessary headers...
*/
# include <string.h>
# include <time.h>
# if defined(WIN32) || defined(__EMX__)
# include <winsock.h>
# else
# include <unistd.h>
# include <sys/time.h>
# include <sys/types.h>
# include <sys/socket.h>
# include <netdb.h>
# include <netinet/in.h>
# include <arpa/inet.h>
# include <netinet/in_systm.h>
# include <netinet/ip.h>
# include <netinet/tcp.h>
# endif /* WIN32 || __EMX__ */
/*
* C++ magic...
*/
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* Limits...
*/
# define HTTP_MAX_URI 1024 /* Max length of URI string */
# define HTTP_MAX_HOST 256 /* Max length of hostname string */
# define HTTP_MAX_BUFFER 8192 /* Max length of data buffer */
# define HTTP_MAX_VALUE 256 /* Max header field value length */
/*
* HTTP state values...
*/
typedef enum /* States are server-oriented */
{
HTTP_WAITING, /* Waiting for command */
HTTP_OPTIONS, /* OPTIONS command, waiting for blank line */
HTTP_GET, /* GET command, waiting for blank line */
HTTP_GET_SEND, /* GET command, sending data */
HTTP_HEAD, /* HEAD command, waiting for blank line */
HTTP_POST, /* POST command, waiting for blank line */
HTTP_POST_RECV, /* POST command, receiving data */
HTTP_POST_SEND, /* POST command, sending data */
HTTP_PUT, /* PUT command, waiting for blank line */
HTTP_PUT_RECV, /* PUT command, receiving data */
HTTP_DELETE, /* DELETE command, waiting for blank line */
HTTP_TRACE, /* TRACE command, waiting for blank line */
HTTP_CLOSE, /* CLOSE command, waiting for blank line */
HTTP_STATUS /* Command complete, sending status */
} http_state_t;
/*
* HTTP version numbers...
*/
typedef enum
{
HTTP_0_9 = 9, /* HTTP/0.9 */
HTTP_1_0 = 100, /* HTTP/1.0 */
HTTP_1_1 = 101 /* HTTP/1.1 */
} http_version_t;
/*
* HTTP keep-alive values...
*/
typedef enum
{
HTTP_KEEPALIVE_OFF = 0,
HTTP_KEEPALIVE_ON
} http_keepalive_t;
/*
* HTTP transfer encoding values...
*/
typedef enum
{
HTTP_ENCODE_LENGTH, /* Data is sent with Content-Length */
HTTP_ENCODE_CHUNKED /* Data is chunked */
} http_encoding_t;
/*
* HTTP status codes...
*/
typedef enum
{
HTTP_ERROR = -1, /* An error response from httpXxxx() */
HTTP_CONTINUE, /* Everything OK, keep going... */
HTTP_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */
HTTP_CREATED, /* PUT command was successful */
HTTP_ACCEPTED, /* DELETE command was successful */
HTTP_NOT_AUTHORITATIVE, /* Information isn't authoritative */
HTTP_NO_CONTENT, /* Successful command, no new data */
HTTP_RESET_CONTENT, /* Content was reset/recreated */
HTTP_PARTIAL_CONTENT, /* Only a partial file was recieved/sent */
HTTP_MULTIPLE_CHOICES = 300, /* Multiple files match request */
HTTP_MOVED_PERMANENTLY, /* Document has moved permanently */
HTTP_MOVED_TEMPORARILY, /* Document has moved temporarily */
HTTP_SEE_OTHER, /* See this other link... */
HTTP_NOT_MODIFIED, /* File not modified */
HTTP_USE_PROXY, /* Must use a proxy to access this URI */
HTTP_BAD_REQUEST = 400, /* Bad request */
HTTP_UNAUTHORIZED, /* Unauthorized to access host */
HTTP_PAYMENT_REQUIRED, /* Payment required */
HTTP_FORBIDDEN, /* Forbidden to access this URI */
HTTP_NOT_FOUND, /* URI was not found */
HTTP_METHOD_NOT_ALLOWED, /* Method is not allowed */
HTTP_NOT_ACCEPTABLE, /* Not Acceptable */
HTTP_PROXY_AUTHENTICATION, /* Proxy Authentication is Required */
HTTP_REQUEST_TIMEOUT, /* Request timed out */
HTTP_CONFLICT, /* Request is self-conflicting */
HTTP_GONE, /* Server has gone away */
HTTP_LENGTH_REQUIRED, /* A content length or encoding is required */
HTTP_PRECONDITION, /* Precondition failed */
HTTP_REQUEST_TOO_LARGE, /* Request entity too large */
HTTP_URI_TOO_LONG, /* URI too long */
HTTP_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */
HTTP_SERVER_ERROR = 500, /* Internal server error */
HTTP_NOT_IMPLEMENTED, /* Feature not implemented */
HTTP_BAD_GATEWAY, /* Bad gateway */
HTTP_SERVICE_UNAVAILABLE, /* Service is unavailable */
HTTP_GATEWAY_TIMEOUT, /* Gateway connection timed out */
HTTP_NOT_SUPPORTED /* HTTP version not supported */
} http_status_t;
/*
* HTTP field names...
*/
typedef enum
{
HTTP_FIELD_UNKNOWN = -1,
HTTP_FIELD_ACCEPT = 0,
HTTP_FIELD_ACCEPT_CHARSET,
HTTP_FIELD_ACCEPT_ENCODING,
HTTP_FIELD_ACCEPT_LANGUAGE,
HTTP_FIELD_ACCEPT_RANGES,
HTTP_FIELD_AGE,
HTTP_FIELD_ALLOW,
HTTP_FIELD_ALTERNATES,
HTTP_FIELD_AUTHORIZATION,
HTTP_FIELD_CACHE_CONTROL,
HTTP_FIELD_CONNECTION,
HTTP_FIELD_CONTENT_BASE,
HTTP_FIELD_CONTENT_ENCODING,
HTTP_FIELD_CONTENT_LANGUAGE,
HTTP_FIELD_CONTENT_LENGTH,
HTTP_FIELD_CONTENT_LOCATION,
HTTP_FIELD_CONTENT_MD5,
HTTP_FIELD_CONTENT_RANGE,
HTTP_FIELD_CONTENT_TYPE,
HTTP_FIELD_CONTENT_VERSION,
HTTP_FIELD_DATE,
HTTP_FIELD_DERIVED_FROM,
HTTP_FIELD_ETAG,
HTTP_FIELD_EXPIRES,
HTTP_FIELD_FROM,
HTTP_FIELD_HOST,
HTTP_FIELD_IF_MATCH,
HTTP_FIELD_IF_MODIFIED_SINCE,
HTTP_FIELD_IF_NONE_MATCH,
HTTP_FIELD_IF_RANGE,
HTTP_FIELD_IF_UNMODIFIED_SINCE,
HTTP_FIELD_KEEP_ALIVE,
HTTP_FIELD_LAST_MODIFIED,
HTTP_FIELD_LINK,
HTTP_FIELD_LOCATION,
HTTP_FIELD_MAX_FORWARDS,
HTTP_FIELD_MESSAGE_ID,
HTTP_FIELD_MIME_VERSION,
HTTP_FIELD_PRAGMA,
HTTP_FIELD_PROXY_AUTHENTICATE,
HTTP_FIELD_PROXY_AUTHORIZATION,
HTTP_FIELD_PUBLIC,
HTTP_FIELD_RANGE,
HTTP_FIELD_REFERER,
HTTP_FIELD_RETRY_AFTER,
HTTP_FIELD_SERVER,
HTTP_FIELD_TRANSFER_ENCODING,
HTTP_FIELD_UPGRADE,
HTTP_FIELD_URI,
HTTP_FIELD_USER_AGENT,
HTTP_FIELD_VARY,
HTTP_FIELD_VIA,
HTTP_FIELD_WARNING,
HTTP_FIELD_WWW_AUTHENTICATE,
HTTP_FIELD_MAX
} http_field_t;
/*
* HTTP connection structure...
*/
typedef struct
{
int fd; /* File descriptor for this socket */
int blocking; /* To block or not to block */
time_t activity; /* Time since last read/write */
http_state_t state; /* State of client */
http_status_t status; /* Status of last request */
http_version_t version; /* Protocol version */
http_keepalive_t keep_alive; /* Keep-alive supported? */
struct sockaddr_in hostaddr; /* Address of connected host */
char hostname[HTTP_MAX_HOST],
/* Name of connected host */
fields[HTTP_FIELD_MAX][HTTP_MAX_VALUE];
/* Field values */
char *data; /* Pointer to data buffer */
http_encoding_t data_encoding; /* Chunked or not */
int data_remaining; /* Number of bytes left */
int used; /* Number of bytes used in buffer */
char buffer[HTTP_MAX_BUFFER];
/* Buffer for messages */
} http_t;
/*
* Prototypes...
*/
# define httpBlocking(http,b) (http)->blocking = (b)
# define httpClearFields(http) memset((http)->fields, 0, sizeof((http)->fields)),\
httpSetField((http), HTTP_FIELD_HOST, (http)->hostname)
extern void httpClose(http_t *http);
extern http_t *httpConnect(char *host, int port);
extern int httpDelete(http_t *http, char *uri);
extern void httpFlush(http_t *http);
extern int httpGet(http_t *http, char *uri);
extern char *httpGets(char *line, int length, http_t *http);
extern char *httpGetDateString(time_t t);
extern time_t httpGetDateTime(char *s);
# define httpGetField(http,field) (http)->fields[field]
extern int httpHead(http_t *http, char *uri);
extern void httpInitialize(void);
extern int httpOptions(http_t *http, char *uri);
extern int httpPost(http_t *http, char *uri);
extern int httpPrintf(http_t *http, const char *format, ...);
extern int httpPut(http_t *http, char *uri);
extern int httpRead(http_t *http, char *buffer, int length);
extern int httpReconnect(http_t *http);
extern void httpSeparate(char *uri, char *method, char *username,
char *host, int *port, char *resource);
extern void httpSetField(http_t *http, http_field_t field, char *value);
extern char *httpStatus(http_status_t status);
extern int httpTrace(http_t *http, char *uri);
extern http_status_t httpUpdate(http_t *http);
extern int httpWrite(http_t *http, char *buffer, int length);
extern char *httpEncode64(char *out, char *in);
extern char *httpDecode64(char *out, char *in);
extern int httpGetLength(http_t *http);
/*
* C++ magic...
*/
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_HTTP_H_ */
/*
* End of "$Id$".
*/
-1458
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-342
Ver Arquivo
@@ -1,342 +0,0 @@
/*
* "$Id$"
*
* Internet Printing Protocol definitions for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
#ifndef _CUPS_IPP_H_
# define _CUPS_IPP_H_
/*
* Include necessary headers...
*/
# include <cups/http.h>
/*
* C++ magic...
*/
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* IPP version string...
*/
# define IPP_VERSION "\001\000"
/*
* IPP registered port number... This is the default value - applications
* should use the ippPort() function so that you can customize things in
* /etc/services if needed!
*/
# define IPP_PORT 631
/*
* Common limits...
*/
# define IPP_MAX_NAME 256
# define IPP_MAX_VALUES 100
/*
* Types and structures...
*/
typedef enum /**** Format tags for attribute formats... ****/
{
IPP_TAG_ZERO = 0x00,
IPP_TAG_OPERATION,
IPP_TAG_JOB,
IPP_TAG_END,
IPP_TAG_PRINTER,
IPP_TAG_EXTENSION,
IPP_TAG_UNSUPPORTED = 0x10,
IPP_TAG_DEFAULT,
IPP_TAG_UNKNOWN,
IPP_TAG_NOVALUE,
IPP_TAG_INTEGER = 0x21,
IPP_TAG_BOOLEAN,
IPP_TAG_ENUM,
IPP_TAG_STRING = 0x30,
IPP_TAG_DATE,
IPP_TAG_RESOLUTION,
IPP_TAG_RANGE,
IPP_TAG_TEXTLANG,
IPP_TAG_NAMELANG,
IPP_TAG_TEXT = 0x41,
IPP_TAG_NAME,
IPP_TAG_KEYWORD,
IPP_TAG_URI,
IPP_TAG_URISCHEME,
IPP_TAG_CHARSET,
IPP_TAG_LANGUAGE,
IPP_TAG_MIMETYPE
} ipp_tag_t;
typedef enum /**** Resolution units... ****/
{
IPP_RES_PER_INCH = 3,
IPP_RES_PER_CM
} ipp_res_t;
typedef enum /**** Multiple Document Handling ****/
{
IPP_DOC_SINGLE,
IPP_DOC_UNCOLLATED,
IPP_DOC_COLLATED,
IPP_DOC_SEPARATE
} ipp_doc_t;
typedef enum /**** Finishings... ****/
{
IPP_FINISH_NONE = 3,
IPP_FINISH_STAPLE,
IPP_FINISH_PUNCH,
IPP_FINISH_COVER,
IPP_FINISH_BIND
} ipp_finish_t;
typedef enum /**** Orientation... ****/
{
IPP_PORTRAIT = 3, /* No rotation */
IPP_LANDSCAPE, /* 90 degrees counter-clockwise */
IPP_REVERSE_LANDSCAPE, /* 90 degrees clockwise */
IPP_REVERSE_PORTRAIT /* 180 degrees */
} ipp_orient_t;
typedef enum /**** Qualities... ****/
{
IPP_QUALITY_DRAFT = 3,
IPP_QUALITY_NORMAL,
IPP_QUALITY_HIGH
} ipp_quality_t;
typedef enum /**** Job States.... */
{
IPP_JOB_PENDING = 3,
IPP_JOB_HELD,
IPP_JOB_PROCESSING,
IPP_JOB_STOPPED,
IPP_JOB_CANCELED,
IPP_JOB_ABORTED,
IPP_JOB_COMPLETED
} ipp_jstate_t;
typedef enum /**** Printer States.... */
{
IPP_PRINTER_IDLE = 3,
IPP_PRINTER_PROCESSING,
IPP_PRINTER_STOPPED
} ipp_pstate_t;
typedef enum /**** IPP states... ****/
{
IPP_ERROR = -1, /* An error occurred */
IPP_IDLE, /* Nothing is happening/request completed */
IPP_HEADER, /* The request header needs to be sent/received */
IPP_ATTRIBUTE, /* One or more attributes need to be sent/received */
IPP_DATA /* IPP request data needs to be sent/received */
} ipp_state_t;
typedef enum /**** IPP operations... ****/
{
IPP_PRINT_JOB = 0x0002,
IPP_PRINT_URI,
IPP_VALIDATE_JOB,
IPP_CREATE_JOB,
IPP_SEND_DOCUMENT,
IPP_SEND_URI,
IPP_CANCEL_JOB,
IPP_GET_JOB_ATTRIBUTES,
IPP_GET_JOBS,
IPP_GET_PRINTER_ATTRIBUTES,
IPP_HOLD_JOB = 0x000c,
IPP_RELEASE_JOB,
IPP_RESTART_JOB,
IPP_PAUSE_PRINTER = 0x0010,
IPP_RESUME_PRINTER,
IPP_PURGE_JOBS,
IPP_PRIVATE = 0x4000,
CUPS_GET_DEFAULT,
CUPS_GET_PRINTERS,
CUPS_ADD_PRINTER,
CUPS_DELETE_PRINTER,
CUPS_GET_CLASSES,
CUPS_ADD_CLASS,
CUPS_DELETE_CLASS,
CUPS_ACCEPT_JOBS,
CUPS_REJECT_JOBS,
CUPS_SET_DEFAULT
} ipp_op_t;
typedef enum /**** IPP status codes... ****/
{
IPP_OK = 0x0000,
IPP_OK_SUBST,
IPP_OK_CONFLICT,
IPP_BAD_REQUEST = 0x0400,
IPP_FORBIDDEN,
IPP_NOT_AUTHENTICATED,
IPP_NOT_AUTHORIZED,
IPP_NOT_POSSIBLE,
IPP_TIMEOUT,
IPP_NOT_FOUND,
IPP_GONE,
IPP_REQUEST_ENTITY,
IPP_REQUEST_VALUE,
IPP_DOCUMENT_FORMAT,
IPP_ATTRIBUTES,
IPP_URI_SCHEME,
IPP_CHARSET,
IPP_CONFLICT,
IPP_INTERNAL_ERROR = 0x0500,
IPP_OPERATION_NOT_SUPPORTED,
IPP_SERVICE_UNAVAILABLE,
IPP_VERSION_NOT_SUPPORTED,
IPP_DEVICE_UNAVAILABLE,
IPP_TEMPORARY_ERROR,
IPP_NOT_ACCEPTING,
IPP_PRINTER_BUSY
} ipp_status_t;
typedef unsigned char ipp_uchar_t;/**** Unsigned 8-bit integer/character ****/
typedef union /**** Request Header ****/
{
struct /* Any Header */
{
ipp_uchar_t version[2]; /* Protocol version number */
int op_status; /* Operation ID or status code*/
int request_id; /* Request ID */
} any;
struct /* Operation Header */
{
ipp_uchar_t version[2]; /* Protocol version number */
ipp_op_t operation_id; /* Operation ID */
int request_id; /* Request ID */
} op;
struct /* Status Header */
{
ipp_uchar_t version[2]; /* Protocol version number */
ipp_status_t status_code; /* Status code */
int request_id; /* Request ID */
} status;
} ipp_request_t;
typedef union /**** Attribute Value ****/
{
int integer; /* Integer/enumerated value */
char boolean; /* Boolean value */
ipp_uchar_t date[11]; /* Date/time value */
struct
{
int xres, /* Horizontal resolution */
yres; /* Vertical resolution */
ipp_res_t units; /* Resolution units */
} resolution; /* Resolution value */
struct
{
int lower, /* Lower value */
upper; /* Upper value */
} range; /* Range of integers value */
struct
{
char *charset; /* Character set */
char *text; /* String */
} string; /* String with language value */
} ipp_value_t;
typedef struct ipp_attribute_s /**** Attribute ****/
{
struct ipp_attribute_s *next;
/* Next atrtribute in list */
ipp_tag_t group_tag, /* Job/Printer/Operation group tag */
value_tag; /* What type of value is it? */
char *name; /* Name of attribute */
int num_values; /* Number of values */
ipp_value_t values[1]; /* Values */
} ipp_attribute_t;
typedef struct /**** Request State ****/
{
ipp_state_t state; /* State of request */
ipp_request_t request; /* Request header */
ipp_attribute_t *attrs, /* Attributes */
*last, /* Last attribute in list */
*current; /* Current attribute (for read/write) */
ipp_tag_t curtag; /* Current attribute group tag */
} ipp_t;
/*
* Prototypes...
*/
extern time_t ippDateToTime(ipp_uchar_t *date);
extern ipp_attribute_t *ippAddBoolean(ipp_t *ipp, ipp_tag_t group, char *name, char value);
extern ipp_attribute_t *ippAddBooleans(ipp_t *ipp, ipp_tag_t group, char *name, int num_values, char *values);
extern ipp_attribute_t *ippAddDate(ipp_t *ipp, ipp_tag_t group, char *name, ipp_uchar_t *value);
extern ipp_attribute_t *ippAddInteger(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, char *name, int value);
extern ipp_attribute_t *ippAddIntegers(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, char *name, int num_values, int *values);
extern ipp_attribute_t *ippAddRange(ipp_t *ipp, ipp_tag_t group, char *name, int lower, int upper);
extern ipp_attribute_t *ippAddRanges(ipp_t *ipp, ipp_tag_t group, char *name, int num_values, int *lower, int *upper);
extern ipp_attribute_t *ippAddResolution(ipp_t *ipp, ipp_tag_t group, char *name, ipp_res_t units, int xres, int yres);
extern ipp_attribute_t *ippAddResolutions(ipp_t *ipp, ipp_tag_t group, char *name, int num_values, ipp_res_t units, int *xres, int *yres);
extern ipp_attribute_t *ippAddSeparator(ipp_t *ipp);
extern ipp_attribute_t *ippAddString(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, char *name, char *charset, char *value);
extern ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, ipp_tag_t type, char *name, int num_values, char *charset, char **values);
extern void ippDelete(ipp_t *ipp);
extern ipp_attribute_t *ippFindAttribute(ipp_t *ipp, char *name, ipp_tag_t type);
extern size_t ippLength(ipp_t *ipp);
extern ipp_t *ippNew(void);
extern ipp_state_t ippRead(http_t *http, ipp_t *ipp);
extern ipp_uchar_t *ippTimeToDate(time_t t);
extern ipp_state_t ippWrite(http_t *http, ipp_t *ipp);
extern int ippPort(void);
/*
* C++ magic...
*/
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_IPP_H_ */
/*
* End of "$Id$".
*/
-370
Ver Arquivo
@@ -1,370 +0,0 @@
/*
* "$Id$"
*
* I18N/language support for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* cupsLangEncoding() - Return the character encoding (us-ascii, etc.)
* for the given language.
* cupsLangFlush() - Flush all language data out of the cache.
* cupsLangFree() - Free language data.
* cupsLangGet() - Get a language.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "string.h"
#include "language.h"
/*
* Local globals...
*/
static cups_lang_t *lang_cache = NULL; /* Language string cache */
static char *lang_blank = ""; /* Blank constant string */
static char *lang_encodings[] = /* Encoding strings */
{
"us-ascii",
"iso8859-1",
"iso8859-2",
"iso8859-3",
"iso8859-4",
"iso8859-5",
"iso8859-6",
"iso8859-7",
"iso8859-8",
"iso8859-9",
"iso8859-10",
"utf8"
};
static char *lang_default[] = /* Default POSIX locale */
{
#include "cups_C.h"
NULL
};
/*
* 'cupsLangEncoding()' - Return the character encoding (us-ascii, etc.)
* for the given language.
*/
char * /* O - Character encoding */
cupsLangEncoding(cups_lang_t *lang) /* I - Language data */
{
if (lang == NULL)
return (lang_encodings[0]);
else
return (lang_encodings[lang->encoding]);
}
/*
* 'cupsLangFlush()' - Flush all language data out of the cache.
*/
void
cupsLangFlush(void)
{
int i; /* Looping var */
cups_lang_t *lang, /* Current language */
*next; /* Next language */
for (lang = lang_cache; lang != NULL; lang = next)
{
for (i = 0; i < CUPS_MSG_MAX; i ++)
if (lang->messages[i] != NULL && lang->messages[i] != lang_blank)
free(lang->messages[i]);
next = lang->next;
free(lang);
}
}
/*
* 'cupsLangFree()' - Free language data.
*
* This does not actually free anything; use cupsLangFlush() for that.
*/
void
cupsLangFree(cups_lang_t *lang) /* I - Language to free */
{
if (lang != NULL && lang->used > 0)
lang->used --;
}
/*
* 'cupsLangGet()' - Get a language.
*/
cups_lang_t * /* O - Language data */
cupsLangGet(char *language) /* I - Language or locale */
{
int i, count; /* Looping vars */
char real[16], /* Real language name */
filename[1024], /* Filename for language locale file */
*localedir; /* Directory for locale files */
FILE *fp; /* Language locale file pointer */
char line[1024]; /* Line from file */
cups_msg_t msg; /* Message number */
char *text; /* Message text */
cups_lang_t *lang; /* Current language... */
/*
* Convert the language string passed in to a locale string. "C" is the
* standard POSIX locale and is copied unchanged. Otherwise the
* language string is converted from ll-cc (language-country) to ll_CC
* to match the file naming convention used by all POSIX-compliant
* operating systems.
*/
if (language == NULL || language[0] == '\0')
language = "C";
if (strlen(language) < 2)
strcpy(real, "C");
else
{
real[0] = tolower(language[0]);
real[1] = tolower(language[1]);
if (language[2] == '_' || language[2] == '-')
{
real[2] = '_';
real[3] = toupper(language[3]);
real[4] = toupper(language[4]);
real[5] = '\0';
language[5] = '\0';
}
else
{
language[2] = '\0';
real[2] = '\0';
}
}
/*
* Next try to open a locale file; we will try the country-localized file
* first, and then look for generic language file. If all else fails we
* will use the POSIX locale.
*/
if ((localedir = getenv("LOCALEDIR")) == NULL)
localedir = CUPS_LOCALEDIR;
sprintf(filename, "%s/%s/cups_%s", localedir, real, real);
if ((fp = fopen(filename, "r")) == NULL)
if (strlen(real) > 2)
{
/*
* Nope, see if we can open a generic language file...
*/
real[2] = '\0';
sprintf(filename, "%s/%s/cups_%s", localedir, real, real);
fp = fopen(filename, "r");
}
/*
* Then see if we already have this language loaded...
*/
for (lang = lang_cache; lang != NULL; lang = lang->next)
if (strcmp(lang->language, language) == 0)
{
lang->used ++;
if (fp != NULL)
fclose(fp);
return (lang);
}
/*
* OK, we have an open messages file; the first line will contain the
* language encoding (us-ascii, iso-8859-1, etc.), and the rest will
* be messages consisting of:
*
* #### SP message text
*
* or:
*
* message text
*
* If the line starts with a number, then message processing picks up
* where the number indicates. Otherwise the last message number is
* incremented.
*
* All leading whitespace is deleted.
*/
if (fp == NULL)
strcpy(line, lang_default[0]);
else if (fgets(line, sizeof(line), fp) == NULL)
{
/*
* Can't read encoding!
*/
fclose(fp);
return (NULL);
}
i = strlen(line) - 1;
if (line[i] == '\n')
line[i] = '\0'; /* Strip LF */
/*
* See if there is a free language available; if so, use that
* record...
*/
for (lang = lang_cache; lang != NULL; lang = lang->next)
if (lang->used == 0)
break;
if (lang == NULL)
{
/*
* Allocate memory for the language and add it to the cache.
*/
if ((lang = calloc(sizeof(cups_lang_t), 1)) == NULL)
{
fclose(fp);
return (NULL);
}
lang->next = lang_cache;
lang_cache = lang;
}
/*
* Free all old strings as needed...
*/
for (i = 0; i < CUPS_MSG_MAX; i ++)
{
if (lang->messages[i] != NULL && lang->messages[i] != lang_blank)
free(lang->messages[i]);
lang->messages[i] = lang_blank;
}
/*
* Then assign the language and encoding fields...
*/
lang->used ++;
strcpy(lang->language, language);
for (i = 0; i < (sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++)
if (strcmp(lang_encodings[i], line) == 0)
{
lang->encoding = (cups_encoding_t)i;
break;
}
/*
* Read the strings from the file...
*/
msg = (cups_msg_t)-1;
count = 1;
for (;;)
{
/*
* Read a line from memory or from a file...
*/
if (fp == NULL)
{
if (lang_default[count] == NULL)
break;
strcpy(line, lang_default[count]);
}
else if (fgets(line, sizeof(line), fp) == NULL)
break;
count ++;
/*
* Ignore blank lines...
*/
i = strlen(line) - 1;
if (line[i] == '\n')
line[i] = '\0'; /* Strip LF */
if (line[0] == '\0')
continue;
/*
* Grab the message number and text...
*/
if (isdigit(line[0]))
msg = (cups_msg_t)atoi(line);
else
msg ++;
if (msg < 0 || msg >= CUPS_MSG_MAX)
continue;
text = line;
while (isdigit(*text))
text ++;
while (isspace(*text))
text ++;
lang->messages[msg] = strdup(text);
}
/*
* Close the file and return...
*/
if (fp != NULL)
fclose(fp);
return (lang);
}
/*
* End of "$Id$".
*/
-188
Ver Arquivo
@@ -1,188 +0,0 @@
/*
* "$Id$"
*
* Multi-language support for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
#ifndef _CUPS_LANGUAGE_H_
# define _CUPS_LANGUAGE_H_
/*
* Include necessary headers...
*/
# include <locale.h>
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* Messages...
*/
typedef enum /**** Message Indices ****/
{
CUPS_MSG_OK,
CUPS_MSG_CANCEL,
CUPS_MSG_HELP,
CUPS_MSG_QUIT,
CUPS_MSG_CLOSE,
CUPS_MSG_YES,
CUPS_MSG_NO,
CUPS_MSG_AUTO,
CUPS_MSG_ON,
CUPS_MSG_OFF,
CUPS_MSG_SAVE,
CUPS_MSG_DISCARD,
CUPS_MSG_DEFAULT,
CUPS_MSG_USER_DEFINED,
CUPS_MSG_OPTIONS,
CUPS_MSG_MORE_INFO,
CUPS_MSG_BLACK,
CUPS_MSG_COLOR,
CUPS_MSG_CYAN,
CUPS_MSG_MAGENTA,
CUPS_MSG_YELLOW,
CUPS_MSG_COPYRIGHT,
CUPS_MSG_ALL_RIGHTS_RESERVED,
CUPS_MSG_GENERAL,
CUPS_MSG_PRINTER,
CUPS_MSG_POSTSCRIPT,
CUPS_MSG_IMAGE,
CUPS_MSG_TEXT,
CUPS_MSG_HPGL,
CUPS_MSG_ADVANCED,
CUPS_MSG_PRINT_BANNER_PAGE,
CUPS_MSG_VERBOSE_LOGGING,
CUPS_MSG_PRINT_PAGES,
CUPS_MSG_DOCUMENT,
CUPS_MSG_ENTIRE_DOCUMENT,
CUPS_MSG_PAGE_RANGE,
CUPS_MSG_REVERSE_ORDER,
CUPS_MSG_PAGE_FORMAT,
CUPS_MSG_1_UP,
CUPS_MSG_2_UP,
CUPS_MSG_4_UP,
CUPS_MSG_IMAGE_SCALING,
CUPS_MSG_USE_NATURAL_IMAGE_SIZE,
CUPS_MSG_ZOOM_BY_PERCENT,
CUPS_MSG_ZOOM_BY_PPI,
CUPS_MSG_MIRROR_IMAGE,
CUPS_MSG_ROTATE_IMAGE,
CUPS_MSG_BEST_FIT,
CUPS_MSG_COLOR_SATURATION,
CUPS_MSG_COLOR_HUE,
CUPS_MSG_NUMBER_OF_COLUMNS,
CUPS_MSG_MARGINS,
CUPS_MSG_WRAP_TEXT,
CUPS_MSG_FIT_TO_PAGE,
CUPS_MSG_SHADING,
CUPS_MSG_DEFAULT_PEN_WIDTH,
CUPS_MSG_GAMMA_CORRECTION,
CUPS_MSG_BRIGHTNESS,
CUPS_MSG_COLOR_PROFILE,
CUPS_MSG_ADD_PRINTER,
CUPS_MSG_DELETE_PRINTER,
CUPS_MSG_MODIFY_PRINTER,
CUPS_MSG_PRINTER_URI,
CUPS_MSG_PRINTER_NAME,
CUPS_MSG_PRINTER_LOCATION,
CUPS_MSG_PRINTER_INFO,
CUPS_MSG_PRINTER_MAKE_AND_MODEL,
CUPS_MSG_DEVICE_URI,
CUPS_MSG_FORMATTING_PAGE,
CUPS_MSG_PRINTING_PAGE,
CUPS_MSG_INITIALIZING_PRINTER,
CUPS_MSG_PRINTER_STATE,
CUPS_MSG_ACCEPTING_JOBS,
CUPS_MSG_NOT_ACCEPTING_JOBS,
CUPS_MSG_PRINT_JOBS,
CUPS_MSG_CLASS,
CUPS_MSG_LOCAL,
CUPS_MSG_REMOTE,
CUPS_MSG_DUPLEXING,
CUPS_MSG_STAPLING,
CUPS_MSG_FAST_COPIES,
CUPS_MSG_COLLATED_COPIES,
CUPS_MSG_PUNCHING,
CUPS_MSG_COVERING,
CUPS_MSG_BINDING,
CUPS_MSG_SORTING,
CUPS_MSG_SMALL,
CUPS_MSG_MEDIUM,
CUPS_MSG_LARGE,
CUPS_MSG_VARIABLE,
CUPS_MSG_IDLE,
CUPS_MSG_PROCESSING,
CUPS_MSG_STOPPED,
CUPS_MSG_HTTP_BASE = 200,
CUPS_MSG_HTTP_END = 505,
CUPS_MSG_MAX
} cups_msg_t;
typedef enum /**** Language Encodings ****/
{
CUPS_US_ASCII,
CUPS_ISO8859_1,
CUPS_ISO8859_2,
CUPS_ISO8859_3,
CUPS_ISO8859_4,
CUPS_ISO8859_5,
CUPS_ISO8859_6,
CUPS_ISO8859_7,
CUPS_ISO8859_8,
CUPS_ISO8859_9,
CUPS_ISO8859_10,
CUPS_UTF8
} cups_encoding_t;
typedef struct cups_lang_str /**** Language Cache Structure ****/
{
struct cups_lang_str *next; /* Next language in cache */
int used; /* Number of times this entry has been used. */
cups_encoding_t encoding; /* Text encoding */
char language[16]; /* Language/locale name */
char *messages[CUPS_MSG_MAX];
/* Message array */
} cups_lang_t;
/*
* Prototypes...
*/
# define cupsLangDefault() cupsLangGet(setlocale(LC_ALL, 0))
extern char *cupsLangEncoding(cups_lang_t *lang);
extern void cupsLangFlush(void);
extern void cupsLangFree(cups_lang_t *lang);
extern cups_lang_t *cupsLangGet(char *language);
# define cupsLangString(lang,msg) (lang)->messages[(msg)]
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_LANGUAGE_H_ */
/*
* End of "$Id$".
*/
-428
Ver Arquivo
@@ -1,428 +0,0 @@
/*
* "$Id$"
*
* Option marking routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* PostScript is a trademark of Adobe Systems, Inc.
*
* Contents:
*
* ppdConflicts() - Check to see if there are any conflicts.
* ppdFindChoice() - Return a pointer to an option choice.
* ppdFindMarkedChoice() - Return the marked choice for the specified option.
* ppdFindOption() - Return a pointer to the specified option.
* ppdIsMarked() - Check to see if an option is marked...
* ppdMarkDefaults() - Mark all default options in the PPD file.
* ppdMarkOption() - Mark an option in a PPD file.
* ppd_defaults() - Set the defaults for this group and all sub-groups.
* ppd_default() - Set the default choice for an option.
*/
/*
* Include necessary headers...
*/
#include "ppd.h"
#include "string.h"
/*
* Local functions...
*/
static void ppd_defaults(ppd_group_t *g);
static void ppd_default(ppd_option_t *o);
/*
* 'ppdConflicts()' - Check to see if there are any conflicts.
*/
int /* O - Number of conflicts found */
ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
{
int i, j, k, /* Looping variables */
conflicts; /* Number of conflicts */
ppd_const_t *c; /* Current constraint */
ppd_group_t *g, *sg; /* Groups */
ppd_option_t *o1, *o2; /* Options */
ppd_choice_t *c1, *c2; /* Choices */
if (ppd == NULL)
return (0);
/*
* Clear all conflicts...
*/
conflicts = 0;
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
{
for (j = g->num_options, o1 = g->options; j > 0; j --, o1 ++)
o1->conflicted = 0;
for (j = g->num_subgroups, sg = g->subgroups; j > 0; j --, sg ++)
for (k = sg->num_options, o1 = sg->options; k > 0; k --, o1 ++)
o1->conflicted = 0;
}
/*
* Loop through all of the UI constraints and flag any options
* that conflict...
*/
for (i = ppd->num_consts, c = ppd->consts; i > 0; i --, c ++)
{
/*
* Grab pointers to the first option...
*/
o1 = ppdFindOption(ppd, c->option1);
if (o1 == NULL)
continue;
else if (c->choice1[0] != '\0')
{
/*
* This constraint maps to a specific choice.
*/
c1 = ppdFindChoice(o1, c->choice1);
}
else
{
/*
* This constraint applies to any choice for this option.
*/
for (j = o1->num_choices, c1 = o1->choices; j > 0; j --, c1 ++)
if (c1->marked)
break;
if (j == 0)
c1 = NULL;
}
/*
* Grab pointers to the second option...
*/
o2 = ppdFindOption(ppd, c->option2);
if (o2 == NULL)
continue;
else if (c->choice2[0] != '\0')
{
/*
* This constraint maps to a specific choice.
*/
c2 = ppdFindChoice(o2, c->choice2);
}
else
{
/*
* This constraint applies to any choice for this option.
*/
for (j = o2->num_choices, c2 = o2->choices; j > 0; j --, c2 ++)
if (c2->marked)
break;
if (j == 0)
c2 = NULL;
}
/*
* If both options are marked then there is a conflict...
*/
if (c1 != NULL && c1->marked &&
c2 != NULL && c2->marked)
{
conflicts ++;
o1->conflicted = 1;
o2->conflicted = 1;
}
}
/*
* Return the number of conflicts found...
*/
return (conflicts);
}
/*
* 'ppdFindChoice()' - Return a pointer to an option choice.
*/
ppd_choice_t * /* O - Choice pointer or NULL */
ppdFindChoice(ppd_option_t *o, /* I - Pointer to option */
char *choice) /* I - Name of choice */
{
int i; /* Looping var */
ppd_choice_t *c; /* Current choice */
if (o == NULL || choice == NULL)
return (NULL);
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
if (strcmp(c->choice, choice) == 0)
return (c);
return (NULL);
}
/*
* 'ppdFindMarkedChoice()' - Return the marked choice for the specified option.
*/
ppd_choice_t * /* O - Pointer to choice or NULL */
ppdFindMarkedChoice(ppd_file_t *ppd, /* I - PPD file */
char *option) /* I - Keyword/option name */
{
int i; /* Looping var */
ppd_option_t *o; /* Pointer to option */
ppd_choice_t *c; /* Pointer to choice */
if ((o = ppdFindOption(ppd, option)) == NULL)
return (NULL);
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
if (c->marked)
return (c);
return (NULL);
}
/*
* 'ppdFindOption()' - Return a pointer to the specified option.
*/
ppd_option_t * /* O - Pointer to option or NULL */
ppdFindOption(ppd_file_t *ppd, /* I - PPD file data */
char *option) /* I - Option/Keyword name */
{
int i, j, k; /* Looping vars */
ppd_option_t *o; /* Pointer to option */
ppd_group_t *g, /* Pointer to group */
*sg; /* Pointer to subgroup */
if (ppd == NULL || option == NULL)
return (NULL);
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
{
for (j = g->num_options, o = g->options; j > 0; j --, o ++)
if (strcmp(o->keyword, option) == 0)
return (o);
for (j = g->num_subgroups, sg = g->subgroups; j > 0; j --, sg ++)
for (k = sg->num_options, o = sg->options; k > 0; k --, o ++)
if (strcmp(o->keyword, option) == 0)
return (o);
}
return (NULL);
}
/*
* 'ppdIsMarked()' - Check to see if an option is marked...
*/
int /* O - Non-zero if option is marked */
ppdIsMarked(ppd_file_t *ppd, /* I - PPD file data */
char *option, /* I - Option/Keyword name */
char *choice) /* I - Choice name */
{
ppd_option_t *o; /* Option pointer */
ppd_choice_t *c; /* Choice pointer */
if (ppd == NULL)
return (0);
if ((o = ppdFindOption(ppd, option)) == NULL)
return (0);
if ((c = ppdFindChoice(o, choice)) == NULL)
return (0);
return (c->marked);
}
/*
* 'ppdMarkDefaults()' - Mark all default options in the PPD file.
*/
void
ppdMarkDefaults(ppd_file_t *ppd)/* I - PPD file record */
{
int i; /* Looping variables */
ppd_group_t *g; /* Current group */
ppd_option_t *o; /* PageSize option */
if (ppd == NULL)
return;
for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
ppd_defaults(g);
o = ppdFindOption(ppd, "PageSize");
for (i = 0; i < ppd->num_sizes; i ++)
ppd->sizes[i].marked = strcmp(ppd->sizes[i].name, o->defchoice) == 0;
}
/*
* 'ppdMarkOption()' - Mark an option in a PPD file.
*
* Notes:
*
* -1 is returned if the given option would conflict with any currently
* selected option.
*/
int /* O - Number of conflicts */
ppdMarkOption(ppd_file_t *ppd, /* I - PPD file record */
char *option, /* I - Keyword */
char *choice) /* I - Option name */
{
int i; /* Looping var */
ppd_option_t *o; /* Option pointer */
ppd_choice_t *c; /* Choice pointer */
if (ppd == NULL)
return (0);
if (strcmp(option, "PageSize") == 0 && strncmp(choice, "Custom.", 7) == 0)
{
/*
* Handle variable page sizes...
*/
ppdPageSize(ppd, choice);
choice = "Custom";
}
if ((o = ppdFindOption(ppd, option)) == NULL)
return (0);
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
if (strcmp(c->choice, choice) == 0)
c->marked = 1;
else if (o->ui != PPD_UI_PICKMANY)
c->marked = 0;
if (strcmp(option, "PageSize") == 0 || strcmp(option, "PageRegion") == 0)
{
/*
* Mark current page size...
*/
for (i = 0; i < ppd->num_sizes; i ++)
ppd->sizes[i].marked = strcmp(ppd->sizes[i].name, choice) == 0;
/*
* Unmark the current PageSize or PageRegion setting, as appropriate...
*/
if (strcmp(option, "PageSize") == 0)
{
o = ppdFindOption(ppd, "PageRegion");
for (i = 0; i < o->num_choices; i ++)
o->choices[i].marked = 0;
}
else
{
o = ppdFindOption(ppd, "PageSize");
for (i = 0; i < o->num_choices; i ++)
o->choices[i].marked = 0;
}
}
return (ppdConflicts(ppd));
}
/*
* 'ppd_defaults()' - Set the defaults for this group and all sub-groups.
*/
static void
ppd_defaults(ppd_group_t *g) /* I - Group to default */
{
int i; /* Looping var */
ppd_option_t *o; /* Current option */
ppd_group_t *sg; /* Current sub-group */
if (g == NULL)
return;
for (i = g->num_options, o = g->options; i > 0; i --, o ++)
if (strcmp(o->keyword, "PageRegion") != 0)
ppd_default(o);
for (i = g->num_subgroups, sg = g->subgroups; i > 0; i --, sg ++)
ppd_defaults(sg);
}
/*
* 'ppd_default()' - Set the default choice for an option.
*/
static void
ppd_default(ppd_option_t *o) /* I - Option to default */
{
int i; /* Looping var */
ppd_choice_t *c; /* Current choice */
if (o == NULL)
return;
for (i = o->num_choices, c = o->choices; i > 0; i --, c ++)
if (strcmp(c->choice, o->defchoice) == 0)
c->marked = 1;
else
c->marked = 0;
}
/*
* End of "$Id$".
*/
-611
Ver Arquivo
@@ -1,611 +0,0 @@
/*
* "$Id$"
*
* MIME database file routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* mimeDelete() - Delete (free) a MIME database.
* mimeMerge() - Merge a MIME database from disk with the current one.
* mimeNew() - Create a new, empty MIME database.
* load_types() - Load a xyz.types file...
* delete_rules() - Free all memory for the given rule tree.
* load_convs() - Load a xyz.convs file...
*
* Revision History:
*
* $Log: mime.c,v $
* Revision 1.12 1999/04/21 21:19:33 mike
* Changes for HP-UX.
*
* Revision 1.11 1999/04/21 19:31:29 mike
* Changed the directory header stuff to use the autoconf-recommended
* sequence of #ifdef's.
*
* Changed the language routines to look for the LOCALEDIR environment
* variable, and if it is not defined to use the LOCALEDIR string defined
* in config.h.
*
* Revision 1.10 1999/03/01 20:51:53 mike
* Code cleanup - removed extraneous semi-colons...
*
* Revision 1.9 1999/02/26 22:00:51 mike
* Added more debug statements.
*
* Fixed bugs in cupsPrintFile() - wasn't setting the IPP_TAG_MIMETYPE
* value tag for the file type.
*
* Updated conversion filter code to handle wildcards for super-type.
*
* Revision 1.8 1999/02/20 16:04:38 mike
* Updated mime.c to scan directories under WIN32.
*
* Fixed some compiler warnings under WIN32.
*
* Updated VC++ project files.
*
* Updated mime.types and mime.convs files for actual registered
* MIME type names.
*
* Revision 1.7 1999/02/05 17:40:53 mike
* Added IPP client read/write code.
*
* Added string functions missing from some UNIXs.
*
* Added option parsing functions.
*
* Added IPP convenience functions (not implemented yet).
*
* Updated source files to use local string.h as needed (for
* missing string functions)
*
* Revision 1.6 1999/02/01 22:08:39 mike
* Restored original directory-scanning functionality of mimeLoad().
*
* Revision 1.4 1999/01/27 18:31:56 mike
* Updated PPD routines to handle emulations and patch files.
*
* Added DSC comments to emit output as appropriate.
*
* Revision 1.3 1999/01/24 14:18:43 mike
* Check-in prior to CVS use.
*
* Revision 1.2 1998/08/06 14:38:38 mike
* Finished coding and testing for CUPS 1.0.
*
* Revision 1.1 1998/06/11 20:50:53 mike
* Initial revision
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "string.h"
#include "mime.h"
#if defined(WIN32) || defined(__EMX__)
# include <windows.h>
#elif HAVE_DIRENT_H
# include <dirent.h>
typedef struct dirent DIRENT;
# define NAMLEN(dirent) strlen((dirent)->d_name)
#else
# if HAVE_SYS_NDIR_H
# include <sys/ndir.h>
# endif
# if HAVE_SYS_DIR_H
# include <sys/dir.h>
# endif
# if HAVE_NDIR_H
# include <ndir.h>
# endif
typedef struct direct DIRENT;
# define NAMLEN(dirent) (dirent)->d_namlen
#endif
/*
* Local functions...
*/
static void load_types(mime_t *mime, char *filename);
static void load_convs(mime_t *mime, char *filename);
static void delete_rules(mime_magic_t *rules);
/*
* 'mimeDelete()' - Delete (free) a MIME database.
*/
void
mimeDelete(mime_t *mime) /* I - MIME database */
{
int i; /* Looping var */
if (mime == NULL)
return;
/*
* Loop through the file types and delete any rules...
*/
for (i = 0; i < mime->num_types; i ++)
{
delete_rules(mime->types[i]->rules);
free(mime->types[i]);
}
/*
* Free the types and filters arrays, and then the MIME database structure.
*/
free(mime->types);
free(mime->filters);
free(mime);
}
/*
* 'mimeMerge()' - Merge a MIME database from disk with the current one.
*/
mime_t * /* O - Updated MIME database */
mimeMerge(mime_t *mime, /* I - MIME database to add to */
char *pathname) /* I - Directory to load */
{
#if defined(WIN32) || defined(__EMX__)
HANDLE dir; /* Directory handle */
WIN32_FIND_DATA dent; /* Directory entry */
char filename[1024], /* Full filename of types/converts file */
*pathsep; /* Last character in path */
/*
* First open the directory specified by pathname... Return NULL if nothing
* was read or if the pathname is NULL...
*/
if (pathname == NULL)
return (NULL);
strcpy(filename, pathname);
pathsep = filename + strlen(filename);
if (pathsep == filename ||
(pathsep[-1] != '/' && pathsep[-1] != '\\'))
{
strcpy(pathsep, "/");
pathsep ++;
}
strcpy(pathsep, "*.types");
if ((dir = FindFirstFile(filename, &dent)) == 0)
return (NULL);
/*
* If "mime" is NULL, make a new, blank database...
*/
if (mime == NULL)
if ((mime = mimeNew()) == NULL)
return (NULL);
/*
* Read all the .types files...
*/
do
{
/*
* Load a mime.types file...
*/
strcpy(pathsep, dent.cFileName);
load_types(mime, filename);
}
while (FindNextFile(dir, &dent));
FindClose(dir);
/*
* Read all the .convs files...
*/
strcpy(pathsep, "*.convs");
if ((dir = FindFirstFile(filename, &dent)) == 0)
return (mime);
do
{
/*
* Load a mime.convs file...
*/
strcpy(pathsep, dent.cFileName);
load_convs(mime, filename);
}
while (FindNextFile(dir, &dent));
FindClose(dir);
return (mime);
#else
DIR *dir; /* Directory */
DIRENT *dent; /* Directory entry */
char filename[1024]; /* Full filename of types/converts file */
/*
* First open the directory specified by pathname... Return NULL if nothing
* was read or if the pathname is NULL...
*/
if (pathname == NULL)
return (NULL);
if ((dir = opendir(pathname)) == NULL)
return (NULL);
/*
* If "mime" is NULL, make a new, blank database...
*/
if (mime == NULL)
if ((mime = mimeNew()) == NULL)
return (NULL);
/*
* Read all the .types files...
*/
while ((dent = readdir(dir)) != NULL)
{
if (NAMLEN(dent) > 6 &&
strcmp(dent->d_name + NAMLEN(dent) - 6, ".types") == 0)
{
/*
* Load a mime.types file...
*/
sprintf(filename, "%s/%s", pathname, dent->d_name);
load_types(mime, filename);
}
}
rewinddir(dir);
/*
* Read all the .convs files...
*/
while ((dent = readdir(dir)) != NULL)
{
if (NAMLEN(dent) > 6 &&
strcmp(dent->d_name + NAMLEN(dent) - 6, ".convs") == 0)
{
/*
* Load a mime.convs file...
*/
sprintf(filename, "%s/%s", pathname, dent->d_name);
load_convs(mime, filename);
}
}
closedir(dir);
return (mime);
#endif /* WIN32 || __EMX__ */
}
/*
* 'mimeNew()' - Create a new, empty MIME database.
*/
mime_t * /* O - MIME database */
mimeNew(void)
{
return ((mime_t *)calloc(1, sizeof(mime_t)));
}
/*
* 'load_types()' - Load a xyz.types file...
*/
static void
load_types(mime_t *mime, /* I - MIME database */
char *filename) /* I - Types file to load */
{
FILE *fp; /* Types file */
int linelen; /* Length of line */
char line[65536], /* Input line from file */
*lineptr, /* Current position in line */
super[MIME_MAX_SUPER], /* Super-type name */
type[MIME_MAX_TYPE], /* Type name */
*temp; /* Temporary pointer */
mime_type_t *typeptr; /* New MIME type */
/*
* First try to open the file...
*/
if ((fp = fopen(filename, "r")) == NULL)
return;
/*
* Then read each line from the file, skipping any comments in the file...
*/
while (fgets(line, sizeof(line), fp) != NULL)
{
linelen = strlen(line);
/*
* While the last character in the line is a backslash, continue on to the
* next line (and the next, etc.)
*/
if (line[linelen - 1] == '\n')
{
line[linelen - 1] = '\0';
linelen --;
}
while (line[linelen - 1] == '\\')
{
linelen --;
if (fgets(line + linelen, sizeof(line) - linelen, fp) == NULL)
line[linelen] = '\0';
else
{
linelen += strlen(line + linelen);
if (line[linelen - 1] == '\n')
{
line[linelen - 1] = '\0';
linelen --;
}
}
}
/*
* Skip blank lines and lines starting with a #...
*/
if (line[0] == '\n' || line[0] == '#')
continue;
/*
* Extract the super-type and type names from the beginning of the line.
*/
lineptr = line;
temp = super;
while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' &&
(temp - super + 1) < MIME_MAX_SUPER)
*temp++ = tolower(*lineptr++);
*temp = '\0';
if (*lineptr != '/')
continue;
lineptr ++;
temp = type;
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' &&
*lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE)
*temp++ = tolower(*lineptr++);
*temp = '\0';
/*
* Add the type and rules to the MIME database...
*/
typeptr = mimeAddType(mime, super, type);
mimeAddTypeRule(typeptr, lineptr);
}
}
/*
* 'load_convs()' - Load a xyz.convs file...
*/
static void
load_convs(mime_t *mime, /* I - MIME database */
char *filename) /* I - Convs file to load */
{
int i; /* Looping var */
FILE *fp; /* Convs file */
char line[1024], /* Input line from file */
*lineptr, /* Current position in line */
super[MIME_MAX_SUPER], /* Super-type name */
type[MIME_MAX_TYPE], /* Type name */
*temp, /* Temporary pointer */
*filter; /* Filter program */
mime_type_t **temptype, /* MIME type looping var */
*dsttype; /* Destination MIME type */
int cost; /* Cost of filter */
/*
* First try to open the file...
*/
if ((fp = fopen(filename, "r")) == NULL)
return;
/*
* Then read each line from the file, skipping any comments in the file...
*/
while (fgets(line, sizeof(line), fp) != NULL)
{
/*
* Skip blank lines and lines starting with a #...
*/
if (line[0] == '\n' || line[0] == '#')
continue;
/*
* Extract the destination super-type and type names from the middle of
* the line.
*/
lineptr = line;
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\0')
lineptr ++;
while (*lineptr == ' ' || *lineptr == '\t')
lineptr ++;
temp = super;
while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' &&
(temp - super + 1) < MIME_MAX_SUPER)
*temp++ = tolower(*lineptr++);
*temp = '\0';
if (*lineptr != '/')
continue;
lineptr ++;
temp = type;
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' &&
*lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE)
*temp++ = tolower(*lineptr++);
*temp = '\0';
if (*lineptr == '\0' || *lineptr == '\n')
continue;
if ((dsttype = mimeType(mime, super, type)) == NULL)
continue;
/*
* Then get the cost and filter program...
*/
while (*lineptr == ' ' || *lineptr == '\t')
lineptr ++;
if (*lineptr < '0' || *lineptr > '9')
continue;
cost = atoi(lineptr);
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\0')
lineptr ++;
while (*lineptr == ' ' || *lineptr == '\t')
lineptr ++;
if (*lineptr == '\0' || *lineptr == '\n')
continue;
filter = lineptr;
if (filter[strlen(filter) - 1] == '\n')
filter[strlen(filter) - 1] = '\0';
/*
* Finally, get the source super-type and type names from the beginning of
* the line. We do it here so we can support wildcards...
*/
lineptr = line;
temp = super;
while (*lineptr != '/' && *lineptr != '\n' && *lineptr != '\0' &&
(temp - super + 1) < MIME_MAX_SUPER)
*temp++ = tolower(*lineptr++);
*temp = '\0';
if (*lineptr != '/')
continue;
lineptr ++;
temp = type;
while (*lineptr != ' ' && *lineptr != '\t' && *lineptr != '\n' &&
*lineptr != '\0' && (temp - type + 1) < MIME_MAX_TYPE)
*temp++ = tolower(*lineptr++);
*temp = '\0';
/*
* Add the filter to the MIME database, supporting wildcards as needed...
*/
for (temptype = mime->types, i = 0; i < mime->num_types; i ++, temptype ++)
if ((super[0] == '*' || strcmp((*temptype)->super, super) == 0) &&
(type[0] == '*' || strcmp((*temptype)->type, type) == 0))
mimeAddFilter(mime, *temptype, dsttype, cost, filter);
}
}
/*
* 'delete_rules()' - Free all memory for the given rule tree.
*/
static void
delete_rules(mime_magic_t *rules) /* I - Rules to free */
{
mime_magic_t *next; /* Next rule to free */
/*
* Free the rules list, descending recursively to free any child rules.
*/
while (rules != NULL)
{
next = rules->next;
if (rules->child != NULL)
delete_rules(rules->child);
free(rules);
rules = next;
}
}
/*
* End of "$Id$".
*/
-137
Ver Arquivo
@@ -1,137 +0,0 @@
/*
* "$Id$"
*
* MIME type/conversion database definitions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
#ifndef _MIME_H_
# define _MIME_H_
/*
* C++ magic...
*/
# ifdef _cplusplus
extern "C" {
# endif /* _cplusplus */
/*
* Constants...
*/
# define MIME_MAX_SUPER 16 /* Maximum size of supertype name */
# define MIME_MAX_TYPE 32 /* Maximum size of type name */
# define MIME_MAX_FILTER 256 /* Maximum size of filter pathname */
# define MIME_MAX_BUFFER 8192 /* Maximum size of file buffer */
/*
* Types/structures...
*/
typedef enum
{
MIME_MAGIC_NOP, /* No operation */
MIME_MAGIC_AND, /* Logical AND of all children */
MIME_MAGIC_OR, /* Logical OR of all children */
MIME_MAGIC_MATCH, /* Filename match */
MIME_MAGIC_ASCII, /* ASCII characters in range */
MIME_MAGIC_PRINTABLE, /* Printable characters (32-255) in range */
MIME_MAGIC_STRING, /* String matches */
MIME_MAGIC_CHAR, /* Character/byte matches */
MIME_MAGIC_SHORT, /* Short/16-bit word matches */
MIME_MAGIC_INT, /* Integer/32-bit word matches */
MIME_MAGIC_LOCALE /* Current locale matches string */
} mime_op_t;
typedef struct mime_magic_str /**** MIME Magic Data ****/
{
struct mime_magic_str *prev, /* Previous rule */
*next, /* Next rule */
*parent, /* Parent rules */
*child; /* Child rules */
short op, /* Operation code (see above) */
invert; /* Invert the result */
int offset, /* Offset in file */
length; /* Length of data */
union
{
char matchv[64]; /* Match value */
char localev[64]; /* Locale value */
char stringv[64]; /* String value */
char charv; /* Byte value */
short shortv; /* Short value */
int intv; /* Integer value */
} value;
} mime_magic_t;
typedef struct /**** MIME Type Data ****/
{
char super[MIME_MAX_SUPER], /* Super-type name ("image", "application", etc.) */
type[MIME_MAX_TYPE]; /* Type name ("png", "postscript", etc.) */
mime_magic_t *rules; /* Rules used to detect this type */
} mime_type_t;
typedef struct /**** MIME Conversion Filter Data ****/
{
mime_type_t *src, /* Source type */
*dst; /* Destination type */
int cost; /* Relative cost */
char filter[MIME_MAX_FILTER];/* Filter program to use */
} mime_filter_t;
typedef struct /**** MIME Database ****/
{
int num_types; /* Number of file types */
mime_type_t **types; /* File types */
int num_filters; /* Number of type conversion filters */
mime_filter_t *filters; /* Type conversion filters */
} mime_t;
/*
* Functions...
*/
extern void mimeDelete(mime_t *mime);
#define mimeLoad(pathname) mimeMerge((mime_t *)0, (pathname));
extern mime_t *mimeMerge(mime_t *mime, char *pathname);
extern mime_t *mimeNew(void);
extern mime_type_t *mimeAddType(mime_t *mime, char *super, char *type);
extern int mimeAddTypeRule(mime_type_t *mt, char *rule);
extern mime_type_t *mimeFileType(mime_t *mime, char *pathname);
extern mime_type_t *mimeType(mime_t *mime, char *super, char *type);
extern mime_filter_t *mimeAddFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst,
int cost, char *filter);
extern mime_filter_t *mimeFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst,
int *num_filters);
# ifdef _cplusplus
}
# endif /* _cplusplus */
#endif /* !_MIME_H_ */
/*
* End of "$Id$".
*/
-330
Ver Arquivo
@@ -1,330 +0,0 @@
/*
* "$Id$"
*
* Option routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* cupsAddOption() - Add an option to an option array.
* cupsFreeOptions() - Free all memory used by options.
* cupsGetOption() - Get an option value.
* cupsParseOptions() - Parse options from a command-line argument.
* cupsMarkOptions() - Mark command-line options in a PPD file.
*/
/*
* Include necessary headers...
*/
#include "cups.h"
#include <stdlib.h>
#include <ctype.h>
#include "string.h"
/*
* 'cupsAddOption()' - Add an option to an option array.
*/
int /* O - Number of options */
cupsAddOption(char *name, /* I - Name of option */
char *value, /* I - Value of option */
int num_options, /* I - Number of options */
cups_option_t **options) /* IO - Pointer to options */
{
int i; /* Looping var */
cups_option_t *temp; /* Pointer to new option */
if (name == NULL || value == NULL || options == NULL)
return (0);
/*
* Look for an existing option with the same name...
*/
for (i = 0, temp = *options; i < num_options; i ++, temp ++)
if (strcmp(temp->name, name) == 0)
break;
if (i >= num_options)
{
/*
* No matching option name...
*/
if (num_options == 0)
temp = (cups_option_t *)malloc(sizeof(cups_option_t));
else
temp = (cups_option_t *)realloc(*options, sizeof(cups_option_t) *
(num_options + 1));
if (temp == NULL)
return (0);
*options = temp;
temp += num_options;
temp->name = strdup(name);
num_options ++;
}
else
{
/*
* Match found; free the old value...
*/
free(temp->value);
}
temp->value = strdup(value);
return (num_options);
}
/*
* 'cupsFreeOptions()' - Free all memory used by options.
*/
void
cupsFreeOptions(int num_options, /* I - Number of options */
cups_option_t *options) /* I - Pointer to options */
{
int i; /* Looping var */
if (num_options == 0 || options == NULL)
return;
for (i = 0; i < num_options; i ++)
{
free(options[i].name);
free(options[i].value);
}
free(options);
}
/*
* 'cupsGetOption()' - Get an option value.
*/
char * /* O - Option value or NULL */
cupsGetOption(char *name, /* I - Name of option */
int num_options,/* I - Number of options */
cups_option_t *options) /* I - Options */
{
int i; /* Looping var */
if (name == NULL || num_options == 0 || options == NULL)
return (NULL);
for (i = 0; i < num_options; i ++)
if (strcmp(options[i].name, name) == 0)
return (options[i].value);
return (NULL);
}
/*
* 'cupsParseOptions()' - Parse options from a command-line argument.
*/
int /* O - Number of options found */
cupsParseOptions(char *arg, /* I - Argument to parse */
int num_options, /* I - Number of options */
cups_option_t **options) /* O - Options found */
{
char *copyarg, /* Copy of input string */
*ptr, /* Pointer into string */
*name, /* Pointer to name */
*value; /* Pointer to value */
if (arg == NULL || options == NULL)
return (0);
/*
* Make a copy of the argument string and then divide it up...
*/
copyarg = strdup(arg);
ptr = copyarg;
while (*ptr != '\0')
{
/*
* Get the name up to a SPACE, =, or end-of-string...
*/
name = ptr;
while (!isspace(*ptr) && *ptr != '=' && *ptr != '\0')
ptr ++;
/*
* Skip trailing spaces...
*/
while (isspace(*ptr))
*ptr++ = '\0';
if (*ptr != '=')
{
/*
* Start of another option...
*/
num_options = cupsAddOption(name, "", num_options, options);
continue;
}
/*
* Remove = and parse the value...
*/
*ptr++ = '\0';
if (*ptr == '\'')
{
/*
* Quoted string constant...
*/
ptr ++;
value = ptr;
while (*ptr != '\'' && *ptr != '\0')
ptr ++;
if (*ptr != '\0')
*ptr++ = '\0';
}
else if (*ptr == '\"')
{
/*
* Double-quoted string constant...
*/
ptr ++;
value = ptr;
while (*ptr != '\"' && *ptr != '\0')
ptr ++;
if (*ptr != '\0')
*ptr++ = '\0';
}
else
{
/*
* Normal space-delimited string...
*/
value = ptr;
while (!isspace(*ptr) && *ptr != '\0')
ptr ++;
while (isspace(*ptr))
*ptr++ = '\0';
}
/*
* Add the string value...
*/
num_options = cupsAddOption(name, value, num_options, options);
}
/*
* Free the copy of the argument we made and return the number of options
* found.
*/
free(copyarg);
return (num_options);
}
/*
* 'cupsMarkOptions()' - Mark command-line options in a PPD file.
*/
int /* O - 1 if conflicting */
cupsMarkOptions(ppd_file_t *ppd, /* I - PPD file */
int num_options, /* I - Number of options */
cups_option_t *options) /* I - Options */
{
int i; /* Looping var */
int conflict; /* Option conflicts */
conflict = 0;
for (i = num_options; i > 0; i --, options ++)
if (strcmp(options->name, "media") == 0)
{
if (ppdMarkOption(ppd, "PageSize", options->value))
conflict = 1;
if (ppdMarkOption(ppd, "InputSlot", options->value))
conflict = 1;
if (ppdMarkOption(ppd, "MediaType", options->value))
conflict = 1;
}
else if (strcmp(options->name, "sides") == 0)
{
if (strcmp(options->value, "one-sided") == 0)
{
if (ppdMarkOption(ppd, "Duplex", "None"))
conflict = 1;
}
else if (strcmp(options->value, "two-sided-long-edge") == 0)
{
if (ppdMarkOption(ppd, "Duplex", "NoTumble"))
conflict = 1;
}
else if (strcmp(options->value, "two-sided-short-edge") == 0)
{
if (ppdMarkOption(ppd, "Duplex", "Tumble"))
conflict = 1;
}
}
else if (strcmp(options->name, "resolution") == 0)
{
if (ppdMarkOption(ppd, "Resolution", options->value))
conflict = 1;
if (ppdMarkOption(ppd, "JCLResolution", options->value))
conflict = 1;
}
else if (ppdMarkOption(ppd, options->name, options->value))
conflict = 1;
return (conflict);
}
/*
* End of "$Id$".
*/
-179
Ver Arquivo
@@ -1,179 +0,0 @@
/*
* "$Id$"
*
* Page size functions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* PostScript is a trademark of Adobe Systems, Inc.
*
* Contents:
*
* ppdPageSize() - Get the page size record for the given size.
* ppdPageWidth() - Get the page width for the given size.
* ppdPageLength() - Get the page length for the given size.
*/
/*
* Include necessary headers...
*/
#include "ppd.h"
#include "string.h"
#include <ctype.h>
/*
* 'ppdPageSize()' - Get the page size record for the given size.
*/
ppd_size_t * /* O - Size record for page or NULL */
ppdPageSize(ppd_file_t *ppd, /* I - PPD file record */
char *name) /* I - Size name */
{
int i; /* Looping var */
float w, l; /* Width and length of page */
char units[255]; /* Page size units... */
if (ppd == NULL)
return (NULL);
if (name != NULL)
{
if (strncmp(name, "Custom.", 7) == 0 &&
strcmp(ppd->sizes[0].name, "Custom") == 0)
{
/*
* Variable size; size name can be one of the following:
*
* Custom.WIDTHxLENGTHin - Size in inches
* Custom.WIDTHxLENGTHcm - Size in centimeters
* Custom.WIDTHxLENGTHmm - Size in millimeters
* Custom.WIDTHxLENGTH[pt] - Size in points
*/
units[0] = '\0';
if (sscanf(name + 7, "%fx%f%s", &w, &l, units) < 2)
return (NULL);
if (strcasecmp(units, "in") == 0)
{
ppd->sizes[0].width = w * 72.0;
ppd->sizes[0].length = l * 72.0;
ppd->sizes[0].left = ppd->custom_margins[0];
ppd->sizes[0].bottom = ppd->custom_margins[1];
ppd->sizes[0].right = w * 72.0 - ppd->custom_margins[2];
ppd->sizes[0].top = l * 72.0 - ppd->custom_margins[3];
}
else if (strcasecmp(units, "cm") == 0)
{
ppd->sizes[0].width = w * 2.54 * 72.0;
ppd->sizes[0].length = l * 2.54 * 72.0;
ppd->sizes[0].left = ppd->custom_margins[0];
ppd->sizes[0].bottom = ppd->custom_margins[1];
ppd->sizes[0].right = w * 2.54 * 72.0 - ppd->custom_margins[2];
ppd->sizes[0].top = l * 2.54 * 72.0 - ppd->custom_margins[3];
}
else if (strcasecmp(units, "mm") == 0)
{
ppd->sizes[0].width = w * 25.4 * 72.0;
ppd->sizes[0].length = l * 25.4 * 72.0;
ppd->sizes[0].left = ppd->custom_margins[0];
ppd->sizes[0].bottom = ppd->custom_margins[1];
ppd->sizes[0].right = w * 25.4 * 72.0 - ppd->custom_margins[2];
ppd->sizes[0].top = l * 25.4 * 72.0 - ppd->custom_margins[3];
}
else
{
ppd->sizes[0].width = w;
ppd->sizes[0].length = l;
ppd->sizes[0].left = ppd->custom_margins[0];
ppd->sizes[0].bottom = ppd->custom_margins[1];
ppd->sizes[0].right = w - ppd->custom_margins[2];
ppd->sizes[0].top = l - ppd->custom_margins[3];
}
return (ppd->sizes);
}
else
{
/*
* Lookup by name...
*/
for (i = 0; i < ppd->num_sizes; i ++)
if (strcmp(name, ppd->sizes[i].name) == 0)
return (ppd->sizes + i);
}
}
else
{
/*
* Find default...
*/
for (i = 0; i < ppd->num_sizes; i ++)
if (ppd->sizes[i].marked)
return (ppd->sizes + i);
}
return (NULL);
}
/*
* 'ppdPageWidth()' - Get the page width for the given size.
*/
float /* O - Width of page in points or 0.0 */
ppdPageWidth(ppd_file_t *ppd, /* I - PPD file record */
char *name) /* I - Size name */
{
ppd_size_t *size; /* Page size */
if ((size = ppdPageSize(ppd, name)) == NULL)
return (0.0);
else
return (size->width);
}
/*
* 'ppdPageLength()' - Get the page length for the given size.
*/
float /* O - Length of page in points or 0.0 */
ppdPageLength(ppd_file_t *ppd, /* I - PPD file */
char *name) /* I - Size name */
{
ppd_size_t *size; /* Page size */
if ((size = ppdPageSize(ppd, name)) == NULL)
return (0.0);
else
return (size->length);
}
/*
* End of "$Id$".
*/
-1686
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-238
Ver Arquivo
@@ -1,238 +0,0 @@
/*
* "$Id$"
*
* PostScript Printer Description definitions for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* PostScript is a trademark of Adobe Systems, Inc.
*
* This code and any derivative of it may be used and distributed
* freely under the terms of the GNU General Public License when
* used with GNU Ghostscript or its derivatives. Use of the code
* (or any derivative of it) with software other than GNU
* GhostScript (or its derivatives) is governed by the CUPS license
* agreement.
*/
#ifndef _CUPS_PPD_H_
# define _CUPS_PPD_H_
/*
* Include necessary headers...
*/
# include <stdio.h>
/*
* C++ magic...
*/
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* PPD version...
*/
# define PPD_VERSION 4.3 /* Kept in sync with Adobe version number */
/*
* Types and structures...
*/
typedef enum /**** UI types ****/
{
PPD_UI_BOOLEAN, /* True or False option */
PPD_UI_PICKONE, /* Pick one from a list */
PPD_UI_PICKMANY /* Pick zero or more from a list */
} ppd_ui_t;
typedef enum /**** Order dependency sections ****/
{
PPD_ORDER_ANY, /* Option code can be anywhere in the file */
PPD_ORDER_DOCUMENT, /* ... must be in the DocumentSetup section */
PPD_ORDER_EXIT, /* ... must be sent prior to the document */
PPD_ORDER_JCL, /* ... must be sent as a JCL command */
PPD_ORDER_PAGE, /* ... must be in the PageSetup section */
PPD_ORDER_PROLOG /* ... must be in the Prolog section */
} ppd_section_t;
typedef enum /**** Colorspaces ****/
{
PPD_CS_CMYK = -4, /* CMYK colorspace */
PPD_CS_CMY, /* CMY colorspace */
PPD_CS_GRAY = 1, /* Grayscale colorspace */
PPD_CS_RGB = 3, /* RGB colorspace */
PPD_CS_RGBK, /* RGBK (K = gray) colorspace */
PPD_CS_N /* DeviceN colorspace */
} ppd_cs_t;
typedef struct /**** Option choices ****/
{
char marked, /* 0 if not selected, 1 otherwise */
choice[41], /* Computer-readable option name */
text[81], /* Human-readable option name */
*code; /* Code to send for this option */
void *option; /* Pointer to parent option structure */
} ppd_choice_t;
typedef struct /**** Options ****/
{
char conflicted, /* 0 if no conflicts exist, 1 otherwise */
keyword[41], /* Option keyword name ("PageSize", etc.) */
defchoice[41], /* Default option choice */
text[81]; /* Human-readable text */
ppd_ui_t ui; /* Type of UI option */
ppd_section_t section; /* Section for command */
float order; /* Order number */
int num_choices; /* Number of option choices */
ppd_choice_t *choices; /* Option choices */
} ppd_option_t;
typedef struct ppd_group_str /**** Groups ****/
{
char text[81]; /* Human-readable group name */
int num_options; /* Number of options */
ppd_option_t *options; /* Options */
int num_subgroups; /* Number of sub-groups */
struct ppd_group_str *subgroups;
/* Sub-groups (max depth = 1) */
} ppd_group_t;
typedef struct /**** Constraints ****/
{
char option1[41], /* First keyword */
choice1[41], /* First option/choice (blank for all) */
option2[41], /* Second keyword */
choice2[41]; /* Second option/choice (blank for all) */
} ppd_const_t;
typedef struct /**** Page Sizes ****/
{
int marked; /* Page size selected? */
char name[41]; /* Media size option */
float width, /* Width of media in points */
length, /* Length of media in points */
left, /* Left printable margin in points */
bottom, /* Bottom printable margin in points */
right, /* Right printable margin in points */
top; /* Top printable margin in points */
} ppd_size_t;
typedef struct /**** Emulators ****/
{
char name[41], /* Emulator name */
*start, /* Code to switch to this emulation */
*stop; /* Code to stop this emulation */
} ppd_emul_t;
typedef struct /**** sRGB Color Profiles ****/
{
char resolution[41], /* Resolution or "-" */
media_type[41]; /* Media type of "-" */
float density, /* Ink density to use */
matrix[3][3]; /* Transform matrix */
} ppd_profile_t;
typedef struct /**** Files ****/
{
int language_level, /* Language level of device */
color_device, /* 1 = color device, 0 = grayscale */
variable_sizes, /* 1 = supports variable sizes, 0 = doesn't */
accurate_screens,/* 1 = supports accurate screens, 0 = not */
contone_only, /* 1 = continuous tone only, 0 = not */
landscape, /* -90 or 90 */
model_number, /* Device-specific model number */
manual_copies; /* 1 = Copies done manually, 0 = hardware */
ppd_cs_t colorspace; /* Default colorspace */
char *patches; /* Patch commands to be sent to printer */
int num_emulations; /* Number of emulations supported */
ppd_emul_t *emulations; /* Emulations and the code to invoke them */
char *jcl_begin, /* Start JCL commands */
*jcl_ps, /* Enter PostScript interpreter */
*jcl_end, /* End JCL commands */
*lang_encoding, /* Language encoding */
*lang_version, /* Language version (English, Spanish, etc.) */
*modelname, /* Model name (general) */
*ttrasterizer, /* Truetype rasterizer */
*manufacturer, /* Manufacturer name */
*product, /* Product name (from PS RIP/interpreter) */
*nickname, /* Nickname (specific) */
*shortnickname; /* Short version of nickname */
int num_groups; /* Number of UI groups */
ppd_group_t *groups; /* UI groups */
int num_sizes; /* Number of page sizes */
ppd_size_t *sizes; /* Page sizes */
float custom_min[2], /* Minimum variable page size */
custom_max[2], /* Maximum variable page size */
custom_margins[4];/* Margins around page */
int num_consts; /* Number of UI/Non-UI constraints */
ppd_const_t *consts; /* UI/Non-UI constraints */
int num_fonts; /* Number of pre-loaded fonts */
char **fonts; /* Pre-loaded fonts */
int num_profiles; /* Number of sRGB color profiles */
ppd_profile_t *profiles; /* sRGB color profiles */
int num_filters; /* Number of filters */
char **filters; /* Filter strings... */
} ppd_file_t;
/*
* Prototypes...
*/
extern void ppdClose(ppd_file_t *ppd);
extern int ppdConflicts(ppd_file_t *ppd);
extern int ppdEmit(ppd_file_t *ppd, FILE *fp,
ppd_section_t section);
extern int ppdEmitFd(ppd_file_t *ppd, int fd,
ppd_section_t section);
extern int ppdIsMarked(ppd_file_t *ppd, char *keyword,
char *option);
extern void ppdMarkDefaults(ppd_file_t *ppd);
extern int ppdMarkOption(ppd_file_t *ppd, char *keyword,
char *option);
extern ppd_choice_t *ppdFindChoice(ppd_option_t *o, char *option);
extern ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, char *keyword);
extern ppd_option_t *ppdFindOption(ppd_file_t *ppd, char *keyword);
extern ppd_file_t *ppdOpen(FILE *fp);
extern ppd_file_t *ppdOpenFd(int fd);
extern ppd_file_t *ppdOpenFile(char *filename);
extern float ppdPageLength(ppd_file_t *ppd, char *name);
extern ppd_size_t *ppdPageSize(ppd_file_t *ppd, char *name);
extern float ppdPageWidth(ppd_file_t *ppd, char *name);
/*
* C++ magic...
*/
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_PPD_H_ */
/*
* End of "$Id$".
*/
-252
Ver Arquivo
@@ -1,252 +0,0 @@
/*
* "$Id$"
*
* Raster file routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights for the CUPS Raster source
* files are outlined in the GNU Library General Public License, located
* in the "pstoraster" directory. If this file is missing or damaged
* please contact Easy Software Products at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* This code and any derivative of it may be used and distributed
* freely under the terms of the GNU General Public License when
* used with GNU Ghostscript or its derivatives. Use of the code
* (or any derivative of it) with software other than GNU
* GhostScript (or its derivatives) is governed by the CUPS license
* agreement.
*
* Contents:
*
* cupsRasterClose() - Close a raster stream.
* cupsRasterOpen() - Open a raster stream.
* cupsRasterReadHeader() - Read a raster page header.
* cupsRasterReadPixels() - Read raster pixels.
* cupsRasterWriteHeader() - Write a raster page header.
* cupsRasterWritePixels() - Write raster pixels.
*/
/*
* Include necessary headers...
*/
#include "raster.h"
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
#else
# include <unistd.h>
#endif /* WIN32 || __EMX__ */
/*
* 'cupsRasterClose()' - Close a raster stream.
*/
void
cupsRasterClose(cups_raster_t *r) /* I - Stream to close */
{
if (r != NULL)
free(r);
}
/*
* 'cupsRasterOpen()' - Open a raster stream.
*/
cups_raster_t * /* O - New stream */
cupsRasterOpen(int fd, /* I - File descriptor */
cups_mode_t mode) /* I - Mode */
{
cups_raster_t *r; /* New stream */
if ((r = calloc(sizeof(cups_raster_t), 1)) == NULL)
return (NULL);
r->fd = fd;
r->mode = mode;
if (mode == CUPS_RASTER_READ)
{
/*
* Open for read - get sync word...
*/
if (read(fd, &(r->sync), sizeof(r->sync)) < sizeof(r->sync))
{
free(r);
return (NULL);
}
if (r->sync != CUPS_RASTER_SYNC &&
r->sync != CUPS_RASTER_REVSYNC)
{
free(r);
return (NULL);
}
}
else
{
/*
* Open for write - put sync word...
*/
r->sync = CUPS_RASTER_SYNC;
if (write(fd, &(r->sync), sizeof(r->sync)) < sizeof(r->sync))
{
free(r);
return (NULL);
}
}
return (r);
}
/*
* 'cupsRasterReadHeader()' - Read a raster page header.
*/
unsigned /* O - 1 on success, 0 on fail */
cupsRasterReadHeader(cups_raster_t *r, /* I - Raster stream */
cups_page_header_t *h) /* I - Pointer to header data */
{
int len; /* Number of words to swap */
union swap_s /* Swapping structure */
{
unsigned char b[4];
unsigned v;
} *s;
if (r == NULL || r->mode != CUPS_RASTER_READ)
return (0);
if (cupsRasterReadPixels(r, (unsigned char *)h, sizeof(cups_page_header_t)) <
sizeof(cups_page_header_t))
return (0);
if (r->sync == CUPS_RASTER_REVSYNC)
for (len = (sizeof(cups_page_header_t) - 256) / 4,
s = (union swap_s *)&(h->AdvanceDistance);
len > 0;
len --, s ++)
s->v = (((((s->b[3] << 8) | s->b[2]) << 8) | s->b[1]) << 8) | s->b[0];
return (1);
}
/*
* 'cupsRasterReadPixels()' - Read raster pixels.
*/
unsigned /* O - Number of bytes read */
cupsRasterReadPixels(cups_raster_t *r, /* I - Raster stream */
unsigned char *p, /* I - Pointer to pixel buffer */
unsigned len) /* I - Number of bytes to read */
{
int bytes; /* Bytes read */
unsigned remaining; /* Bytes remaining */
if (r == NULL || r->mode != CUPS_RASTER_READ)
return (0);
remaining = len;
while (remaining > 0)
{
bytes = read(r->fd, p, remaining);
if (bytes <= 0)
{
if (errno != EAGAIN && errno != EINTR)
return (0);
else
continue;
}
remaining -= bytes;
p += bytes;
}
return (len);
}
/*
* 'cupsRasterWriteHeader()' - Write a raster page header.
*/
unsigned
cupsRasterWriteHeader(cups_raster_t *r,
cups_page_header_t *h)
{
if (r == NULL || r->mode != CUPS_RASTER_WRITE)
return (0);
return (cupsRasterWritePixels(r, (unsigned char *)h,
sizeof(cups_page_header_t)) ==
sizeof(cups_page_header_t));
}
/*
* 'cupsRasterWritePixels()' - Write raster pixels.
*/
unsigned /* O - Number of bytes written */
cupsRasterWritePixels(cups_raster_t *r, /* I - Raster stream */
unsigned char *p, /* I - Bytes to write */
unsigned len)/* I - Number of bytes to write */
{
int bytes; /* Bytes read */
unsigned remaining; /* Bytes remaining */
if (r == NULL || r->mode != CUPS_RASTER_WRITE)
return (0);
remaining = len;
while (remaining > 0)
{
bytes = write(r->fd, p, remaining);
if (bytes <= 0)
{
if (errno != EAGAIN && errno != EINTR)
return (0);
else
continue;
}
remaining -= bytes;
p += bytes;
}
return (len);
}
/*
* End of "$Id$".
*/
-233
Ver Arquivo
@@ -1,233 +0,0 @@
/*
* "$Id$"
*
* Raster file definitions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights for the CUPS Raster source
* files are outlined in the GNU Library General Public License, located
* in the "pstoraster" directory. If this file is missing or damaged
* please contact Easy Software Products at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* This code and any derivative of it may be used and distributed
* freely under the terms of the GNU General Public License when
* used with GNU Ghostscript or its derivatives. Use of the code
* (or any derivative of it) with software other than GNU
* GhostScript (or its derivatives) is governed by the CUPS license
* agreement.
*/
#ifndef _CUPS_RASTER_H_
# define _CUPS_RASTER_H_
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
/*
* Every non-PostScript printer driver that supports raster images should
* use the application/vnd.cups-raster image file format. Since both the
* PostScript RIP (pstoraster, based on GNU Ghostscript 4.03) and Image RIP
* (imagetoraster, located in the filter directory) use it, using this format
* saves you a lot of work. Also, the PostScript RIP passes any printer
* options that are in a PS file to your driver this way as well...
*/
/*
* Constants...
*/
# define CUPS_RASTER_SYNC 0x52615374 /* RaSt */
# define CUPS_RASTER_REVSYNC 0x74536152 /* tSaR */
/*
* Types...
*/
typedef enum
{
CUPS_RASTER_READ, /* Open stream for reading */
CUPS_RASTER_WRITE /* Open stream for writing */
} cups_mode_t;
typedef enum
{
CUPS_FALSE, /* Logical false */
CUPS_TRUE /* Logical true */
} cups_bool_t;
typedef enum
{
CUPS_JOG_NONE, /* Never move pages */
CUPS_JOG_FILE, /* Move pages after this file */
CUPS_JOG_JOB, /* Move pages after this job */
CUPS_JOG_SET /* Move pages after this set */
} cups_jog_t;
typedef enum
{
CUPS_ORIENT_0, /* Don't rotate the page */
CUPS_ORIENT_90, /* Rotate the page counter-clockwise */
CUPS_ORIENT_180, /* Turn the page upside down */
CUPS_ORIENT_270 /* Rotate the page clockwise */
} cups_orient_t;
typedef enum
{
CUPS_CUT_NONE, /* Never cut the roll */
CUPS_CUT_FILE, /* Cut the roll after this file */
CUPS_CUT_JOB, /* Cut the roll after this job */
CUPS_CUT_SET, /* Cut the roll after this set */
CUPS_CUT_PAGE /* Cut the roll after this page */
} cups_cut_t;
typedef enum
{
CUPS_ADVANCE_NONE, /* Never advance the roll */
CUPS_ADVANCE_FILE, /* Advance the roll after this file */
CUPS_ADVANCE_JOB, /* Advance the roll after this job */
CUPS_ADVANCE_SET, /* Advance the roll after this set */
CUPS_ADVANCE_PAGE /* Advance the roll after this page */
} cups_adv_t;
typedef enum
{
CUPS_EDGE_TOP, /* Leading edge is the top of the page */
CUPS_EDGE_RIGHT, /* Leading edge is the right of the page */
CUPS_EDGE_BOTTOM, /* Leading edge is the bottom of the page */
CUPS_EDGE_LEFT /* Leading edge is the left of the page */
} cups_edge_t;
typedef enum
{
CUPS_ORDER_CHUNKED, /* CMYK CMYK CMYK ... */
CUPS_ORDER_BANDED, /* CCC MMM YYY KKK ... */
CUPS_ORDER_PLANAR /* CCC ... MMM ... YYY ... KKK ... */
} cups_order_t;
typedef enum
{
CUPS_CSPACE_W, /* Luminance */
CUPS_CSPACE_RGB, /* Red, green, blue */
CUPS_CSPACE_RGBA, /* Red, green, blue, alpha */
CUPS_CSPACE_K, /* Black */
CUPS_CSPACE_CMY, /* Cyan, magenta, yellow */
CUPS_CSPACE_YMC, /* Yellow, magenta, cyan */
CUPS_CSPACE_CMYK, /* Cyan, magenta, yellow, black */
CUPS_CSPACE_YMCK, /* Yellow, magenta, cyan, black */
CUPS_CSPACE_KCMY, /* Black, cyan, magenta, yellow */
CUPS_CSPACE_KCMYcm, /* Black, cyan, magenta, yellow, *
* light-cyan, light-magenta */
CUPS_CSPACE_GMCK, /* Gold, magenta, yellow, black */
CUPS_CSPACE_GMCS, /* Gold, magenta, yellow, silver */
CUPS_CSPACE_WHITE, /* White ink (as black) */
CUPS_CSPACE_GOLD, /* Gold foil */
CUPS_CSPACE_SILVER /* Silver foil */
} cups_cspace_t;
/*
* The page header structure contains the standard PostScript page device
* dictionary, along with some CUPS-specific parameters that are provided
* by the RIPs...
*/
typedef struct
{
/**** Standard Page Device Dictionary String Values ****/
char MediaClass[64]; /* MediaClass string */
char MediaColor[64]; /* MediaColor string */
char MediaType[64]; /* MediaType string */
char OutputType[64]; /* OutputType string */
/**** Standard Page Device Dictionary Integer Values ****/
unsigned AdvanceDistance; /* AdvanceDistance value in points */
cups_adv_t AdvanceMedia; /* AdvanceMedia value (see above) */
cups_bool_t Collate; /* Collated copies value */
cups_cut_t CutMedia; /* CutMedia value (see above) */
cups_bool_t Duplex; /* Duplexed (double-sided) value */
unsigned HWResolution[2]; /* Resolution in dots-per-inch */
unsigned ImagingBoundingBox[4]; /* Pixel region that is painted (points) */
cups_bool_t InsertSheet; /* InsertSheet value */
cups_jog_t Jog; /* Jog value (see above) */
cups_edge_t LeadingEdge; /* LeadingEdge value (see above) */
unsigned Margins[2]; /* Lower-lefthand margins in points */
cups_bool_t ManualFeed; /* ManualFeed value */
unsigned MediaPosition; /* MediaPosition value */
unsigned MediaWeight; /* MediaWeight value in grams/m^2 */
cups_bool_t MirrorPrint; /* MirrorPrint value */
cups_bool_t NegativePrint; /* NegativePrint value */
unsigned NumCopies; /* Number of copies to produce */
cups_orient_t Orientation; /* Orientation value (see above) */
cups_bool_t OutputFaceUp; /* OutputFaceUp value */
unsigned PageSize[2]; /* Width and length of page in points */
cups_bool_t Separations; /* Separations value */
cups_bool_t TraySwitch; /* TraySwitch value */
cups_bool_t Tumble; /* Tumble value */
/**** CUPS Page Device Dictionary Values ****/
unsigned cupsWidth; /* Width of page image in pixels */
unsigned cupsHeight; /* Height of page image in pixels */
unsigned cupsMediaType; /* Media type code */
unsigned cupsBitsPerColor; /* Number of bits for each color */
unsigned cupsBitsPerPixel; /* Number of bits for each pixel */
unsigned cupsBytesPerLine; /* Number of bytes per line */
cups_order_t cupsColorOrder; /* Order of colors */
cups_cspace_t cupsColorSpace; /* True colorspace */
unsigned cupsCompression; /* Device compression to use */
unsigned cupsRowCount; /* Rows per band */
unsigned cupsRowFeed; /* Feed between bands */
unsigned cupsRowStep; /* Spacing between lines */
} cups_page_header_t;
/*
* The raster structure maintains information about a raster data
* stream...
*/
typedef struct
{
unsigned sync; /* Sync word from start of stream */
int fd; /* File descriptor */
cups_mode_t mode; /* Read/write mode */
} cups_raster_t;
/*
* Prototypes...
*/
extern void cupsRasterClose(cups_raster_t *r);
extern cups_raster_t *cupsRasterOpen(int fd, cups_mode_t mode);
extern unsigned cupsRasterReadHeader(cups_raster_t *r,
cups_page_header_t *h);
extern unsigned cupsRasterReadPixels(cups_raster_t *r,
unsigned char *p, unsigned len);
extern unsigned cupsRasterWriteHeader(cups_raster_t *r,
cups_page_header_t *h);
extern unsigned cupsRasterWritePixels(cups_raster_t *r,
unsigned char *p, unsigned len);
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !_CUPS_RASTER_H_ */
/*
* End of "$Id$".
*/
-125
Ver Arquivo
@@ -1,125 +0,0 @@
/*
* "$Id$"
*
* String functions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* strdup() - Duplicate a string.
* strcasecmp() - Do a case-insensitive comparison.
* strncasecmp() - Do a case-insensitive comparison on up to N chars.
*/
/*
* Include necessary headers...
*/
#include "string.h"
/*
* 'strdup()' - Duplicate a string.
*/
# ifndef HAVE_STRDUP
char * /* O - New string pointer */
strdup(const char *s) /* I - String to duplicate */
{
char *t; /* New string pointer */
if (s == NULL)
return (NULL);
if ((t = malloc(strlen(s) + 1)) == NULL)
return (NULL);
return (strcpy(t, s));
}
# endif /* !HAVE_STRDUP */
/*
* 'strcasecmp()' - Do a case-insensitive comparison.
*/
# ifndef HAVE_STRCASECMP
int /* O - Result of comparison (-1, 0, or 1) */
strcasecmp(const char *s, /* I - First string */
const char *t) /* I - Second string */
{
while (*s != '\0' && *t != '\0')
{
if (tolower(*s) < tolower(*t))
return (-1);
else if (tolower(*s) > tolower(*t))
return (1);
s ++;
t ++;
}
if (*s == '\0' && *t == '\0')
return (0);
else if (*s != '\0')
return (1);
else
return (-1);
}
# endif /* !HAVE_STRCASECMP */
/*
* 'strncasecmp()' - Do a case-insensitive comparison on up to N chars.
*/
# ifndef HAVE_STRNCASECMP
int /* O - Result of comparison (-1, 0, or 1) */
strncasecmp(const char *s, /* I - First string */
const char *t, /* I - Second string */
size_t n) /* I - Maximum number of characters to compare */
{
while (*s != '\0' && *t != '\0' && n > 0)
{
if (tolower(*s) < tolower(*t))
return (-1);
else if (tolower(*s) > tolower(*t))
return (1);
s ++;
t ++;
n --;
}
if (n == 0)
return (0);
else if (*s == '\0' && *t == '\0')
return (0);
else if (*s != '\0')
return (1);
else
return (-1);
}
# endif /* !HAVE_STRNCASECMP */
/*
* End of "$Id$".
*/
-66
Ver Arquivo
@@ -1,66 +0,0 @@
/*
* "$Id$"
*
* String definitions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
#ifndef _CUPS_STRING_H_
# define _CUPS_STRING_H_
/*
* Include necessary headers...
*/
# include <config.h>
# include <string.h>
/*
* Stuff for WIN32 and OS/2...
*/
# if defined(WIN32) || defined(__EMX__)
# define strcasecmp stricmp
# define strncasecmp strnicmp
# endif /* WIN32 || __EMX__ */
/*
* Prototypes...
*/
# ifndef HAVE_STRDUP
extern char *strdup(const char *);
# endif /* !HAVE_STRDUP */
# ifndef HAVE_STRCASECMP
extern int strcasecmp(const char *, const char *);
# endif /* !HAVE_STRCASECMP */
# ifndef HAVE_STRNCASECMP
extern int strncasecmp(const char *, const char *, size_t n);
# endif /* !HAVE_STRNCASECMP */
#endif /* !_CUPS_STRING_H_ */
/*
* End of "$Id$".
*/
-109
Ver Arquivo
@@ -1,109 +0,0 @@
/*
* "$Id$"
*
* HTTP test program for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Main entry.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include "http.h"
/*
* 'main()' - Main entry.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
http_t *http; /* HTTP connection */
http_status_t status; /* Status of GET command */
char buffer[1024]; /* Input buffer */
int bytes; /* Number of bytes read */
FILE *out; /* Output file */
#define HOST "dns.easysw.com"
#define PORT 80
puts("Connecting to " HOST "...");
httpInitialize();
http = httpConnect(HOST, PORT);
if (http == NULL)
{
puts("Unable to connect to " HOST "!");
return (1);
}
puts("Connected to " HOST "...");
out = stdout;
for (i = 1; i < argc; i ++)
{
if (strcmp(argv[i], "-o") == 0)
{
i ++;
out = fopen(argv[i], "wb");
continue;
}
printf("Requesting file \"%s\"...\n", argv[i]);
httpClearFields(http);
httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en");
httpGet(http, argv[i]);
status = httpUpdate(http);
if (status == HTTP_OK)
puts("GET OK:");
else
printf("GET failed with status %d...\n", status);
while ((bytes = httpRead(http, buffer, sizeof(buffer))) > 0)
{
fwrite(buffer, bytes, 1, out);
if (out != stdout)
printf("Read %d bytes, %d total...\n", bytes, ftell(out));
}
}
puts("Closing connection to server...");
httpClose(http);
if (out != stdout)
fclose(out);
return (0);
}
/*
* End of "$Id$".
*/
-199
Ver Arquivo
@@ -1,199 +0,0 @@
/*
* "$Id$"
*
* MIME test program for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* main() - Main entry for the test program.
*/
/*
* Include necessary headers...
*/
#include <stdio.h>
#include "mime.h"
/*
* Local functions...
*/
static void print_rules(mime_magic_t *rules);
/*
* 'main()' - Main entry for the test program.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line args */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
char super[MIME_MAX_SUPER], /* Super-type name */
type[MIME_MAX_TYPE]; /* Type name */
mime_t *mime; /* MIME database */
mime_type_t *src, /* Source type */
*dst, /* Destination type */
**types; /* File type array pointer */
mime_filter_t *filters; /* Filters for the file */
int num_filters; /* Number of filters for the file */
mime = mimeLoad("../conf");
puts("MIME database types:");
for (i = 0, types = mime->types; i < mime->num_types; i ++, types ++)
{
printf("\t%s/%s: ", (*types)->super, (*types)->type);
print_rules((*types)->rules);
puts("");
}
puts("");
puts("MIME database filters:");
for (i = 0, filters = mime->filters; i < mime->num_filters; i ++, filters ++)
printf("\t%s/%s to %s/%s: %s (%d)\n",
filters->src->super, filters->src->type,
filters->dst->super, filters->dst->type,
filters->filter, filters->cost);
puts("");
switch (argc)
{
default :
fputs("Usage: testmime source-file [destination-type]\n", stderr);
return (1);
case 2 :
src = mimeFileType(mime, argv[1]);
if (src != NULL)
{
printf("%s: %s/%s\n", argv[1], src->super, src->type);
return (0);
}
else
{
printf("%s: unknown\n", argv[1]);
return (1);
}
case 3 :
src = mimeFileType(mime, argv[1]);
sscanf(argv[2], "%[^/]/%s", super, type);
dst = mimeType(mime, super, type);
filters = mimeFilter(mime, src, dst, &num_filters);
if (filters == NULL)
{
printf("No filters to convert from %s to %s.\n", argv[1], argv[2]);
return (1);
}
else
{
for (i = 0; i < num_filters; i ++)
if (i < (num_filters - 1))
printf("%s | ", filters[i].filter);
else
puts(filters[i].filter);
return (0);
}
}
}
/*
* 'print_rules()' - Print the rules for a file type...
*/
static void
print_rules(mime_magic_t *rules) /* I - Rules to print */
{
char logic; /* Logic separator */
if (rules == NULL)
return;
if (rules->parent == NULL ||
rules->parent->op == MIME_MAGIC_OR)
logic = ',';
else
logic = '+';
while (rules != NULL)
{
if (rules->prev != NULL)
putchar(logic);
switch (rules->op)
{
case MIME_MAGIC_MATCH :
printf("match(%s)", rules->value.matchv);
break;
case MIME_MAGIC_LOCALE :
printf("locale(%s)", rules->value.localev);
break;
case MIME_MAGIC_ASCII :
printf("ascii(%d,%d)", rules->offset, rules->length);
break;
case MIME_MAGIC_PRINTABLE :
printf("printable(%d,%d)", rules->offset, rules->length);
break;
case MIME_MAGIC_STRING :
printf("string(%d,%s)", rules->offset, rules->value.stringv);
break;
case MIME_MAGIC_CHAR :
printf("char(%d,%d)", rules->offset, rules->value.charv);
break;
case MIME_MAGIC_SHORT :
printf("short(%d,%d)", rules->offset, rules->value.shortv);
break;
case MIME_MAGIC_INT :
printf("int(%d,%d)", rules->offset, rules->value.intv);
break;
default :
if (rules->child != NULL)
{
putchar('(');
print_rules(rules->child);
putchar(')');
}
break;
}
rules = rules->next;
}
}
/*
* End of "$Id$".
*/
-102
Ver Arquivo
@@ -1,102 +0,0 @@
# Microsoft Developer Studio Project File - Name="testmime" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=testmime - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "testmime.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "testmime.mak" CFG="testmime - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "testmime - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "testmime - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "testmime - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 cups.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"testmime.exe"
!ELSEIF "$(CFG)" == "testmime - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "testmime___Win32_Debug"
# PROP BASE Intermediate_Dir "testmime___Win32_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 cupsd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"testmimed.exe" /pdbtype:sept
!ENDIF
# Begin Target
# Name "testmime - Win32 Release"
# Name "testmime - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\testmime.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\mime.h
# End Source File
# End Group
# End Target
# End Project
-183
Ver Arquivo
@@ -1,183 +0,0 @@
/*
* "$Id$"
*
* PPD test program for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* PostScript is a trademark of Adobe Systems, Inc.
*
* Contents:
*
* main() - Main entry for test program.
*/
/*
* Include necessary headers...
*/
#include "cups.h"
#include "string.h"
/*
* 'main()' - Main entry for test program.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i, j, k, m, n; /* Looping vars */
char *filename; /* File to load */
ppd_file_t *ppd; /* PPD file record */
ppd_size_t *size; /* Size record */
ppd_group_t *group; /* UI group */
ppd_option_t *option; /* Standard UI option */
ppd_choice_t *choice; /* Standard UI option choice */
static char *uis[] = { "BOOLEAN", "PICKONE", "PICKMANY" };
static char *sections[] = { "ANY", "DOCUMENT", "EXIT",
"JCL", "PAGE", "PROLOG" };
/*
* Display PPD files for each file listed on the command-line...
*/
if (argc == 1)
{
fputs("Usage: ppdtest filename1.ppd [... filenameN.ppd]\n", stderr);
return (1);
}
for (i = 1; i < argc; i ++)
{
if (strstr(argv[i], ".ppd"))
filename = argv[i];
else
filename = cupsGetPPD(argv[i]);
if ((ppd = ppdOpenFile(filename)) == NULL)
{
fprintf(stderr, "Unable to open \'%s\' as a PPD file!\n", filename);
continue;
}
printf("FILE: %s\n", filename);
printf(" language_level = %d\n", ppd->language_level);
printf(" color_device = %s\n", ppd->color_device ? "TRUE" : "FALSE");
printf(" variable_sizes = %s\n", ppd->variable_sizes ? "TRUE" : "FALSE");
printf(" landscape = %d\n", ppd->landscape);
switch (ppd->colorspace)
{
case PPD_CS_CMYK :
puts(" colorspace = PPD_CS_CMYK");
break;
case PPD_CS_CMY :
puts(" colorspace = PPD_CS_CMY");
break;
case PPD_CS_GRAY :
puts(" colorspace = PPD_CS_GRAY");
break;
case PPD_CS_RGB :
puts(" colorspace = PPD_CS_RGB");
break;
default :
puts(" colorspace = <unknown>");
break;
}
printf(" num_emulations = %d\n", ppd->num_emulations);
for (j = 0; j < ppd->num_emulations; j ++)
printf(" emulations[%d] = %s\n", j, ppd->emulations[j].name);
printf(" lang_encoding = %s\n", ppd->lang_encoding);
printf(" lang_version = %s\n", ppd->lang_version);
printf(" modelname = %s\n", ppd->modelname);
printf(" ttrasterizer = %s\n",
ppd->ttrasterizer == NULL ? "None" : ppd->ttrasterizer);
printf(" manufacturer = %s\n", ppd->manufacturer);
printf(" product = %s\n", ppd->product);
printf(" nickname = %s\n", ppd->nickname);
printf(" shortnickname = %s\n", ppd->shortnickname);
printf(" patches = %d bytes\n",
ppd->patches == NULL ? 0 : strlen(ppd->patches));
printf(" num_groups = %d\n", ppd->num_groups);
for (j = 0, group = ppd->groups; j < ppd->num_groups; j ++, group ++)
{
printf(" group[%d] = %s\n", j, group->text);
for (k = 0, option = group->options; k < group->num_options; k ++, option ++)
{
printf(" options[%d] = %s (%s) %s %s %.0f\n", k,
option->keyword, option->text, uis[option->ui],
sections[option->section], option->order);
if (strcmp(option->keyword, "PageSize") == 0 ||
strcmp(option->keyword, "PageRegion") == 0)
{
for (m = option->num_choices, choice = option->choices;
m > 0;
m --, choice ++)
{
size = ppdPageSize(ppd, choice->choice);
if (size == NULL)
printf(" %s (%s) = ERROR", choice->choice, choice->text);
else
printf(" %s (%s) = %.2fx%.2fin (%.1f,%.1f,%.1f,%.1f)", choice->choice,
choice->text, size->width / 72.0, size->length / 72.0,
size->left / 72.0, size->bottom / 72.0,
size->right / 72.0, size->top / 72.0);
if (strcmp(option->defchoice, choice->choice) == 0)
puts(" *");
else
putchar('\n');
}
}
else
{
for (m = option->num_choices, choice = option->choices;
m > 0;
m --, choice ++)
{
printf(" %s (%s)", choice->choice, choice->text);
if (strcmp(option->defchoice, choice->choice) == 0)
puts(" *");
else
putchar('\n');
}
}
}
}
ppdClose(ppd);
}
return (0);
}
/*
* End of "$Id$".
*/
-102
Ver Arquivo
@@ -1,102 +0,0 @@
# Microsoft Developer Studio Project File - Name="testppd" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=testppd - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "testppd.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "testppd.mak" CFG="testppd - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "testppd - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "testppd - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "testppd - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 cups.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"testppd.exe"
!ELSEIF "$(CFG)" == "testppd - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "testppd___Win32_Debug"
# PROP BASE Intermediate_Dir "testppd___Win32_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 cupsd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"testppdd.exe" /pdbtype:sept
!ENDIF
# Begin Target
# Name "testppd - Win32 Release"
# Name "testppd - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\testppd.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\ppd.h
# End Source File
# End Group
# End Target
# End Project
-1011
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-949
Ver Arquivo
@@ -1,949 +0,0 @@
/*
* "$Id$"
*
* Printing utilities for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-1999 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* cupsCancelJob() - Cancel a print job.
* cupsDoFileRequest() - Do an IPP request...
* cupsGetClasses() - Get a list of printer classes.
* cupsGetDefault() - Get the default printer or class.
* cupsGetPPD() - Get the PPD file for a printer.
* cupsGetPrinters() - Get a list of printers.
* cupsPrintFile() - Print a file to a printer or class.
* cups_connect() - Connect to the specified host...
*/
/*
* Include necessary headers...
*/
#include "cups.h"
#include "ipp.h"
#include "language.h"
#include "string.h"
#include "debug.h"
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <sys/stat.h>
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
#else
# include <unistd.h>
#endif /* WIN32 || __EMX__ */
/*
* Local globals...
*/
static http_t *cups_server = NULL;
/*
* Local functions...
*/
static char *cups_connect(char *name, char *printer, char *hostname);
/*
* 'cupsCancelJob()' - Cancel a print job.
*/
int /* O - 1 on success, 0 on failure */
cupsCancelJob(char *name, /* I - Name of printer or class */
int job) /* I - Job ID */
{
char printer[HTTP_MAX_URI], /* Printer name */
hostname[HTTP_MAX_URI], /* Hostname */
uri[HTTP_MAX_URI]; /* Printer URI */
ipp_t *request, /* IPP request */
*response; /* IPP response */
cups_lang_t *language; /* Language info */
/*
* See if we can connect to the server...
*/
if (!cups_connect(name, printer, hostname))
return (0);
/*
* Build an IPP_CANCEL_JOB request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
* job-id
*/
request = ippNew();
request->request.op.operation_id = IPP_CANCEL_JOB;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language != NULL ? language->language : "C");
sprintf(uri, "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job);
/*
* Do the request...
*/
if ((response = cupsDoRequest(cups_server, request, "/jobs/")) == NULL)
return (0);
ippDelete(response);
return (1);
}
/*
* 'cupsDoFileRequest()' - Do an IPP request...
*/
ipp_t * /* O - Response data */
cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
ipp_t *request, /* I - IPP request */
char *resource, /* I - HTTP resource for POST */
char *filename) /* I - File to send or NULL */
{
ipp_t *response; /* IPP response data */
char length[255]; /* Content-Length field */
http_status_t status; /* Status of HTTP request */
FILE *file; /* File to send */
struct stat fileinfo; /* File information */
int bytes; /* Number of bytes read/written */
char buffer[8192]; /* Output buffer */
#if !defined(WIN32) && !defined(__EMX__)
char *password, /* Password string */
plain[255], /* Plaintext username:password */
encode[255]; /* Encoded username:password */
char junk[8192]; /* Junk buffer for error data */
#endif /* !WIN32 && !__EMX__ */
static char authstring[255] = "";
/* Authorization string */
DEBUG_printf(("cupsDoFileRequest(%08x, %08s, \'%s\', \'%s\')\n",
http, request, resource, filename ? filename : "(null)"));
/*
* See if we have a file to send...
*/
if (filename != NULL)
{
if (stat(filename, &fileinfo))
{
/*
* Can't get file information!
*/
ippDelete(request);
return (NULL);
}
if ((file = fopen(filename, "rb")) == NULL)
{
/*
* Can't open file!
*/
ippDelete(request);
return (NULL);
}
}
/*
* Loop until we can send the request without authorization problems.
*/
response = NULL;
while (response == NULL)
{
DEBUG_puts("cupsDoFileRequest: setup...");
/*
* Setup the HTTP variables needed...
*/
if (filename != NULL)
sprintf(length, "%u", ippLength(request) + fileinfo.st_size);
else
sprintf(length, "%u", ippLength(request));
httpClearFields(http);
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, length);
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
httpSetField(http, HTTP_FIELD_AUTHORIZATION, authstring);
/*
* Try the request...
*/
DEBUG_puts("cupsDoFileRequest: post...");
if (httpPost(http, resource))
if (httpPost(http, resource))
break;
/*
* Send the IPP data and wait for the response...
*/
DEBUG_puts("cupsDoFileRequest: ipp write...");
request->state = IPP_IDLE;
if (ippWrite(http, request) != IPP_ERROR)
if (filename != NULL)
{
DEBUG_puts("cupsDoFileRequest: file write...");
/*
* Send the file...
*/
rewind(file);
while ((bytes = fread(buffer, 1, sizeof(buffer), file)) > 0)
if (httpWrite(http, buffer, bytes) < bytes)
break;
}
/*
* Get the server's return status...
*/
DEBUG_puts("cupsDoFileRequest: update...");
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
#if !defined(WIN32) && !defined(__EMX__)
if (status == HTTP_UNAUTHORIZED)
{
DEBUG_puts("cupsDoFileRequest: unauthorized...");
/*
* Flush any error message...
*/
httpFlush(http);
if ((password = getpass("Password:")) != NULL)
{
/*
* Got a password; send it to the server...
*/
if (!password[0])
break;
sprintf(plain, "%s:%s", cuserid(NULL), password);
httpEncode64(encode, plain);
sprintf(authstring, "Basic %s", encode);
continue;
}
else
break;
}
#endif /* !WIN32 && !__EMX__ */
if (status != HTTP_OK)
{
DEBUG_printf(("cupsDoFileRequest: error %d...\n", status));
/*
* Flush any error message...
*/
httpFlush(http);
break;
}
else
{
/*
* Read the response...
*/
DEBUG_puts("cupsDoFileRequest: response...");
response = ippNew();
if (ippRead(http, response) == IPP_ERROR)
{
/*
* Delete the response...
*/
ippDelete(response);
response = NULL;
/*
* Flush any remaining data...
*/
httpFlush(http);
break;
}
}
}
/*
* Close the file if needed...
*/
if (filename != NULL)
fclose(file);
/*
* Delete the original request and return the response...
*/
ippDelete(request);
return (response);
}
/*
* 'cupsGetClasses()' - Get a list of printer classes.
*/
int /* O - Number of classes */
cupsGetClasses(char ***classes) /* O - Classes */
{
int n; /* Number of classes */
ipp_t *request, /* IPP Request */
*response; /* IPP Response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
/*
* Try to connect to the server...
*/
if (!cups_connect("default", NULL, NULL))
return (0);
/*
* Build a CUPS_GET_CLASSES request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_CLASSES;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
*/
n = 0;
*classes = NULL;
if ((response = cupsDoRequest(cups_server, request, "/classes/")) != NULL)
{
for (attr = response->attrs; attr != NULL; attr = attr->next)
if (strcmp(attr->name, "printer-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
{
if (n == 0)
*classes = malloc(sizeof(char *));
else
*classes = realloc(*classes, sizeof(char *) * (n + 1));
if (*classes == NULL)
{
ippDelete(response);
return (0);
}
(*classes)[n] = strdup(attr->values[0].string.text);
n ++;
}
ippDelete(response);
}
return (n);
}
/*
* 'cupsGetDefault()' - Get the default printer or class.
*/
char * /* O - Default printer or NULL */
cupsGetDefault(void)
{
ipp_t *request, /* IPP Request */
*response; /* IPP Response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
static char def_printer[64];/* Default printer */
/*
* First see if the LPDEST or PRINTER environment variables are
* set...
*/
if (getenv("LPDEST") != NULL)
return (getenv("LPDEST"));
else if (getenv("PRINTER") != NULL)
return (getenv("PRINTER"));
/*
* Try to connect to the server...
*/
if (!cups_connect("default", NULL, NULL))
return (NULL);
/*
* Build a CUPS_GET_DEFAULT request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_DEFAULT;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(cups_server, request, "/printers/")) != NULL)
{
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
{
strcpy(def_printer, attr->values[0].string.text);
ippDelete(response);
return (def_printer);
}
ippDelete(response);
}
return (NULL);
}
/*
* 'cupsGetPPD()' - Get the PPD file for a printer.
*/
char * /* O - Filename for PPD file */
cupsGetPPD(char *name) /* I - Printer name */
{
FILE *fp; /* PPD file */
int bytes; /* Number of bytes read */
char buffer[8192]; /* Buffer for file */
char printer[HTTP_MAX_URI], /* Printer name */
hostname[HTTP_MAX_URI], /* Hostname */
resource[HTTP_MAX_URI]; /* Resource name */
static char filename[HTTP_MAX_URI]; /* Local filename */
char *tempdir; /* Temporary file directory */
struct stat fileinfo; /* File information */
/*
* See if we can connect to the server...
*/
if (!cups_connect(name, printer, hostname))
return (NULL);
/*
* Then check for the cache file...
*/
#if defined(WIN32) || defined(__EMX__)
tempdir = "C:/WINDOWS/TEMP";
#else
if ((tempdir = getenv("TMPDIR")) == NULL)
tempdir = "/tmp";
#endif /* WIN32 || __EMX__ */
sprintf(filename, "%s/%s.ppd", tempdir, printer);
if (stat(filename, &fileinfo))
memset(&fileinfo, 0, sizeof(fileinfo));
/*
* And send a request to the HTTP server using "if-modified-since"...
*/
sprintf(resource, "/printers/%s.ppd", printer);
httpClearFields(cups_server);
httpSetField(cups_server, HTTP_FIELD_HOST, hostname);
httpSetField(cups_server, HTTP_FIELD_IF_MODIFIED_SINCE,
httpGetDateString(fileinfo.st_mtime));
httpGet(cups_server, resource);
switch (httpUpdate(cups_server))
{
case HTTP_OK : /* New file - get it! */
break;
case HTTP_NOT_MODIFIED : /* File hasn't been modified; use the current copy */
return (filename);
default :
return (NULL);
}
/*
* OK, we need to copy the file; open the file and copy it...
*/
unlink(filename);
if ((fp = fopen(filename, "w")) == NULL)
{
/*
* Can't open file; close the server connection and return NULL...
*/
httpClose(cups_server);
cups_server = NULL;
return (NULL);
}
while ((bytes = httpRead(cups_server, buffer, sizeof(buffer))) > 0)
fwrite(buffer, bytes, 1, fp);
fclose(fp);
return (filename);
}
/*
* 'cupsGetPrinters()' - Get a list of printers.
*/
int /* O - Number of printers */
cupsGetPrinters(char ***printers) /* O - Printers */
{
int n; /* Number of printers */
ipp_t *request, /* IPP Request */
*response; /* IPP Response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
/*
* Try to connect to the server...
*/
if (!cups_connect("default", NULL, NULL))
return (0);
/*
* Build a CUPS_GET_PRINTERS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_PRINTERS;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
*/
n = 0;
*printers = NULL;
if ((response = cupsDoRequest(cups_server, request, "/printers/")) != NULL)
{
for (attr = response->attrs; attr != NULL; attr = attr->next)
if (strcmp(attr->name, "printer-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
{
if (n == 0)
*printers = malloc(sizeof(char *));
else
*printers = realloc(*printers, sizeof(char *) * (n + 1));
if (*printers == NULL)
{
ippDelete(response);
return (0);
}
(*printers)[n] = strdup(attr->values[0].string.text);
n ++;
}
ippDelete(response);
}
return (n);
}
/*
* 'cupsPrintFile()' - Print a file to a printer or class.
*/
int /* O - Job ID */
cupsPrintFile(char *name, /* I - Printer or class name */
char *filename, /* I - File to print */
char *title, /* I - Title of job */
int num_options,/* I - Number of options */
cups_option_t *options) /* I - Options */
{
int i; /* Looping var */
int n, n2; /* Attribute values */
char *option, /* Name of option */
*val, /* Pointer to option value */
*s; /* Pointer into option value */
ipp_t *request; /* IPP request */
ipp_t *response; /* IPP response */
ipp_attribute_t *attr; /* IPP job-id attribute */
char hostname[HTTP_MAX_URI], /* Hostname */
printer[HTTP_MAX_URI], /* Printer or class name */
uri[HTTP_MAX_URI]; /* Printer URI */
cups_lang_t *language; /* Language to use */
int jobid; /* New job ID */
DEBUG_printf(("cupsPrintFile(\'%s\', \'%s\', %d, %08x)\n",
printer, filename, num_options, options));
if (name == NULL || filename == NULL)
return (0);
/*
* Setup a connection and request data...
*/
if ((request = ippNew()) == NULL)
return (0);
if (!cups_connect(name, printer, hostname))
{
DEBUG_printf(("cupsPrintFile: Unable to open connection - %s.\n",
strerror(errno)));
ippDelete(request);
return (0);
}
/*
* Build a standard CUPS URI for the printer and fill the standard IPP
* attributes...
*/
request->request.op.operation_id = IPP_PRINT_JOB;
request->request.op.request_id = 1;
sprintf(uri, "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language != NULL ? language->language : "C");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
/*
* Handle raw print files...
*/
if (cupsGetOption("raw", num_options, options))
ippAddString(request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
#if defined(WIN32) || defined(__EMX__)
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "requesting-user-name",
NULL, "WindowsUser");
#else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "requesting-user-name",
NULL, cuserid(NULL));
#endif /* WIN32 || __EMX__ */
if (title)
ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, title);
/*
* Then add all options on the command-line...
*/
for (i = 0; i < num_options; i ++)
{
/*
* Skip the "raw" option - handled above...
*/
if (strcmp(options[i].name, "raw") == 0)
continue;
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, and option=MxN.
*/
option = options[i].name;
val = options[i].value;
if (*val == '\0')
val = NULL;
if (val != NULL)
{
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
n = 1;
val = "";
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
n = 0;
val = "";
}
n = strtol(val, &s, 0);
}
else
{
if (strncmp(option, "no", 2) == 0)
{
option += 2;
n = 0;
}
else
n = 1;
s = "";
}
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
{
/*
* String value(s)...
*/
DEBUG_printf(("cupsPrintJob: Adding string option \'%s\' with value \'%s\'...\n",
option, val));
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
}
else if (val != NULL)
{
/*
* Numeric value, range, or resolution...
*/
if (*s == '-')
{
n2 = strtol(s + 1, NULL, 0);
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
DEBUG_printf(("cupsPrintJob: Adding range option \'%s\' with value %d-%d...\n",
option, n, n2));
}
else if (*s == 'x')
{
n2 = strtol(s + 1, &s, 0);
if (strcmp(s, "dpc") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
else if (strcmp(s, "dpi") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
DEBUG_printf(("cupsPrintJob: Adding resolution option \'%s\' with value %s...\n",
option, val));
}
else
{
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
DEBUG_printf(("cupsPrintJob: Adding integer option \'%s\' with value %d...\n",
option, n));
}
}
else
{
/*
* Boolean value...
*/
DEBUG_printf(("cupsPrintJob: Adding boolean option \'%s\' with value %d...\n",
option, n));
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
}
}
/*
* Try printing the file...
*/
sprintf(uri, "/printers/%s", printer);
if ((response = cupsDoFileRequest(cups_server, request, uri, filename)) == NULL)
jobid = 0;
else if (response->request.status.status_code > IPP_OK_CONFLICT)
{
DEBUG_printf(("IPP response code was 0x%x!\n",
response->request.status.status_code));
jobid = 0;
}
else if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL)
{
DEBUG_puts("No job ID!");
jobid = 0;
}
else
jobid = attr->values[0].integer;
if (response != NULL)
ippDelete(response);
return (jobid);
}
/*
* 'cups_connect()' - Connect to the specified host...
*/
static char * /* I - Printer name if success, NULL if fail */
cups_connect(char *name, /* I - Destination (printer[@host]) */
char *printer, /* O - Printer name */
char *hostname) /* O - Hostname */
{
char hostbuf[HTTP_MAX_URI];
/* Name of host */
static char printerbuf[HTTP_MAX_URI];
/* Name of printer or class */
if (name == NULL)
return (NULL);
if (sscanf(name, "%[^@]@%s", printerbuf, hostbuf) == 1)
strcpy(hostbuf, "localhost");
if (hostname != NULL)
strcpy(hostname, hostbuf);
else
hostname = hostbuf;
if (printer != NULL)
strcpy(printer, printerbuf);
else
printer = printerbuf;
if (cups_server != NULL)
{
if (strcasecmp(cups_server->hostname, hostname) == 0)
return (printer);
httpClose(cups_server);
}
if ((cups_server = httpConnect(hostname, ippPort())) == NULL)
return (NULL);
else
return (printer);
}
/*
* End of "$Id$".
*/
-62
Ver Arquivo
@@ -1,62 +0,0 @@
%%BeginResource: procset hpgltops 1.0 0
%
% "$Id: HPGLprolog 312 1999-05-11 19:45:40Z mike $"
%
% HP-GL/2 filter procset for the Common UNIX Printing System (CUPS).
%
% This procset contains the basic drawing commands that are used to
% reduce output size. Note the 'MP' (make newpath) definition - this
% should be called 'NP' (newpath), but GhostScript uses the 'NP' name
% for 'noaccess put' in some of its font files...
%
% Copyright 1993-1999 Easy Software Products
%
% These coded instructions, statements, and computer programs are the
% property of Easy Software Products and are protected by Federal
% copyright law. Distribution and use rights are outlined in the file
% "LICENSE.txt" which should have been included with this file. If this
% file is missing or damaged please contact Easy Software Products
% at:
%
% Attn: CUPS Licensing Information
% Easy Software Products
% 44141 Airport View Drive, Suite 204
% Hollywood, Maryland 20636-3111 USA
%
% Voice: (301) 373-9603
% EMail: cups-info@cups.org
% WWW: http://www.cups.org
%
/MO { moveto } bind def
/LI { lineto } bind def
/FI { fill } bind def
/ST { stroke } bind def
/CP { closepath } bind def
/MP { newpath } bind def
%
% If you have more than 8 pens defined for your HP-GL/2 output you'll
% need to add P# definitions (# = pen number) to set the appropriate color.
% If you don't you'll get errors. The default 8 pens cover the primary
% colors (white, black, red, green, yellow, blue, magenta, cyan). Ditto
% for pen widths (W#).
%
% PC and PW commands in the input stream will define/redefine these
% appropriately, but some packages don't generate them...
%
/P0 { 1.0 1.0 1.0 setrgbcolor } bind def
/P1 { 0.0 0.0 0.0 setrgbcolor } bind def
/P2 { 1.0 0.0 0.0 setrgbcolor } bind def
/P3 { 0.0 1.0 0.0 setrgbcolor } bind def
/P4 { 1.0 1.0 0.0 setrgbcolor } bind def
/P5 { 0.0 0.0 1.0 setrgbcolor } bind def
/P6 { 1.0 0.0 1.0 setrgbcolor } bind def
/P7 { 0.0 1.0 1.0 setrgbcolor } bind def
/W0 { DefaultPenWidth PenScaling mul setlinewidth } bind def
/W1 { DefaultPenWidth PenScaling mul setlinewidth } bind def
/W2 { DefaultPenWidth PenScaling mul setlinewidth } bind def
/W3 { DefaultPenWidth PenScaling mul setlinewidth } bind def
/W4 { DefaultPenWidth PenScaling mul setlinewidth } bind def
/W5 { DefaultPenWidth PenScaling mul setlinewidth } bind def
/W6 { DefaultPenWidth PenScaling mul setlinewidth } bind def
/W7 { DefaultPenWidth PenScaling mul setlinewidth } bind def
%%EndResource
-56
Ver Arquivo
@@ -1,56 +0,0 @@
#
# "$Id$"
#
# Datafile makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1993-1999 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
include ../Makedefs
#
# Data files...
#
FILES = 8859-1 8859-14 8859-15 8859-2 8859-3 8859-4 8859-5 \
8859-6 8859-7 8859-8 8859-9 HPGLprolog
#
# Make everything...
#
all:
#
# Clean all config and object files...
#
clean:
#
# Install files...
#
install:
-$(MKDIR) $(DATADIR)
$(CP) $(FILES) $(DATADIR)
#
# End of "$Id$".
#
-1051
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
Submódulo
+1
Submodule development added at d9f356c545
-102
Ver Arquivo
@@ -1,102 +0,0 @@
#
# "$Id$"
#
# Documentation makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1993-1999 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
include ../Makedefs
#
# HTMLDOC generation rules...
#
.SUFFIXES: .html .pdf .shtml
.shtml.html:
htmldoc --title images/cups-large.gif --numbered -f $@ $<
.shtml.pdf:
htmldoc --title images/cups-large.gif --duplex --compression=9 \
--numbered --jpeg -f $@ $<
#
# Document files...
#
DOCUMENTS = cmp.shtml idd.shtml sam.shtml sdd.shtml ssr.shtml \
stp.shtml sum.shtml svd.shtml
DOCIMAGES = images/cups-block-diagram.gif images/cups-large.gif \
images/cups-medium.gif images/cups-small.gif
WEBPAGES = cups.css cupsdoc.css index.html documentation.html
WEBIMAGES = images/logo.gif images/navbar.gif \
images/printer-idle.gif images/printer-processing.gif \
images/printer-stopped.gif
#
#
# Make all documents...
#
all: $(DOCUMENTS:.shtml=.pdf) $(DOCUMENTS:.shtml=.html) overview.pdf
#
# Remove all generated files...
#
clean:
$(RM) $(DOCUMENTS:.shtml=.pdf)
$(RM) $(DOCUMENTS:.shtml=.html)
$(RM) overview.pdf
#
# Install all documentation files...
#
install:
-$(MKDIR) $(DATADIR)/doc
$(CP) $(WEBPAGES) $(DATADIR)/doc
$(CP) overview.html overview.pdf $(DATADIR)/doc
$(CP) $(DOCUMENTS:.shtml=.html) $(DATADIR)/doc
$(CP) $(DOCUMENTS:.shtml=.pdf) $(DATADIR)/doc
-$(MKDIR) $(DATADIR)/doc/images
$(CP) $(WEBIMAGES) $(DATADIR)/doc/images
$(CP) $(DOCIMAGES) $(DATADIR)/doc/images
#
# The overview, admin guide, and user's guide get special attention...
#
overview.pdf: overview.html
htmldoc --duplex --compression=9 --jpeg --webpage -f $@ $<
sam.html: sam.shtml
htmldoc --title images/cups-large.gif -f $@ $<
sam.pdf: sam.shtml
htmldoc --title images/cups-large.gif --duplex --compression=9 \
--jpeg -f $@ $<
sum.html: sum.shtml
htmldoc --title images/cups-large.gif -f $@ $<
sum.pdf: sum.shtml
htmldoc --title images/cups-large.gif --duplex --compression=9 \
--jpeg -f $@ $<
#
# End of Makefile.
#
-651
Ver Arquivo
@@ -1,651 +0,0 @@
<HTML>
<HEAD>
<TITLE>CUPS Configuration Management Plan</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-CMP-1.0">
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>CUPS Configuration Management Plan</H1></A><BR>
CUPS-CMP-1.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 References</A></B>
<UL>
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
</UL>
<B><A HREF=#3>3 File Management</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Directory Structure</A></LI>
<LI><A HREF=#3_2>3.2 Source Files</A></LI>
<LI><A HREF=#3_3>3.3 Configuration Management</A></LI>
</UL>
<B><A HREF=#4>4 Trouble Report Processing</A></B>
<UL>
<LI><A HREF=#4_1>4.1 Classification</A></LI>
<LI><A HREF=#4_2>4.2 Identification</A></LI>
<LI><A HREF=#4_3>4.3 Correction</A></LI>
<LI><A HREF=#4_4>4.4 Notification</A></LI>
</UL>
<B><A HREF=#5>5 Software Releases</A></B>
<UL>
<LI><A HREF=#5_1>5.1 Version Numbering</A></LI>
<LI><A HREF=#5_2>5.2 Generation</A></LI>
<LI><A HREF=#5_3>5.3 Testing</A></LI>
<LI><A HREF=#5_4>5.4 Release</A></LI>
</UL>
<B><A HREF=#6>A Glossary</A></B>
<UL>
<LI><A HREF=#6_1>A.1 Terms</A></LI>
<LI><A HREF=#6_2>A.2 Acronyms</A></LI>
</UL>
<B><A HREF=#7>B Coding Requirements</A></B>
<UL>
<LI><A HREF=#7_1>B.1 Source Files</A></LI>
<UL>
<LI><A HREF=#7_1_1>B.1.1 Naming</A></LI>
<LI><A HREF=#7_1_2>B.1.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_2>B.2 Functions</A></LI>
<UL>
<LI><A HREF=#7_2_1>B.2.1 Naming</A></LI>
<LI><A HREF=#7_2_2>B.2.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_3>B.3 Methods</A></LI>
<UL>
<LI><A HREF=#7_3_1>B.3.1 Naming</A></LI>
<LI><A HREF=#7_3_2>B.3.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_4>B.4 Variables</A></LI>
<UL>
<LI><A HREF=#7_4_1>B.4.1 Naming</A></LI>
<LI><A HREF=#7_4_2>B.4.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_5>B.5 Types</A></LI>
<UL>
<LI><A HREF=#7_5_1>B.5.1 Naming</A></LI>
<LI><A HREF=#7_5_2>B.5.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_6>B.6 Structures</A></LI>
<UL>
<LI><A HREF=#7_6_1>B.6.1 Naming</A></LI>
<LI><A HREF=#7_6_2>B.6.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_7>B.7 Classes</A></LI>
<UL>
<LI><A HREF=#7_7_1>B.7.1 Naming</A></LI>
<LI><A HREF=#7_7_2>B.7.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_8>B.8 Constants</A></LI>
<UL>
<LI><A HREF=#7_8_1>B.8.1 Naming</A></LI>
<LI><A HREF=#7_8_2>B.8.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_9>B.9 Code</A></LI>
<UL>
<LI><A HREF=#7_9_1>B.9.1 Documentation</A></LI>
<LI><A HREF=#7_9_2>B.9.2 Style</A></LI>
</UL>
</UL>
<B><A HREF=#8>C Software Trouble Report Form</A></B><HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
This configuration management plan document provides the guidelines
for development and maintainance of the Common UNIX Printing System
(&quot;CUPS&quot;) Version 1.0 software.
<H2><A NAME=1_2>1.2 System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
and users. CUPS provides the System V and Berkeley command-line
interfaces.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis for
managing print jobs and queues. The Line Printer Daemon (LPD, RFC1179),
Server Message Block (SMB), and AppSocket protocols are also supported
with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
This configuration management document is organized into the following
sections:
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - File Management</LI>
<LI>4 - Trouble Report Processing</LI>
<LI>5 - Software Releases</LI>
<LI>A - Glossary</LI>
<LI>B - Coding Requirements</LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
The following CUPS documentation is referenced by this document:
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.0: CUPS System Interface Design Description </LI>
<LI>CUPS-SAM-1.0.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.0: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.0: CUPS Software Programming Manual </LI>
<LI>CUPS-SSR-1.0: CUPS Software Security Report </LI>
<LI>CUPS-STP-1.0: CUPS Software Test Plan </LI>
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
The following non-CUPS documents are referenced by this document:
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
<LI>IPP/1.0: Additional Optional Operations - Set 1 </LI>
<LI>IPP/1.0: Encoding and Transport </LI>
<LI>IPP/1.0: Implementers Guide </LI>
<LI>IPP/1.0: Model and Semantics </LI>
<LI>RFC 1179, Line Printer Daemon Protocol </LI>
</UL>
<H1><A NAME=3>3 File Management</A></H1>
<H2><A NAME=3_1>3.1 Directory Structure</A></H2>
Each source file shall be placed a sub-directory corresponding to the
software sub-system it belongs to (&quot;scheduler&quot;, &quot;libcups&quot;, etc.) To
remain compatible with older UNIX filesystems, directory names shall
not exceed 16 characters in length.
<H2><A NAME=3_2>3.2 Source Files</A></H2>
Source files shall be documented and formatted as described in
Appendix B, Coding Requirements.
<H2><A NAME=3_3>3.3 Configuration Management</A></H2>
Source files shall be placed under the control of the Concurrent
Versions System (&quot;CVS&quot;) software. Source files shall be &quot;checked in&quot;
with each change so that modifications can be tracked.
<P>Documentation on the CVS software is included with the whitepaper,
&quot;CVS II: Parallelizing Software Development&quot;. </P>
<H1><A NAME=4>4 Trouble Report Processing</A></H1>
A Software Trouble Report (&quot;STR&quot;) shall be submitted every time a user
or vendor experiences a problem with the CUPS software. Trouble reports
are maintained in a database with one of the following states:
<OL>
<LI>STR is closed with complete resolution</LI>
<LI>STR is closed without resolution</LI>
<LI>STR is active</LI>
<LI>STR is pending (new STR or additional information available)</LI>
</OL>
Trouble reports shall be processed using the following steps.
<H2><A NAME=4_1>4.1 Classification</A></H2>
When a trouble report is received it must be classified at one of the
following levels:
<OL>
<LI>Request for enhancement</LI>
<LI>Documentation error</LI>
<LI>Unable to print a file</LI>
<LI>Unable to print to a printer</LI>
<LI>Unable to print at all</LI>
</OL>
The scope of the problem should also be determined as:
<OL>
<LI>Specific to a machine</LI>
<LI>Specific to an operating system</LI>
<LI>Applies to all machines and operating systems</LI>
</OL>
<H2><A NAME=4_2>4.2 Identification</A></H2>
Once the level and scope of the trouble report is determined the
software sub-system(s) involved with the problem are determined. This
may involve additional communication with the user or vendor to isolate
the problem to a specific cause.
<P>When the sub-system(s) involved have been identified, an engineer
will then determine the change(s) needed and estimate the time required
for the change(s). </P>
<H2><A NAME=4_3>4.3 Correction</A></H2>
Corrections are scheduled based upon the severity and complexity of
the problem. Once all changes have been made, documented, and tested
successfully a new software release snapshot is generated. Additional
tests are added as necessary for proper testing of the changes.
<H2><A NAME=4_4>4.4 Notification</A></H2>
The user or vendor is notified when the fix is available or if the
problem was caused by user error.
<H1><A NAME=5>5 Software Releases</A></H1>
<H2><A NAME=5_1>5.1 Version Numbering</A></H2>
CUPS uses a three-part version number separated by periods to
represent the major, minor, and patch release numbers:
<UL>
<PRE>
major.minor.patch
1.0.0
</PRE>
</UL>
Beta-test releases are indentified by appending the letter B followed
by the build number:
<UL>
<PRE>
major.minor.patchbbuild
1.0.0b1
</PRE>
</UL>
A CVS snapshot is generated for every beta and final release and uses
the version number preceded by the letter &quot;v&quot; and with the decimal
points replaced by underscores:
<UL>
<PRE>
v1_0_0b1
v1_0_0
</PRE>
</UL>
Each change that corrects a fault in a software sub-system increments
the patch release number. If a change affects the software design of
CUPS then the minor release number will be incremented and the patch
release number reset to 0. If CUPS is completely redesigned the major
release number will be incremented and the minor and patch release
numbers reset to 0:
<UL>
<PRE>
1.0.0b1 First beta release
1.0.0b2 Second beta release
1.0.0 First production release
1.0.1b1 First beta of 1.0.1
1.0.1 Production release of 1.0.1
1.1.0b1 First beta of 1.1.0
1.1.0 Production release of 1.1.0
2.0.0b1 First beta of 2.0.0
2.0.0 Production release of 2.0.0
</PRE>
</UL>
<H2><A NAME=5_2>5.2 Generation</A></H2>
Software releases shall be generated for each successfully completed
software trouble report. All object and executable files shall be
deleted prior to performing a full build to ensure that source files
are recompiled.
<H2><A NAME=5_3>5.3 Testing</A></H2>
Software testing shall be conducted according to the CUPS Software
Test Plan, CUPS-STP-1.0. Failed tests cause STRs to be generated to
correct the problems found.
<H2><A NAME=5_4>5.4 Release</A></H2>
When testing has been completed successfully a new distribution image
is created from the current CVS code &quot;snapshot&quot;. No production release
shall contain software that has not passed the appropriate software
tests.
<H1 TYPE=A VALUE=1><A NAME=6>A Glossary</A></H1>
<H2><A NAME=6_1>A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
<DT>parallel </DT>
<DD>Sending or receiving data more than 1 bit at a time. </DD>
<DT>pipe </DT>
<DD>A one-way communications channel between two programs. </DD>
<DT>serial </DT>
<DD>Sending or receiving data 1 bit at a time. </DD>
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME=6_2>A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
<DT>CUPS </DT>
<DD>Common UNIX Printing System </DD>
<DT>ESC/P </DT>
<DD>EPSON Standard Code for Printers </DD>
<DT>FTP </DT>
<DD>File Transfer Protocol </DD>
<DT>HP-GL </DT>
<DD>Hewlett-Packard Graphics Language </DD>
<DT>HP-PCL </DT>
<DD>Hewlett-Packard Printer Control Language </DD>
<DT>HP-PJL </DT>
<DD>Hewlett-Packard Printer Job Language </DD>
<DT>IETF </DT>
<DD>Internet Engineering Task Force </DD>
<DT>IPP </DT>
<DD>Internet Printing Protocol </DD>
<DT>ISO </DT>
<DD>International Standards Organization </DD>
<DT>LPD </DT>
<DD>Line Printer Daemon </DD>
<DT>MIME </DT>
<DD>Multimedia Internet Mail Exchange </DD>
<DT>PCL </DT>
<DD>Page Control Language </DD>
<DT>PPD </DT>
<DD>PostScript Printer Description </DD>
<DT>SMB </DT>
<DD>Server Message Block </DD>
<DT>TFTP </DT>
<DD>Trivial File Transfer Protocol </DD>
</DL>
<H1><A NAME=7>B Coding Requirements</A></H1>
These coding requirements provide detailed information on source file
formatting and documentation content. These guidelines shall be applied
to all C and C++ source files provided with CUPS.
<H2><A NAME=7_1>B.1 Source Files</A></H2>
<H3><A NAME=7_1_1>B.1.1 Naming</A></H3>
All source files names shall be 16 characters or less in length to
ensure compatibility with older UNIX filesystems. Source files
containing functions shall have an extension of &quot;.c&quot; for ANSI C and
&quot;.cpp&quot; for C++ source files. All other &quot;include&quot; files shall have an
extension of &quot;.h&quot;.
<H3><A NAME=7_1_2>B.1.2 Documentation</A></H3>
The top of each source file shall contain a header giving the name of
the file, the purpose or nature of the source file, the copyright and
licensing notice, and the functions contained in the file. The file
name and revision information is provided by the CVS &quot;$Id: cmp.shtml,v
1.3 1999/05/21 20:54:04 mike Exp $&quot; tag:
<UL>
<PRE>
/*
* &quot;$Id$&quot;
*
* Description of file contents.
*
* Copyright 1997-1999 by Easy Software Products, all rights
* reserved.
*
* These coded instructions, statements, and computer programs are
* the property of Easy Software Products and are protected by
* Federal copyright law. Distribution and use rights are outlined
* in the file &quot;LICENSE.txt&quot; which should have been included with
* this file. If this file is missing or damaged please contact
* Easy Software Products at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* function1() - Description 1.
* function2() - Description 2.
* function3() - Description 3.
*/
</PRE>
</UL>
The bottom of each source file shall contain a trailer giving the name
of the file using the CVS &quot;$Id: cmp.shtml,v 1.3 1999/05/21 20:54:04
mike Exp $&quot; tag. The primary purpose of this is to mark the end of a
source file; if the trailer is missing it is possible that code has
been lost near the end of the file:
<UL>
<PRE>
/*
* End of &quot;$Id$&quot;.
*/
</PRE>
</UL>
<H2><A NAME=7_2>B.2 Functions</A></H2>
<H3><A NAME=7_2_1>B.2.1 Naming</A></H3>
Functions with a global scope shall be capitalized (&quot;DoThis&quot;,
&quot;DoThat&quot;, &quot;DoSomethingElse&quot;, etc.) The only exception to this rule
shall be the CUPS interface library functions which may begin with a
prefix word in lowercase (&quot;cupsDoThis&quot;, &quot;cupsDoThat&quot;, etc.)
<P>Functions with a local scope shall be declared &quot;static&quot; and be
lowercase with underscores between words (&quot;do_this&quot;, &quot;do_that&quot;,
&quot;do_something_else&quot;, etc.) </P>
<H3><A NAME=7_2_2>B.2.2 Documentation</A></H3>
Each function shall begin with a comment header describing what the
function does, the possible input limits (if any), and the possible
output values (if any), and any special information needed:
<UL>
<PRE>
/*
* 'do_this()' - Compute y = this(x).
*
* Notes: none.
*/
static float /* O - Inverse power value, 0.0 &lt;= y &lt;= 1.0 */
do_this(float x) /* I - Power value (0.0 &lt;= x &lt;= 1.0) */
{
...
return (y);
}
</PRE>
</UL>
<H2><A NAME=7_3>B.3 Methods</A></H2>
<H3><A NAME=7_3_1>B.3.1 Naming</A></H3>
Methods shall be in lowercase with underscores between words
(&quot;do_this&quot;, &quot;do_that&quot;, &quot;do_something_else&quot;, etc.)
<H3><A NAME=7_3_2>B.3.2 Documentation</A></H3>
Each method shall begin with a comment header describing what the
method does, the possible input limits (if any), and the possible
output values (if any), and any special information needed:
<UL>
<PRE>
/*
* 'class::do_this()' - Compute y = this(x).
*
* Notes: none.
*/
float /* O - Inverse power value, 0.0 &lt;= y &lt;= 1.0 */
class::do_this(float x) /* I - Power value (0.0 &lt;= x &lt;= 1.0) */
{
...
return (y);
}
</PRE>
</UL>
<H2><A NAME=7_4>B.4 Variables</A></H2>
<H3><A NAME=7_4_1>B.4.1 Naming</A></H3>
Variables with a global scope shall be capitalized (&quot;ThisVariable&quot;,
&quot;ThatVariable&quot;, &quot;ThisStateVariable&quot;, etc.) The only exception to this
rule shall be the CUPS interface library global variables which must
begin with the prefix &quot;cups&quot; (&quot;cupsThisVariable&quot;, &quot;cupsThatVariable&quot;,
etc.) Global variables shall be replaced by function arguments whenever
possible.
<P>Variables with a local scope shall be lowercase with underscores
between words (&quot;this_variable&quot;, &quot;that_variable&quot;, etc.) Any local
variables shared by functions within a source file shall be declared
&quot;static&quot;. </P>
<H3><A NAME=7_4_2>B.4.2 Documentation</A></H3>
Each variable shall be declared on a separate line and shall be
immediately followed by a comment block describing the variable:
<UL>
<PRE>
int this_variable; /* The current state of this */
int that_variable; /* The current state of that */
</PRE>
</UL>
<H2><A NAME=7_5>B.5 Types</A></H2>
<H3><A NAME=7_5_1>B.5.1 Naming</A></H3>
All type names shall be lowercase with underscores between words and
&quot;_t&quot; appended to the end of the name (&quot;this_type_t&quot;, &quot;that_type_t&quot;,
etc.)
<H3><A NAME=7_5_2>B.5.2 Documentation</A></H3>
Each type shall have a comment block immediately before the typedef:
<UL>
<PRE>
/*
* This type is for CUPS foobar options.
*/
typedef int cups_this_type_t;
</PRE>
</UL>
<H2><A NAME=7_6>B.6 Structures</A></H2>
<H3><A NAME=7_6_1>B.6.1 Naming</A></H3>
All structure names shall be lowercase with underscores between words
and &quot;_str&quot; appended to the end of the name (&quot;this_struct_str&quot;,
&quot;that_struct_str&quot;, etc.)
<H3><A NAME=7_6_2>B.6.2 Documentation</A></H3>
Each structure shall have a comment block immediately before the
struct and each member shall be documented in accordance with the
variable naming policy above:
<UL>
<PRE>
/*
* This structure is for CUPS foobar options.
*/
struct cups_this_struct_str
{
int this_member; /* Current state for this */
int that_member; /* Current state for that */
};
</PRE>
</UL>
<H2><A NAME=7_7>B.7 Classes</A></H2>
<H3><A NAME=7_7_1>B.7.1 Naming</A></H3>
All class names shall be lowercase with underscores between words
(&quot;this_class&quot;, &quot;that_class&quot;, etc.)
<H3><A NAME=7_7_2>B.7.2 Documentation</A></H3>
Each class shall have a comment block immediately before the class and
each member shall be documented in accordance with the variable naming
policy above:
<UL>
<PRE>
/*
* This class is for CUPS foobar options.
*/
class cups_this_class
{
int this_member; /* Current state for this */
int that_member; /* Current state for that */
};
</PRE>
</UL>
<H2><A NAME=7_8>B.8 Constants</A></H2>
<H3><A NAME=7_8_1>B.8.1 Naming</A></H3>
All constant names shall be uppercase with underscored between words
(&quot;THIS_CONSTANT&quot;, &quot;THAT_CONSTANT&quot;, etc.) Constants defined for the CUPS
interface library must begin with an uppercase prefix
(&quot;CUPS_THIS_CONSTANT&quot;, &quot;CUPS_THAT_CONSTANT&quot;, etc.)
<P>Typed enumerations shall be used whenever possible to allow for type
checking by the compiler. </P>
<H3><A NAME=7_8_2>B.8.2 Documentation</A></H3>
Comment blocks shall immediately follow each constant:
<UL>
<PRE>
enum
{
CUPS_THIS_TRAY, /* This tray */
CUPS_THAT_TRAY /* That tray */
};
</PRE>
</UL>
<H2><A NAME=7_9>B.9 Code</A></H2>
<H3><A NAME=7_9_1>B.9.1 Documentation</A></H3>
All source code shall utilize block comments within functions to
describe the operations being performed by a group of statements:
<UL>
<PRE>
/*
* Clear the state array before we begin...
*/
for (i = 0; i &lt; (sizeof(array) / sizeof(sizeof(array[0])); i ++)
array[i] = STATE_IDLE;
/*
* Wait for state changes...
*/
do
{
for (i = 0; i &lt; (sizeof(array) / sizeof(sizeof(array[0])); i ++)
if (array[i] != STATE_IDLE)
break;
if (i == (sizeof(array) / sizeof(array[0])))
sleep(1);
} while (i == (sizeof(array) / sizeof(array[0])));
</PRE>
</UL>
<H3><A NAME=7_9_2>B.9.2 Style</A></H3>
<H4 TYPE=a>B.9.2.a Indentation</H4>
All code blocks enclosed by brackets shall begin with the opening
brace on a new line. The code then follows starting on a new line after
the brace and is indented 2 spaces. The closing brace is then placed on
a new line following the code at the original indentation:
<UL>
<PRE>
{
int i; /* Looping var */
/*
* Process foobar values from 0 to 999...
*/
for (i = 0; i &lt; 1000; i ++)
{
do_this(i);
do_that(i);
}
}
</PRE>
</UL>
Single-line statements following &quot;do&quot;, &quot;else&quot;, &quot;for&quot;, &quot;if&quot;, and
&quot;while&quot; shall be indented 2 spaces as well. Blocks of code in a
&quot;switch&quot; block shall be indented 4 spaces after each &quot;case&quot; and
&quot;default&quot; case:
<UL>
<PRE>
switch (array[i])
{
case STATE_IDLE :
do_this(i);
do_that(i);
break;
default :
do_nothing(i);
break;
}
</PRE>
</UL>
<H4>B.9.2.b Spacing</H4>
A space shall follow each reserved word (&quot;if&quot;, &quot;while&quot;, etc.) Spaces
shall not be inserted between a function name and the arguments in
parenthesis.
<H4>B.9.2.c Return Values</H4>
Parenthesis shall surround values returned from a function using
&quot;return&quot;:
<UL>
<PRE>
return (STATE_IDLE);
</PRE>
</UL>
<H4>B.9.2.d Loops</H4>
Whenever convenient loops should count downward to zero to improve
program performance:
<UL>
<PRE>
for (i = sizeof(array) / sizeof(array[0]) - 1; i &gt;= 0; i --)
array[i] = STATE_IDLE;
</PRE>
</UL>
<H1 ALIGN=RIGHT><A NAME=8>C Software Trouble Report Form</A></H1>
<CENTER>
<TABLE WIDTH=80%>
<TR><TH ALIGN=RIGHT>Summary of Problem:</TH><TD ALIGN=LEFT>
________________________________________</TD></TR>
<TR><TH ALIGN=RIGHT>Problem Severity:</TH><TD ALIGN=LEFT>__1=RFE
<BR>__2=Documentation-Error
<BR>__3=Unable-to-Print-a-File
<BR>__4=Unable-to-Print-to-a-Printer
<BR>__5=Unable-to-Print-at-All</TD></TR>
<TR><TH ALIGN=RIGHT>Problem Scope:</TH><TD ALIGN=LEFT>__1=Machine
__2=Operating-System __3=All</TD></TR>
<TR><TH ALIGN=RIGHT VALIGN=TOP>Detailed Description of Problem:</TH><TD ALIGN=LEFT>
________________________________________
<BR>________________________________________
<BR>________________________________________
<BR>________________________________________
<BR>________________________________________
<BR>________________________________________</TD></TR>
</TABLE>
</CENTER>
</BODY>
</HTML>
-963
Ver Arquivo
@@ -1,963 +0,0 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990521210307Z)/Title(CUPS Configuration Management Plan)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj
7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
10 0 obj<</Subtype/Link/Rect[72.0 673.2 80.2 686.2]/Border[0 0 0]/Dest[198 0 R/XYZ null 818 0]>>endobj
11 0 obj<</Subtype/Link/Rect[80.2 673.2 107.8 686.2]/Border[0 0 0]/Dest[198 0 R/XYZ null 818 0]>>endobj
12 0 obj<</Subtype/Link/Rect[108.0 660.0 124.5 673.0]/Border[0 0 0]/Dest[198 0 R/XYZ null 737 0]>>endobj
13 0 obj<</Subtype/Link/Rect[124.5 660.0 183.8 673.0]/Border[0 0 0]/Dest[198 0 R/XYZ null 737 0]>>endobj
14 0 obj<</Subtype/Link/Rect[108.0 646.8 124.5 659.8]/Border[0 0 0]/Dest[198 0 R/XYZ null 658 0]>>endobj
15 0 obj<</Subtype/Link/Rect[124.5 646.8 159.6 659.8]/Border[0 0 0]/Dest[198 0 R/XYZ null 658 0]>>endobj
16 0 obj<</Subtype/Link/Rect[159.6 646.8 203.0 659.8]/Border[0 0 0]/Dest[198 0 R/XYZ null 658 0]>>endobj
17 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 434 0]>>endobj
18 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 434 0]>>endobj
19 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 434 0]>>endobj
20 0 obj<</Subtype/Link/Rect[72.0 607.2 80.2 620.2]/Border[0 0 0]/Dest[204 0 R/XYZ null 818 0]>>endobj
21 0 obj<</Subtype/Link/Rect[80.2 607.2 131.6 620.2]/Border[0 0 0]/Dest[204 0 R/XYZ null 818 0]>>endobj
22 0 obj<</Subtype/Link/Rect[108.0 594.0 124.5 607.0]/Border[0 0 0]/Dest[204 0 R/XYZ null 737 0]>>endobj
23 0 obj<</Subtype/Link/Rect[124.5 594.0 154.8 607.0]/Border[0 0 0]/Dest[204 0 R/XYZ null 737 0]>>endobj
24 0 obj<</Subtype/Link/Rect[154.8 594.0 222.6 607.0]/Border[0 0 0]/Dest[204 0 R/XYZ null 737 0]>>endobj
25 0 obj<</Subtype/Link/Rect[108.0 580.8 124.5 593.8]/Border[0 0 0]/Dest[204 0 R/XYZ null 540 0]>>endobj
26 0 obj<</Subtype/Link/Rect[124.5 580.8 152.3 593.8]/Border[0 0 0]/Dest[204 0 R/XYZ null 540 0]>>endobj
27 0 obj<</Subtype/Link/Rect[152.3 580.8 202.4 593.8]/Border[0 0 0]/Dest[204 0 R/XYZ null 540 0]>>endobj
28 0 obj<</Subtype/Link/Rect[72.0 554.4 80.2 567.4]/Border[0 0 0]/Dest[210 0 R/XYZ null 818 0]>>endobj
29 0 obj<</Subtype/Link/Rect[80.2 554.4 100.7 567.4]/Border[0 0 0]/Dest[210 0 R/XYZ null 818 0]>>endobj
30 0 obj<</Subtype/Link/Rect[100.7 554.4 162.4 567.4]/Border[0 0 0]/Dest[210 0 R/XYZ null 818 0]>>endobj
31 0 obj<</Subtype/Link/Rect[108.0 541.2 124.5 554.2]/Border[0 0 0]/Dest[210 0 R/XYZ null 737 0]>>endobj
32 0 obj<</Subtype/Link/Rect[124.5 541.2 169.4 554.2]/Border[0 0 0]/Dest[210 0 R/XYZ null 737 0]>>endobj
33 0 obj<</Subtype/Link/Rect[169.4 541.2 209.7 554.2]/Border[0 0 0]/Dest[210 0 R/XYZ null 737 0]>>endobj
34 0 obj<</Subtype/Link/Rect[108.0 528.0 124.5 541.0]/Border[0 0 0]/Dest[210 0 R/XYZ null 645 0]>>endobj
35 0 obj<</Subtype/Link/Rect[124.5 528.0 157.8 541.0]/Border[0 0 0]/Dest[210 0 R/XYZ null 645 0]>>endobj
36 0 obj<</Subtype/Link/Rect[157.8 528.0 179.2 541.0]/Border[0 0 0]/Dest[210 0 R/XYZ null 645 0]>>endobj
37 0 obj<</Subtype/Link/Rect[108.0 514.8 124.5 527.8]/Border[0 0 0]/Dest[210 0 R/XYZ null 579 0]>>endobj
38 0 obj<</Subtype/Link/Rect[124.5 514.8 189.0 527.8]/Border[0 0 0]/Dest[210 0 R/XYZ null 579 0]>>endobj
39 0 obj<</Subtype/Link/Rect[189.0 514.8 246.4 527.8]/Border[0 0 0]/Dest[210 0 R/XYZ null 579 0]>>endobj
40 0 obj<</Subtype/Link/Rect[72.0 488.4 80.2 501.4]/Border[0 0 0]/Dest[216 0 R/XYZ null 818 0]>>endobj
41 0 obj<</Subtype/Link/Rect[80.2 488.4 120.9 501.4]/Border[0 0 0]/Dest[216 0 R/XYZ null 818 0]>>endobj
42 0 obj<</Subtype/Link/Rect[120.9 488.4 156.6 501.4]/Border[0 0 0]/Dest[216 0 R/XYZ null 818 0]>>endobj
43 0 obj<</Subtype/Link/Rect[156.6 488.4 206.7 501.4]/Border[0 0 0]/Dest[216 0 R/XYZ null 818 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 475.2 124.5 488.2]/Border[0 0 0]/Dest[216 0 R/XYZ null 624 0]>>endobj
45 0 obj<</Subtype/Link/Rect[124.5 475.2 185.0 488.2]/Border[0 0 0]/Dest[216 0 R/XYZ null 624 0]>>endobj
46 0 obj<</Subtype/Link/Rect[108.0 462.0 124.5 475.0]/Border[0 0 0]/Dest[216 0 R/XYZ null 400 0]>>endobj
47 0 obj<</Subtype/Link/Rect[124.5 462.0 183.8 475.0]/Border[0 0 0]/Dest[216 0 R/XYZ null 400 0]>>endobj
48 0 obj<</Subtype/Link/Rect[108.0 448.8 124.5 461.8]/Border[0 0 0]/Dest[216 0 R/XYZ null 268 0]>>endobj
49 0 obj<</Subtype/Link/Rect[124.5 448.8 171.5 461.8]/Border[0 0 0]/Dest[216 0 R/XYZ null 268 0]>>endobj
50 0 obj<</Subtype/Link/Rect[108.0 435.6 124.5 448.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 800 0]>>endobj
51 0 obj<</Subtype/Link/Rect[124.5 435.6 177.7 448.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 800 0]>>endobj
52 0 obj<</Subtype/Link/Rect[72.0 409.2 80.2 422.2]/Border[0 0 0]/Dest[222 0 R/XYZ null 818 0]>>endobj
53 0 obj<</Subtype/Link/Rect[80.2 409.2 125.2 422.2]/Border[0 0 0]/Dest[222 0 R/XYZ null 818 0]>>endobj
54 0 obj<</Subtype/Link/Rect[125.2 409.2 164.9 422.2]/Border[0 0 0]/Dest[222 0 R/XYZ null 818 0]>>endobj
55 0 obj<</Subtype/Link/Rect[108.0 396.0 124.5 409.0]/Border[0 0 0]/Dest[222 0 R/XYZ null 737 0]>>endobj
56 0 obj<</Subtype/Link/Rect[124.5 396.0 162.1 409.0]/Border[0 0 0]/Dest[222 0 R/XYZ null 737 0]>>endobj
57 0 obj<</Subtype/Link/Rect[162.1 396.0 212.2 409.0]/Border[0 0 0]/Dest[222 0 R/XYZ null 737 0]>>endobj
58 0 obj<</Subtype/Link/Rect[108.0 382.8 124.5 395.8]/Border[0 0 0]/Dest[222 0 R/XYZ null 309 0]>>endobj
59 0 obj<</Subtype/Link/Rect[124.5 382.8 173.4 395.8]/Border[0 0 0]/Dest[222 0 R/XYZ null 309 0]>>endobj
60 0 obj<</Subtype/Link/Rect[108.0 369.6 124.5 382.6]/Border[0 0 0]/Dest[222 0 R/XYZ null 230 0]>>endobj
61 0 obj<</Subtype/Link/Rect[124.5 369.6 157.5 382.6]/Border[0 0 0]/Dest[222 0 R/XYZ null 230 0]>>endobj
62 0 obj<</Subtype/Link/Rect[108.0 356.4 124.5 369.4]/Border[0 0 0]/Dest[225 0 R/XYZ null 800 0]>>endobj
63 0 obj<</Subtype/Link/Rect[124.5 356.4 158.7 369.4]/Border[0 0 0]/Dest[225 0 R/XYZ null 800 0]>>endobj
64 0 obj<</Subtype/Link/Rect[72.0 330.0 82.7 343.0]/Border[0 0 0]/Dest[228 0 R/XYZ null 818 0]>>endobj
65 0 obj<</Subtype/Link/Rect[82.7 330.0 124.2 343.0]/Border[0 0 0]/Dest[228 0 R/XYZ null 818 0]>>endobj
66 0 obj<</Subtype/Link/Rect[108.0 316.8 126.9 329.8]/Border[0 0 0]/Dest[228 0 R/XYZ null 737 0]>>endobj
67 0 obj<</Subtype/Link/Rect[126.9 316.8 155.0 329.8]/Border[0 0 0]/Dest[228 0 R/XYZ null 737 0]>>endobj
68 0 obj<</Subtype/Link/Rect[108.0 303.6 126.9 316.6]/Border[0 0 0]/Dest[228 0 R/XYZ null 434 0]>>endobj
69 0 obj<</Subtype/Link/Rect[126.9 303.6 172.8 316.6]/Border[0 0 0]/Dest[228 0 R/XYZ null 434 0]>>endobj
70 0 obj<</Subtype/Link/Rect[72.0 277.2 82.1 290.2]/Border[0 0 0]/Dest[234 0 R/XYZ null 818 0]>>endobj
71 0 obj<</Subtype/Link/Rect[82.1 277.2 119.1 290.2]/Border[0 0 0]/Dest[234 0 R/XYZ null 818 0]>>endobj
72 0 obj<</Subtype/Link/Rect[119.1 277.2 185.1 290.2]/Border[0 0 0]/Dest[234 0 R/XYZ null 818 0]>>endobj
73 0 obj<</Subtype/Link/Rect[108.0 264.0 126.3 277.0]/Border[0 0 0]/Dest[234 0 R/XYZ null 717 0]>>endobj
74 0 obj<</Subtype/Link/Rect[126.3 264.0 159.6 277.0]/Border[0 0 0]/Dest[234 0 R/XYZ null 717 0]>>endobj
75 0 obj<</Subtype/Link/Rect[159.6 264.0 181.0 277.0]/Border[0 0 0]/Dest[234 0 R/XYZ null 717 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 250.8 170.6 263.8]/Border[0 0 0]/Dest[234 0 R/XYZ null 647 0]>>endobj
77 0 obj<</Subtype/Link/Rect[170.6 250.8 206.0 263.8]/Border[0 0 0]/Dest[234 0 R/XYZ null 647 0]>>endobj
78 0 obj<</Subtype/Link/Rect[144.0 237.6 170.6 250.6]/Border[0 0 0]/Dest[234 0 R/XYZ null 561 0]>>endobj
79 0 obj<</Subtype/Link/Rect[170.6 237.6 238.4 250.6]/Border[0 0 0]/Dest[234 0 R/XYZ null 561 0]>>endobj
80 0 obj<</Subtype/Link/Rect[108.0 224.4 126.3 237.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 721 0]>>endobj
81 0 obj<</Subtype/Link/Rect[126.3 224.4 169.7 237.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 721 0]>>endobj
82 0 obj<</Subtype/Link/Rect[144.0 211.2 170.6 224.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 651 0]>>endobj
83 0 obj<</Subtype/Link/Rect[170.6 211.2 206.0 224.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 651 0]>>endobj
84 0 obj<</Subtype/Link/Rect[144.0 198.0 170.6 211.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 526 0]>>endobj
85 0 obj<</Subtype/Link/Rect[170.6 198.0 238.4 211.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 526 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 184.8 126.3 197.8]/Border[0 0 0]/Dest[237 0 R/XYZ null 323 0]>>endobj
87 0 obj<</Subtype/Link/Rect[126.3 184.8 164.8 197.8]/Border[0 0 0]/Dest[237 0 R/XYZ null 323 0]>>endobj
88 0 obj<</Subtype/Link/Rect[144.0 171.6 170.6 184.6]/Border[0 0 0]/Dest[237 0 R/XYZ null 253 0]>>endobj
89 0 obj<</Subtype/Link/Rect[170.6 171.6 206.0 184.6]/Border[0 0 0]/Dest[237 0 R/XYZ null 253 0]>>endobj
90 0 obj<</Subtype/Link/Rect[144.0 158.4 170.6 171.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 181 0]>>endobj
91 0 obj<</Subtype/Link/Rect[170.6 158.4 238.4 171.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 181 0]>>endobj
92 0 obj<</Subtype/Link/Rect[108.0 145.2 126.3 158.2]/Border[0 0 0]/Dest[240 0 R/XYZ null 648 0]>>endobj
93 0 obj<</Subtype/Link/Rect[126.3 145.2 168.5 158.2]/Border[0 0 0]/Dest[240 0 R/XYZ null 648 0]>>endobj
94 0 obj<</Subtype/Link/Rect[144.0 132.0 170.6 145.0]/Border[0 0 0]/Dest[240 0 R/XYZ null 578 0]>>endobj
95 0 obj<</Subtype/Link/Rect[170.6 132.0 206.0 145.0]/Border[0 0 0]/Dest[240 0 R/XYZ null 578 0]>>endobj
96 0 obj<</Subtype/Link/Rect[144.0 118.8 170.6 131.8]/Border[0 0 0]/Dest[240 0 R/XYZ null 440 0]>>endobj
97 0 obj<</Subtype/Link/Rect[170.6 118.8 238.4 131.8]/Border[0 0 0]/Dest[240 0 R/XYZ null 440 0]>>endobj
98 0 obj<</Subtype/Link/Rect[108.0 105.6 126.3 118.6]/Border[0 0 0]/Dest[240 0 R/XYZ null 348 0]>>endobj
99 0 obj<</Subtype/Link/Rect[126.3 105.6 153.2 118.6]/Border[0 0 0]/Dest[240 0 R/XYZ null 348 0]>>endobj
100 0 obj<</Subtype/Link/Rect[144.0 92.4 170.6 105.4]/Border[0 0 0]/Dest[240 0 R/XYZ null 277 0]>>endobj
101 0 obj<</Subtype/Link/Rect[170.6 92.4 206.0 105.4]/Border[0 0 0]/Dest[240 0 R/XYZ null 277 0]>>endobj
102 0 obj<</Subtype/Link/Rect[144.0 79.2 170.6 92.2]/Border[0 0 0]/Dest[240 0 R/XYZ null 205 0]>>endobj
103 0 obj<</Subtype/Link/Rect[170.6 79.2 238.4 92.2]/Border[0 0 0]/Dest[240 0 R/XYZ null 205 0]>>endobj
104 0 obj<</Subtype/Link/Rect[108.0 66.0 126.3 79.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 769 0]>>endobj
105 0 obj<</Subtype/Link/Rect[126.3 66.0 170.9 79.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 769 0]>>endobj
106 0 obj[10 0 R
11 0 R
12 0 R
13 0 R
14 0 R
15 0 R
16 0 R
17 0 R
18 0 R
19 0 R
20 0 R
21 0 R
22 0 R
23 0 R
24 0 R
25 0 R
26 0 R
27 0 R
28 0 R
29 0 R
30 0 R
31 0 R
32 0 R
33 0 R
34 0 R
35 0 R
36 0 R
37 0 R
38 0 R
39 0 R
40 0 R
41 0 R
42 0 R
43 0 R
44 0 R
45 0 R
46 0 R
47 0 R
48 0 R
49 0 R
50 0 R
51 0 R
52 0 R
53 0 R
54 0 R
55 0 R
56 0 R
57 0 R
58 0 R
59 0 R
60 0 R
61 0 R
62 0 R
63 0 R
64 0 R
65 0 R
66 0 R
67 0 R
68 0 R
69 0 R
70 0 R
71 0 R
72 0 R
73 0 R
74 0 R
75 0 R
76 0 R
77 0 R
78 0 R
79 0 R
80 0 R
81 0 R
82 0 R
83 0 R
84 0 R
85 0 R
86 0 R
87 0 R
88 0 R
89 0 R
90 0 R
91 0 R
92 0 R
93 0 R
94 0 R
95 0 R
96 0 R
97 0 R
98 0 R
99 0 R
100 0 R
101 0 R
102 0 R
103 0 R
104 0 R
105 0 R
]endobj
107 0 obj<</Subtype/Link/Rect[108.0 673.2 134.6 686.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 699 0]>>endobj
108 0 obj<</Subtype/Link/Rect[134.6 673.2 170.0 686.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 699 0]>>endobj
109 0 obj<</Subtype/Link/Rect[108.0 660.0 134.6 673.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 627 0]>>endobj
110 0 obj<</Subtype/Link/Rect[134.6 660.0 202.4 673.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 627 0]>>endobj
111 0 obj<</Subtype/Link/Rect[72.0 646.8 90.3 659.8]/Border[0 0 0]/Dest[243 0 R/XYZ null 469 0]>>endobj
112 0 obj<</Subtype/Link/Rect[90.3 646.8 123.3 659.8]/Border[0 0 0]/Dest[243 0 R/XYZ null 469 0]>>endobj
113 0 obj<</Subtype/Link/Rect[108.0 633.6 134.6 646.6]/Border[0 0 0]/Dest[243 0 R/XYZ null 398 0]>>endobj
114 0 obj<</Subtype/Link/Rect[134.6 633.6 170.0 646.6]/Border[0 0 0]/Dest[243 0 R/XYZ null 398 0]>>endobj
115 0 obj<</Subtype/Link/Rect[108.0 620.4 134.6 633.4]/Border[0 0 0]/Dest[243 0 R/XYZ null 339 0]>>endobj
116 0 obj<</Subtype/Link/Rect[134.6 620.4 202.4 633.4]/Border[0 0 0]/Dest[243 0 R/XYZ null 339 0]>>endobj
117 0 obj<</Subtype/Link/Rect[72.0 607.2 90.3 620.2]/Border[0 0 0]/Dest[246 0 R/XYZ null 800 0]>>endobj
118 0 obj<</Subtype/Link/Rect[90.3 607.2 133.7 620.2]/Border[0 0 0]/Dest[246 0 R/XYZ null 800 0]>>endobj
119 0 obj<</Subtype/Link/Rect[108.0 594.0 134.6 607.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 729 0]>>endobj
120 0 obj<</Subtype/Link/Rect[134.6 594.0 170.0 607.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 729 0]>>endobj
121 0 obj<</Subtype/Link/Rect[108.0 580.8 134.6 593.8]/Border[0 0 0]/Dest[246 0 R/XYZ null 618 0]>>endobj
122 0 obj<</Subtype/Link/Rect[134.6 580.8 202.4 593.8]/Border[0 0 0]/Dest[246 0 R/XYZ null 618 0]>>endobj
123 0 obj<</Subtype/Link/Rect[72.0 567.6 90.3 580.6]/Border[0 0 0]/Dest[246 0 R/XYZ null 505 0]>>endobj
124 0 obj<</Subtype/Link/Rect[90.3 567.6 113.6 580.6]/Border[0 0 0]/Dest[246 0 R/XYZ null 505 0]>>endobj
125 0 obj<</Subtype/Link/Rect[108.0 554.4 134.6 567.4]/Border[0 0 0]/Dest[246 0 R/XYZ null 435 0]>>endobj
126 0 obj<</Subtype/Link/Rect[134.6 554.4 202.4 567.4]/Border[0 0 0]/Dest[246 0 R/XYZ null 435 0]>>endobj
127 0 obj<</Subtype/Link/Rect[108.0 541.2 134.6 554.2]/Border[0 0 0]/Dest[249 0 R/XYZ null 782 0]>>endobj
128 0 obj<</Subtype/Link/Rect[134.6 541.2 157.2 554.2]/Border[0 0 0]/Dest[249 0 R/XYZ null 782 0]>>endobj
129 0 obj<</Subtype/Link/Rect[36.0 514.8 46.7 527.8]/Border[0 0 0]/Dest[252 0 R/XYZ null 818 0]>>endobj
130 0 obj<</Subtype/Link/Rect[46.7 514.8 91.6 527.8]/Border[0 0 0]/Dest[252 0 R/XYZ null 818 0]>>endobj
131 0 obj<</Subtype/Link/Rect[91.6 514.8 132.2 527.8]/Border[0 0 0]/Dest[252 0 R/XYZ null 818 0]>>endobj
132 0 obj<</Subtype/Link/Rect[132.2 514.8 168.0 527.8]/Border[0 0 0]/Dest[252 0 R/XYZ null 818 0]>>endobj
133 0 obj<</Subtype/Link/Rect[168.0 514.8 194.2 527.8]/Border[0 0 0]/Dest[252 0 R/XYZ null 818 0]>>endobj
134 0 obj[107 0 R
108 0 R
109 0 R
110 0 R
111 0 R
112 0 R
113 0 R
114 0 R
115 0 R
116 0 R
117 0 R
118 0 R
119 0 R
120 0 R
121 0 R
122 0 R
123 0 R
124 0 R
125 0 R
126 0 R
127 0 R
128 0 R
129 0 R
130 0 R
131 0 R
132 0 R
133 0 R
]endobj
135 0 obj<</Dests 136 0 R>>endobj
136 0 obj<</Kids[137 0 R]>>endobj
137 0 obj<</Limits[(1)(8)]/Names[(1)138 0 R(1_1)139 0 R(1_2)140 0 R(1_3)141 0 R(2)142 0 R(2_1)143 0 R(2_2)144 0 R(3)145 0 R(3_1)146 0 R(3_2)147 0 R(3_3)148 0 R(4)149 0 R(4_1)150 0 R(4_2)151 0 R(4_3)152 0 R(4_4)153 0 R(5)154 0 R(5_1)155 0 R(5_2)156 0 R(5_3)157 0 R(5_4)158 0 R(6)159 0 R(6_1)160 0 R(6_2)161 0 R(7)162 0 R(7_1)163 0 R(7_1_1)164 0 R(7_1_2)165 0 R(7_2)166 0 R(7_2_1)167 0 R(7_2_2)168 0 R(7_3)169 0 R(7_3_1)170 0 R(7_3_2)171 0 R(7_4)172 0 R(7_4_1)173 0 R(7_4_2)174 0 R(7_5)175 0 R(7_5_1)176 0 R(7_5_2)177 0 R(7_6)178 0 R(7_6_1)179 0 R(7_6_2)180 0 R(7_7)181 0 R(7_7_1)182 0 R(7_7_2)183 0 R(7_8)184 0 R(7_8_1)185 0 R(7_8_2)186 0 R(7_9)187 0 R(7_9_1)188 0 R(7_9_2)189 0 R(8)190 0 R]>>endobj
138 0 obj<</D[198 0 R/XYZ null 818 null]>>endobj
139 0 obj<</D[198 0 R/XYZ null 737 null]>>endobj
140 0 obj<</D[198 0 R/XYZ null 658 null]>>endobj
141 0 obj<</D[198 0 R/XYZ null 434 null]>>endobj
142 0 obj<</D[204 0 R/XYZ null 818 null]>>endobj
143 0 obj<</D[204 0 R/XYZ null 737 null]>>endobj
144 0 obj<</D[204 0 R/XYZ null 540 null]>>endobj
145 0 obj<</D[210 0 R/XYZ null 818 null]>>endobj
146 0 obj<</D[210 0 R/XYZ null 737 null]>>endobj
147 0 obj<</D[210 0 R/XYZ null 645 null]>>endobj
148 0 obj<</D[210 0 R/XYZ null 579 null]>>endobj
149 0 obj<</D[216 0 R/XYZ null 818 null]>>endobj
150 0 obj<</D[216 0 R/XYZ null 624 null]>>endobj
151 0 obj<</D[216 0 R/XYZ null 400 null]>>endobj
152 0 obj<</D[216 0 R/XYZ null 268 null]>>endobj
153 0 obj<</D[219 0 R/XYZ null 800 null]>>endobj
154 0 obj<</D[222 0 R/XYZ null 818 null]>>endobj
155 0 obj<</D[222 0 R/XYZ null 737 null]>>endobj
156 0 obj<</D[222 0 R/XYZ null 309 null]>>endobj
157 0 obj<</D[222 0 R/XYZ null 230 null]>>endobj
158 0 obj<</D[225 0 R/XYZ null 800 null]>>endobj
159 0 obj<</D[228 0 R/XYZ null 818 null]>>endobj
160 0 obj<</D[228 0 R/XYZ null 737 null]>>endobj
161 0 obj<</D[228 0 R/XYZ null 434 null]>>endobj
162 0 obj<</D[234 0 R/XYZ null 818 null]>>endobj
163 0 obj<</D[234 0 R/XYZ null 717 null]>>endobj
164 0 obj<</D[234 0 R/XYZ null 647 null]>>endobj
165 0 obj<</D[234 0 R/XYZ null 561 null]>>endobj
166 0 obj<</D[237 0 R/XYZ null 721 null]>>endobj
167 0 obj<</D[237 0 R/XYZ null 651 null]>>endobj
168 0 obj<</D[237 0 R/XYZ null 526 null]>>endobj
169 0 obj<</D[237 0 R/XYZ null 323 null]>>endobj
170 0 obj<</D[237 0 R/XYZ null 253 null]>>endobj
171 0 obj<</D[237 0 R/XYZ null 181 null]>>endobj
172 0 obj<</D[240 0 R/XYZ null 648 null]>>endobj
173 0 obj<</D[240 0 R/XYZ null 578 null]>>endobj
174 0 obj<</D[240 0 R/XYZ null 440 null]>>endobj
175 0 obj<</D[240 0 R/XYZ null 348 null]>>endobj
176 0 obj<</D[240 0 R/XYZ null 277 null]>>endobj
177 0 obj<</D[240 0 R/XYZ null 205 null]>>endobj
178 0 obj<</D[243 0 R/XYZ null 769 null]>>endobj
179 0 obj<</D[243 0 R/XYZ null 699 null]>>endobj
180 0 obj<</D[243 0 R/XYZ null 627 null]>>endobj
181 0 obj<</D[243 0 R/XYZ null 469 null]>>endobj
182 0 obj<</D[243 0 R/XYZ null 398 null]>>endobj
183 0 obj<</D[243 0 R/XYZ null 339 null]>>endobj
184 0 obj<</D[246 0 R/XYZ null 800 null]>>endobj
185 0 obj<</D[246 0 R/XYZ null 729 null]>>endobj
186 0 obj<</D[246 0 R/XYZ null 618 null]>>endobj
187 0 obj<</D[246 0 R/XYZ null 505 null]>>endobj
188 0 obj<</D[246 0 R/XYZ null 435 null]>>endobj
189 0 obj<</D[249 0 R/XYZ null 782 null]>>endobj
190 0 obj<</D[252 0 R/XYZ null 818 null]>>endobj
191 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 24/Kids[192 0 R
195 0 R
258 0 R
261 0 R
198 0 R
201 0 R
204 0 R
207 0 R
210 0 R
213 0 R
216 0 R
219 0 R
222 0 R
225 0 R
228 0 R
231 0 R
234 0 R
237 0 R
240 0 R
243 0 R
246 0 R
249 0 R
252 0 R
255 0 R
]>>endobj
192 0 obj<</Type/Page/Parent 191 0 R/Contents 193 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
193 0 obj<</Length 194 0 R/Filter/FlateDecode>>stream
xÚíßoÜ8’Ç¥nõKždOú;àâ´wfŠmí](IîápÁNfn³3·™Ìö¿¿þåný ¥ª"%Q^s€Aân~Äâ·ŠdQý××bµùïZ|{#Þ¾þË‹;ù"–/þ*Þ®¾»úv÷oß½»Z‰ïÞ_݈››ë«Û]­oî³ÿ|óñMúowbý¯«]y»+ïvåý®ÜïÊÿõæ£øúå÷ÏoþCܾ½~óïb}}ýæîÅ­øøð"šž¹ÌŠ|¸Y,gÛ²ùÃâöaì\ò~qzªrv~ù0N.ys¡F*À-nGÆ%oÚ˜Ëùe<.<Ôív ¹ø‹Øq®»Ðã•óµÃ\7\*›æÎŒ•Ý1³Ìu/<óòMìWváY)þ¥S\7žµ2Y;Ã%…g³\:Âe¬v‡Ì—¼ð¬ÿÕà\YèuQ¾˜ëÎë¨Lâ!¹®½ÎŠ¿ŒË²Z·±6åÕ \2ô<ÁÀI!,——½sõ‚Ń`qÀ` X 0pZ2øâãÀò¼eO\û-3Íæêk÷Áµòz/“¸>x”iç\©7HyÙ1WÃEEp_áYÚcB†vÀH4ƒ:Åè\™7hYwÅË…œb0‡Ìñb0ÏE{"—Ëó;àpyu®Ôs¢¬-sÉÐ
®‰e®•çH™[åJ=gJl‘Ë+D91Wä9TÖÖ¸2—°Z¥Æ'¨¨F(˜¨FiàµË•¸†Õ2`0>G
ŒPã1ÎÇ%]ÄjŒëaŒ˜a0>—ŒšaÐßp/¯¶ån{ñ¡Ûƒ^†Ë?UŸäÛ{
t?\~CÒ¿¼¿èfÀ ëá:o]*Ý -
¸VÝ UqÔÖÃzèp¸éÇ’›¼fs±C
Zº8“lÊåâ†ôôÜŒµdˆ™\Ìáb¥Ss†,`r±yn6$cÈ|¶[²%+ìËÞ,´"õ`WÃ$í“l°fp‰Þ¦?ó* se`‘Á|:Yä};W$…±r4s
„E›R¹’ŒcŠ1‘K …E›Ó¸2+ ¹0°·ðz™[-©‘!‚µHÞ2éö՜•XgŒÊÊàÃÁ’jø±}.Bb<—4ÒLKÆ7D= :¹öåÛÁÊ
e’wT×Á†Ìv2¹h“aŽåІrÈ<Qž`¹f8Í;,gˆ`n†ÝY!E—8®•VHèI€ãr@ iÒ᣸Ò=2CÁÖ'a3 Wè†hP´~‚àJùÙp·sE®ˆeÀ–í\¡#OêOÐÊ•º5\È›´rEŽ
Ò‡Åm\¡cÃ…|Òó®Ì—LëRЕ87\¸(qÒÂ%›]h)‹¹¤ƒÃ…›óËF®ÔÁáÂm#\H•÷{ÅBYѤ‘+t(2$*GVå{ÆBMuR僾¹r
Wå×½s! qÚÀåÀÞÛ'z®ÔE‘G Z¬åE퀖Z.á¨jàLi¦ã’®ªnêOu\)-4,{²Óß*Æþøs8<Ó¤¤Ê)ÖϯðV5Gq͵\²ôp£¦„V¢k5\k4rMµ\‡ÆqHüÎô
p\žž
ê•áÃM¶$àL¯%k©åÊ
ϰfˆ™%š ˆÎ«™+Ðrímor„‰%¥Ÿ¨¹Ñy5sMô\'­”Uú™#8\b¹KÁuÒöo†¥U\5†jášk¹N"QöJìCúÚ+ÀsMõ\Ñã#
)‹ï +ˆ@^k—Bù.OÏ•~WF1CÄD T\!Ñ [¹–Z®ýgÍö?ÂoÙµ
ÛTÁ%©fØÊè¹V{ Q?C5Únó\)Õ [¹|=×þÈ˃)ˆ@öÊ1–kz¬­äÚÇ!Õ+Or,×,|”'%WA¤(«T³' ÊÆÏ=>5WÂZ¥¶†ˆ³WF6Ãf®´„S㒬͒§k@”IŽç’f¡æ:ši³$Ãõˆkå€Àµëx çJX{v8¡¢l,)\pø
—díÙµö²ÆÅH_læÊ¢ á:t‘¸g¡º4Ù˜ä®ü ô:.à8%(“šlÌh\¥×qEœñJQžh²±¤q”^Çræ—D={ࢸJ¯áJyg!F²mLˆ\¥×pE¼Íþ¶ç?-sIÆôjåÚ+½†+äÎD˜‡$ÙXR¹öJ¯æÊ˜§ Æ1io#§rí•^Íz30‹¤Ê\czµsí”^Í%˜™;ã˜EuGúuå‚aˆm·.q±•˱•‚k×{¡âÚÛ½d„ÑM DQ±úÑÅEñË\§NT¹Ä^“ÝWˆ€XYe®eñÑT¹@Ãõ8P„Óì6̬ȅس™jLb^TÔI…+Óp%žŒnˆ B€ ‡sILë©îÖ¹V}Z‰ö´%.Á‘ÒѰ,ø¢W¤ä’ǬȆ(v„èPkA`YåJ•\ɱrB}:øèp¢÷ýÛWÚ\5³æ§ª\«£ÆHz¾UˆçÊ8^ùôþY^W”¹
¿Qc_Ñ >:œc|ɬΕ(¸Š©(Ùðr¸ÆhS\çÊ\E½IÉ‹0Às­X²Q³‰i^ç:Øj‰+,NXò"L>4——`ÉFuboï)ÖÅE®rFÔªƒŒF §ŠUÊ•‡Sìc¹¢’a'¤þZµ‹¿Ó{M^åJ.Yã
K–—uª è¨Wo'ÙîŧþyWH©\ SË~²ºÇÕÍûù¨
`e~2J.Á‹¢œç
yQ”ë\ÒDæÊ åÐU®”:Ε<59<pEìèÐm®?:tšK<5™?p…OM\œ­ùpÉ''ó{®ôÉÉ<–k2_\Î-»ÍËý·•œ¯ \[æ‹uÎתŸzg—¥m¿Ónoí:Ÿ2Únk¤Ùdœ[^"¸Nû6ÕÉ+¹æ®¹š«8“^¹Û}©ñ5ªSéâ”Ã5Ureêóåí¾Ô3®tÑãpyJ.¡>wàoÚ¨íU—›Zéâ’õTp%u•”[ž`¹¦šðe©â
8\+¬?FË\{ƒÕåÎUº8ápMê\¢áŸ…G»”[Ð\K5—¯âª^çCqÕîå|ëOîÃÙà¸f\»?Ý ¯ÔƒYÙ±Ä*®¹Ò•ãQD£¢“y<lT¸1oç:¼Z;uøà•®»8åpÕ¥%pø8@mb/\…´”òŸr{ª]ô8\µFåC§C Â¨5†ë”F¤È’Ÿ)»¸äpU‰r`¾£ '\žmæ’®HÏp¸ª*3eg–@…Q9†ëôEö¿šËçpUU/žJ<—ß—â:_;—¢QZu°‹M¹Lx81çªë†â:_;—î` Z/{v¸¤†k¥ÖyÅu>W½Q¤t°€ £‚ÜDÃcÎm¹‹õë|®z#¡tD(®Š+Uû¯TG)®ó!¸ê´\©%®HoÜŸÂJë×ù\õF¡Ò¡¸æ.éÕ¹q¢¸Î‡áª5Òr%ü0ªÐ‡ÃW4.ÑëJÅu> W­Q±úéQ\ëÜpý5Wv±vÃUk¤å~•«F³«ZëâA´i\ÕF\9š+PýÔ5]¬^çCqUi¹"\kõ(Æê.V¯ó¡¸ª´\+~x˜«
N³½_ëbõ:Š«Ú(¬¤©¹„5.?ÖpBÕR+×ùp\•F|® ’Ë_~zðˇm¹º‹•ë|8®J#QPìWh‡«XŒ7öÛº‹•ë|8®J£Z•`¹‚·NÉU\…÷C)º¸m*W¹ÑªE.¯[®´‰«|É¥¸Xìâ
Ë53âÊtñü1¨D®r£¤:UÂ=—ì˜Kjnq(®ó!¹ÊÒŠdKË57âʹ€ÃUj$+¡yâWÆá*7
ËL¸Úsr•®óa¹Ê"E2þ†+–+âp•%§SåÓ&ïà\)‡«ÔH{™ã
“e¥.Éá*7§ó¯;ÀwÉU¼Î‡æ*7Jjç•.p%®r£J$(v\&ËeWØÌ•q¸ÊÊ+ã`åWá:ž«Ò¨4`qÔ#×ZßňÃUnTN#‚Wëö†oÈ%¼âíLðS¹*>I?\Ç7hº(9\ÕFw…­ \î”û]þá7§÷Ï·r%Vï Bû6Ûèr{÷\â™ë™k \Ó'ÊŒ“+|æzæzæzæzæÂqÍž¹ž¹ºçò̹6+ô½RJÝa¹îvï0ó/1Ý¥Ô˜ë¢z}­ü²¡ÂæuÕ§ê“*OqQJÛ;c.QKß(çé§êu\ëòfhG\ê+šò˼²ÓaÇ̪V®eùvÃ%'Jå&Ç-~‰ºyÔÊ5ïƒ TKkQœ`•ôJ]×,/MÍn¸BÕQçAXJ“©ÖepeKé„+{<x:+Ö-¾ºötZ¯¬Ëàš”>º®äxP(¯ ZÀSv…².Ÿ+í’+*œX¯NÞ¥à²NÉ皺ªm~õ§–w’.¹DA äiV4°ðBfM]<>ÝLâIg\aqNT”þd<qC]×äø8¢6.“x¾ôÏpR‹ãKËIÚªº$®éñqlžLÐWrúÛ1ÊIÚªº$® øèff\-é‡ÇÎÎ6e^«¸pGJ_—ĵ½ÿu|LóN¹&ºØò’Š›¶úñ\â0I·SxÙW¨KÇ9œ)g˜°!uϵ:ü¾ío^wƵך¸qRšFÚº$®è C[K;ã:œuž¯ÕÖ.“âQεuI\pÊ~õóθŽ!z­·û/~ ¾X_WÉUOìÜQ$‡ùºu_ÝqòA*½½ÍÑëëR¸Òƒ¬¶¿ØŒ«é\¯X¯ô^⤞E«­KáÊݺeC®¦sØHy£´8Ž[ëR¸¤w|!ú¬™Ëè|Yj3KE-«E_—À•óî§ÝqU²hý¸6’¢.…kï˜wn¹K®Â‹¶Êª/™ÓÕ¥písºóñ]r=^„­åR©’Mëâ¸öŽ9ÝÕ7ãjÍûº U³F(Šº.Þ/ïÜ`¼ý¿ßÂe#Ÿíþ¢¾¨I4‹U]W²³À[îžëÔÛi%”Z£ê¸öŽyç–ûàz…‰vÒ4Õ%píóÎ-raß-š6‹AS]—|ôb³¾¸N‰×í\•º®½cÞ‹d#—I>ööU2˲+Ör5Õ¥pmLpöO;á*»WhÝìÔÕ¥pm$ÃO÷ŽÑ+Æí¶p5Õ¥pmG:ñŽ/ªëŒkR²-¿‘KW—Âû˰~—ɽQúgѨóMu)\ÉþfÍÄœkÙ¼üš×!S-WS]
Wzrêq%Åñ\U>¦ÒÙ¦º®ì´hä2¹‡¸oëßžµ–Z®¦º-ñ|ém[²|*hÀ5o=‡=Mu)\…÷ÂvÇ5¬Õª\
uI\Çet/;k¨Zåj¨ËàŠÍ¹f¸tjè_UôuI\Qí'pez…©qeÜý¨2ŸJ#—Ñû7Ê{1/óF.}]—îý¬v¹
½Ì[¸´uI\éѧ7smdo½ÑE¨=(1©kT ßÛs(”¯×ëç«ø ß³äl1|/Ö3Wÿ\í¯['WôË’«}ƒc=J.“ó3Wÿ\F ËQsÍFÉ%ÿa¹‚Qrµ/À¦O”k2N®ð ¾†ßÇñÌ5×ê ¾¸ïñYŽ’ ž(WòDÃï5ª´½ìunø=tC•¶./qßè\ •Øár.j“ºØð{9‡*Š+]ÀÑJ`¿÷Öµ€C´Ùò{Š]Ûi Ûôù½Ò®Š ÆpÈV‹ü~sÇŽÇ5ºï£OZ‡0Ñ–sŽ
`ÌÕ9Ǽj•9ÀÈ‹sL´º%À¸çXØ:
€âw͵‡}€²WÇXÖ®€ÒÇV–i»zÊ8æÀ’öÎê8æÀ¢vã”Á:¶[µG}€Š#s`¢]ä'œn =¢¯€stN }†°-À¬SBŸ"´p
ã”Ð"H\U§„>BtCë’Ð „ir*ºчíîë‘KŽHè%Fº!Ç
ýl4r¸,p‰ñb‚™1€ ¹Ä£pc…ÞúE®t<‚ˆ2,ÈÑBïH„˜¡">ÈÑBŒDgE.„Ð;"€²+ÈÑBïˆp¬P:hõtE8BÄê«À•Œ$’j‚ýQäx¡F!“2Bè'£ Ì…غñG!³
‡p„8üƒp"âȇxÃuB8R¤—B „#Bör‚ :°™ÝªÓ*BðÌØí
È)8sz-k\Ñ&ú.(öCéÑw­!' ÇÐ ýŽÈIÂ1ðkôS—p~‚áï€d¼CO°z¢@NŽa'>rsx‚¥ø¥'áôH*:pˆH8‡œ(N0Ê!ÐÆyÐ5å ˆ
‡Üäˆ¢Ž¹ÉAÙjâÄPé3Ê$âH¨ô¤i 6¥k@UÒÁvÛ$IÓ€:53D„-Mµ\+w
‘¶ý9}‚Í5Ãb,d—>!&4Cò
g C\Ñž7ЭxC”ÄÐÈKœa 1!>nÈl€Q§äœ ¸h†¥•pLÿ‹•„ú°!çL°ÞWÍ‚ªf³&XÏI–)Ùû@Κ`=»°ˆ<7€5ä=+‡¤÷XS´gå`D­ÀYn÷súÌÎöHÏ1GÊ0 àMÒ^¥~ŘðÀ|<=J½ä<fàþžþ‚Ĉãx€;Mû0Öt®¬ö6`¸ÞÌ\H¥ïiÀBÖ3þ¯êgÀ˜aðgj?òÂ:`;Â~,a:SàKP/ArJä8®léÆpM\©#&Cn¹‘!V¾ji˜PCµÊ…ÜÌ;]8K¾Õ@nfˆj=öéÎÑ\xCìP:RÜÔýx`˜ l—–øÁ㛡–KzC[bf$]bGš(Œ|(OÚŽ¼3Ú
Õ;c`<k»ñΙ¡µ€±¯ïdŠÉÐP¶ÀƳ¿bY™>R°0qí{±;ÂçT®„4`6µƒ¢Y™KzÉÐ|#· &……Kæ`1 "Íë9ƒ‹ö ›òMÏRØꀅ݅‚U˜«âµëU‹`4,}<
îdÝ'–^ªÀV”v{Õ“6ƒEm2U2VÃm4°çùOÖÁ³Å,¤~PÀæÊCXõ›ÎQå†þ1k>WÂâòü[ê`1,¾)hãb˜çÇVóÚ¨•+ò¸ÿ¥ó÷‚5s.éñË9ʳ Þo_q Øvž]¶™ã=“ªeùÐÎe2`{´ýï¾ Ù¿wnÈE]†)
òò¡6nò~š<®Ü”+ó씳óÅbñêaSî‹‹Ðð·Í¹l ˜õÒ–ÿˆá’rÍ-p™Iâ Ã…ãroÀ–V¸œ°ö­/Ûp!¹§6}Ć+]âZÛãJÇ5\h.ÖNGGÛäÊœášç6¹œÑzÜñžK†cÑxw gÑ q9!Øó^
Ò¸°DôÑ!‰kpKÄgи²‘X!•kàø—p€MäÔ)¹/T®!½3åø‰Ê5``OJš#s
6Åhi/t®¦1±ŒÁ5Ì#ží2¸™bÔ,%=pÍ`sõ®ôT9WÏÚÁÈdrIᮚpõ)ЬÔa.W`¼L26#í§ÇeÌÕÓbŒyãÀ€«ÿìs/R˜puoŠü,M#®®Á O͸ºUE“daC®.´Q´)Ww`fÉøÆ\äêŽ&ö¹ºX¶¦«Ûá²/‹æ÷&¬påÒ®-^š÷Èׯí
Ùd»Ã•Ë wË&—¥!;_ç®qåòÆX_Ùê‹M.~jõêÒ^Oìr¤W#R·‡äâ’٥ꂋCvþÊvºà"æÅû‹ÞsÑ
צ<à²ãýóÛN>¾3®Ý¨µäÙâ¡«Ïî’k7l7‹3õ8]>tù¹]sín{Ãaqq¶-ç‹ÅåÃCçÙ ×â/’wòÅ›?¾×ï…üA¼ûîê[q»ººòûºÏ!÷¿þòÃO?þþåÓן~ýEüéÓ/Ÿ~üü—Ï¿|ðó§_þYþϦñ­¸¾Þ6¾~ûîê­x}ýöêæ±ùëû?Áëë«Õ¶âëëÛ«kñúæÝþ·ÇŸ~û»È~ýáëÿ}úòYÀ—_¿ÿýÏ_ÛU¼}{õ®ð{~ýß¿ùéÇÿþºéãûo_oþ÷þ_ćŸéö‡¿‰ôóoŸ¿üíó÷Û¦±Üý?ÚiñÜendstream
endobj
194 0 obj
6320
endobj
195 0 obj<</Type/Page/Parent 191 0 R/Contents 196 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
196 0 obj<</Length 197 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
ár
á
äHendstream
endobj
197 0 obj
31
endobj
198 0 obj<</Type/Page/Parent 191 0 R/Contents 199 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
199 0 obj<</Length 200 0 R/Filter/FlateDecode>>stream
xÚ•UMo"9½ó+J9%ÒЛB`oC¾„4™aŒöÀŸ«Á·«c»Aì¯ß²» E‹¢Hi»ªÞ{õÊ•·V
×ü“Âmº}Ek4oýñ8„tóœoú·=˜g—)Ì$•x5ÿUßÞ$ƒú¾}3Hêˆ$…q†Æ«\Iá™:¸iÚ„vúuè|­H2¹ZU6†B!ŒXaÁéPja #YÕ_–6*C~°ªøO­ æd!Ã
j*cœ0QÆó¯0ò€Ï¨i7éÔPàŽŠ‚Ñ^¾ÿ†‰åheV0Û9,./î^&³‹ÅüDë«4¹G¹ß
‹É íÝá^{g_åÇíFáöñŸÓx, $ëÅR#Ÿ51ZìÐFí!wѹé»zÈ—.p Œ=¬…;’¿D4ûŽaË<·ƒY#yPVIϦÀ¡ LÁyn¬°Ù#]EË ¡u­bƒ&#ë‚
G¸•ãf&Zû»™ÞŸÑºÚWÔ¸ã±(x²vpm.$º¤©ºïb,Ç¥ëRãšÉj<IÒìêøaþØO&쫨שz‚âØ…ø(~Ñ2J€·
+6ëHηÀ+°÷ƒ‹Ëo“û/0}¼KÓÛáâê Ìxøþ㱆‘&ùÊa³çQ¸
_ËrƇ'<Red¶AhGG®*Ã$°i[å×`‘}â¼22!´ò»“ýYæ€Û²%ûZ+dNKK[$r~&­*ýAºx ¢°‹Éäž_D›[††€â}˜•Ó\™¤ÐÀ¸:Q–ºÙ*“a=¼§³zv]êª~²rž
õcoš7I9<}§õúâRVÖòÐ;¨‰Rþߨ^rÝ]\ñ
Màu£Š`S®ø­MÇáAòùÃeáMì•mkÚê>_]¸ß/´ÿ± >ÛŽï‹‘ƒÈ®„‰ÍaG;'­iß)ÆépÖ@²ê Xø;Ö¢Ó¿…ß™ðªo\öòÀpß´SY\¦˜#ÛÀÏõ¬Ô.§>†Ö?¿Ë<+¿ÇùsKUØ”SŒ&ñógaÌϪt¤ïâ”÷ÓyZ¾r…'Müìíî¬Ä'ÞQœ›â[¥lìC>h¢Úµ{éà:9þ¯Üã³!ƒ„Óðý0oýÕú‰ßksendstream
endobj
200 0 obj
869
endobj
201 0 obj<</Type/Page/Parent 191 0 R/Contents 202 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
202 0 obj<</Length 203 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041׳P072PIÑp
VpÎÏKËL/-J,ÉÌÏSðMÌKLOÍMÍ+QÈIÌÓ ÉâÒ…èÑ…j2‰™˜˜é™)€ù†
ÁÉù© Q×®@.Nu!^endstream
endobj
203 0 obj
117
endobj
204 0 obj<</Type/Page/Parent 191 0 R/Contents 205 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
205 0 obj<</Length 206 0 R/Filter/FlateDecode>>stream
xÚ­•OÚ0Åï|Š9²Ò&K 7
l…T´) {ââÆp•ØÔ6Úòíkc•V%]å@Æ¿7ö¼?ZÀ „nòªõ)k=½ÄÄæMЃŒ¶CX`yŽê!ûîJžýÈyÏ‘ïÊüÆË$…‰ÈwrM4Ü-èAËþ+Ï6…(KñÎøÚ-¤— )µ.…o{ÐóU]3tàü#?<³Wa×Êm«àç‰ø¡Ó ^°õN:½9ád
IIø5ß4tÄßà³Éäžî•Æ
f\£,HŽ0AÅÖÜÞrɶ糹G"Í­„ÿ³…~'aD+Æ™Òf/B*»—)ð¯·PÓ?¤õd~ H±–¤ª¬ w.n¡SÌw’é½±ïVHÝ€›%·¸ª¦I—˜ßRáÿŒímrûf¨ÖÛ¿Mîœ`ÏE§×)áUoPžb¬þ1Â\pï*Æ
l ™áÙt:… 
üÞc° ç›Ý
¡×¶ŸU›JRèÕÃ]ç9K’§ÃÌG”2K$%¼nOèdxÆ^fì)ϵ=N!“„«»
zbͪmyøÕ²ú¼c›qæ‚byh(ÅŠ˜#ÌÕ] ÅËØ<âGøÂ8º1X¬ŒM̵ÈÅÑÛÑqÑÑ{aßúŸéE?6²æU×~žf­¯­_Ð&Ùûendstream
endobj
206 0 obj
522
endobj
207 0 obj<</Type/Page/Parent 191 0 R/Contents 208 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
208 0 obj<</Length 209 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041׳P072PIÑp
VpÎÏKËL/-J,ÉÌÏSðMÌKLOÍMÍ+QÈIÌÓ ÉâÒ…èÑ…j2‰™ê™)€ùF
A©i©E©yɩŠ)×®@.Z#bendstream
endobj
209 0 obj
122
endobj
210 0 obj<</Type/Page/Parent 191 0 R/Contents 211 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
211 0 obj<</Length 212 0 R/Filter/FlateDecode>>stream
“Mo›@†ïþ#N‰äÐ`üÙ['’­ÚB­rY/l»ì’ý¨“þúÎ.’›T•9xÅ;ûÎ<ïð4Iàš~ ¬f.7“›|òî~Éò’Þ,WsÈ‹‹î…DøÈ«°Aå.óï½n¯{åÕb÷Ú8­0È6/9ã¹óûŠ9$É Ÿ-{ýã5Xí
G(ƒ‹­™”p@h%ãXëWÅŸ+¹6m«U!TNƒ«©H—îÈ vZûb6 Ý"µª,©‚?¹&i< ®‘å5^¢‰¦Iqྵô/!×`°aB‘_Ó2'ÔÚQ¸´,ÐÀ·O»‡®ßÞÌNaìP±í0‡ÒîÌŸ9ÒX ñ®™aÜ¡±@>Uåêø´éæ„vYO*äaßdš8íȳÐ܇ðSU@©MÃ\w²P åFè@|h[$ºÏp3…[ÝaþŠOžæ åöß-¦T¢JQyCдúkiþ»Ý!~¯î1×Ê-A—Ý‘l¸§UPö„¼,d}ò”îí>‹(ÆÓ^ĸ³,Î,#Z þ£ƒõacØNÊIUaÇÈ—9hI)x7žÎT(u”$UƃÁi´íÀ¼gAO×ù>V„ð¹ôÙv–Aq¬…Öµhh7ƒ|·{Ÿi[¤D)~…D²á‚³‰¶ø“v¾
žÑÔz$ž®N_ék_ô|}oHFïá|—O¾L~•BN‰endstream
endobj
212 0 obj
542
endobj
213 0 obj<</Type/Page/Parent 191 0 R/Contents 214 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
214 0 obj<</Length 215 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041׳P072PIÑp
VpÎÏKËL/-J,ÉÌÏSðMÌKLOÍMÍ+QÈIÌÓ ÉâÒ…èÑ…j2[éY*€ùÆ
n™9©HAò®!\\»Þ%
endstream
endobj
215 0 obj
118
endobj
216 0 obj<</Type/Page/Parent 191 0 R/Contents 217 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
217 0 obj<</Length 218 0 R/Filter/FlateDecode>>stream
xÚ…VMsÛ8 ½ûW`zrfmý‘÷–¦»3=µ›¸³_h ŠØ¡H•¤ìæßï%Û±R¥“ÄÑð<<€þ9™ÑüÌèfN‹kÊëɧõä¯V4[Ѻěë›%­‹)>¼k·†éç#}ó.ç´}ºXÿ€Ç’f³Îãr~%Ÿ;zteÜ+ÏCçÍôÝãúáÝæ‚B¥Œ¡-Sh·µŽ‘ âûgŠºfRÔöä<íØøÇ¿öš-Bãeã@kIagl.a÷:V+¦ûïß)ô)dÇþÈ«VÚFü!¬¶@,TT[˜ˆ³L®LX¥3ÆíQ-…¨"‡t~u*v–‘<š¢.Ò@LîêÆp”ÈÁ™6jg)ÏG]ÇÝçn*›å¹M¥ŠÍÔòžä!XUE¡^°P:_+¹#µSÚ(P¶¹ˆË—åÉ<ö±étô[Ç+ò¸ Y§hì*»í5³Xu¸ËlF÷FAX¥ÎÕ¡æßÊ뿊¥eñ,©ÑsÎ -T·!JZy‰§*þ¾±Â3ã}àŸ-¬ÚJAƒ5Û8ÒÉÏ.oåuÇ${ïüHó¾[¡˜¢u#**µëâЪ»ä!þÕ>~yÝPpr×‰é‡ u­k&8!²€}&F½1
çÒÁ.ÁZå<ÆDÿÒÖRð`MÄò ¹Ô#´Ý5ÑØâåõ!0¶x†‚K•Ÿ$7§/zõgÉ}EÓ9I+)Ög¯µø‚.18l#Yw—]rÔvçÌî°1`:(ûÐ
ñ=ab©UR«çÀËYÆÞ©[Û×t®T¨±_°ÔÞ›ÚÊ0²ÞôlSc¥U
ùmfº§›‹÷Òr¶O¨Yí5ZèXc‚Ì1nOÜÁÁ°àb§té뾌îøðYfv€óöZнóØ#oªádÒ&!¯¸h
âÉظž9Òt|N‚éNƒ_r{>i%y‰š»<CblPiâ¯V¿§¢ß1@ØÐæ²ËÖD$ÙóGÙy6,Ç[°ªÁ`'‰>±•qÅ3ˆ*Ð]‘ÐW}àJ…£ZØE
º”‚Ì]_Y_GÏõí‰ÂÕBHÿã׊åí‡l{XÞÈýßëÉ¿“ÿóÇÞendstream
endobj
218 0 obj
873
endobj
219 0 obj<</Type/Page/Parent 191 0 R/Contents 220 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
220 0 obj<</Length 221 0 R/Filter/FlateDecode>>stream
xÚuÁNÃ0DïþŠ9–CLŒ“^©à*Â|€Û­Qbƒ“¶ð÷¬®È+YÚy³;ûÅjzwªT?²ÍnŸ¶÷¼ƒö¤©¶å
Ún$—xIsð¡7sHñF*!Ä
V"@}r8O.#e\\´ô… q±:‹ëÉEÌÄøð]s1a0‡Á>øEú̉#®fBoh˜ÅágêrN™¯Ë»¿åB¶Wu%³ÝìÞ÷oØ¥èÃñœ—¨x6ÑÝèâŒý`–èÕjªÚ¦.¦®ô¤¼Aýßµš½²_¿Yçendstream
endobj
221 0 obj
216
endobj
222 0 obj<</Type/Page/Parent 191 0 R/Contents 223 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
223 0 obj<</Length 224 0 R/Filter/FlateDecode>>stream
VMSÛ0½çWìpjgˆ'’Þ€N/”¤\Y^'flÉ•d(ÿ¾»’çchÃ!±õôöí7¿1Œè/†«1L¦ ËÁÍjðå~ñVL¯.`•~º„¥ÎÜ«0X °h?¯žò2šìðrtÃ#k?ê2A“«uÀ_@7èñ4 o-–P#pƒ8¬„qðÒ(Oé­p˜Bò1êÔ‚Ó`°2hQ9º‹PŠgmΡÌ •B%œÜÊ‹f
d9žDc¶¨í× ms~q ¶öFÌž=òä‘çÝ9£Q4ÚõrÈT­Ÿ7èÄСu­r˜â™«”ÔçY\U…*¥xy
tŽœ¿L…~
>Hê¼H›Øü¿þÄÓì{‘Ä'ü¸†ÛÇ%X%*»Ñr kTr“iH™{ƒ„¼õ Èr%ŠÖeÿÆçšè¥˜)1ÝúØKVг—3Oòš»'IQæ%Y¨t®œåz(„ $5…ÖX©©@>£—øiôÔ ÷òDLî™ÜµF%QòÆqMg¢.(LŠ~Ú¶‰l í›uXÒ4X"kgwv굉Lß3ºø{aYæíðÝ-}Š6_+Ðøæ¢3ÚƒSß#§H¥«BÁãï©9Ø=ÀÝç¸G^¦7H5!uYQʰx#DЃi×£ÿ ¢g6ø°×Ú
‘}§çÃ9ojèsŸjP_¼=¯ß!ÇŒ\¢Ô$â4 #­ŒNké¸àáã=”B°
Ô‹=ÒcWâ.zh¦Ö.ô4{ÿÊø` :ngâ.ôû¸£ÝrñÍ6™·ëe ßÂÈ¡»G÷Êvcmǭ݈Pe½ÅÍkk)ÑÚ¬.¨bÛâM»–rF×IÁd•6.‚kbÒÉ3õ×b¯FñÊÚ ÆgyñÞrŠ·¢f¸Ji•‘†’>ŠšQ~´Ó*[›fžX]Ù²§X$=¦ÑMÜ…j+Z9§öï6N.;±\à” nEI-l%í›Ø·ùö&›€E!Ô¹?.W‹!× Ü Vè™m/FRЀåêÁ¯ñ¤Ðs3?Ã2š"YZJMôÆÝYçÈtü“r1EsÂbÎÏw«ÁÏÁ_øe¼?endstream
endobj
224 0 obj
845
endobj
225 0 obj<</Type/Page/Parent 191 0 R/Contents 226 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
226 0 obj<</Length 227 0 R/Filter/FlateDecode>>stream
xÚmP½R„0îyŠ+- ǶÞh§sz¨õ^XŽ8`6Ì,,œ¤Úý~÷+QÉS°-ã×crß$·w vi
M'»²ªÒšöz—ðJ!ÓMó)¨”Z1›¼”¥`>z²ˆƒ±gè‘áD2Ðnœ
ÔÏZs7Ã7 Xº@k8xsšƒq̈gà=a$tÞz={O6Àþý(zíAŒÕ6Í£ñ[œ¸wá*…g“wí¬I¿Fîq„j ìºpAO¢aIj]€ ™Å4úá$“7’âXšqº¶¯Û«¢’SÕKŠýÛá{g;sž=.öOh¥Ò£´‘»Y)*Ï"IeqXäuº…ìŸC?4ÉKòc„endstream
endobj
227 0 obj
287
endobj
228 0 obj<</Type/Page/Parent 191 0 R/Contents 229 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
229 0 obj<</Length 230 0 R/Filter/FlateDecode>>stream
TÛn£0}ç+æqû-)Íå1‹’4RÕe•öÕ5êÆÖv6Êßï8´RoXÚs8sŽç˜ßIWtä0›Àõ¸J¾7ÉåzùšU¦³šöÛ6Ò8Çìé¢y7Ù|€¤7óle94h•0SÈó€ Þt2 åP*¾(-Õ<ZLwÖaöž(} ï™eR¢'¬Q·Bw`,Xä(þ„‡–yÊXÿÄ4à…Š7=ÆÔé‘ uЂ3/ŒvÀ©F èˆüÑ@oMg™r±v­`ÿåî<9Ã÷èc®HîÙ•&ùÆîGÜeSRžÒëÅk.&°äÖèS,˺Ün#R-§‘Õžé–ÙJÓ"ìÈÿVÓUÑ=(¨ê0â»|¨êñV%y$ª‡ûí/¨¬Ð>,m}rU„sU——Õ8骪Ü!þÜ­‹0¯›ïZH„Æ2ívØŒ7ÜÈÛm•nîÆùnñ(Ñû´b|„n,ëŸwp÷²)‡Oç¯ÔaÐÅœ&üé/QÌ
ÃU(äyx±j’ŸÉ_Ç68Pendstream
endobj
230 0 obj
425
endobj
231 0 obj<</Type/Page/Parent 191 0 R/Contents 232 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R>>>>>>endobj
232 0 obj<</Length 233 0 R/Filter/FlateDecode>>stream
“MSƒ0†ïüŠ=ê,•R<öÆv`‡ø"M16$ÒúñëMPÛéXrÚwöÙÝw—/„ùB¸Ží«oн«,†0¼±¡8‰‚ðúâùh–_â'£GGÝÆAÔéô•S­}Dª-Qk@Š M̤ÐJrȉ¨w¤¦_„Ÿ
þ ”Xþ£ÄR>œƒ_¤8ë‡/,JP
©¨™ Ô°kÀ¤ÝB&Uåä"t¶kÖ2‘’ZV’»ˆåê7"ÑL
¡ÔD¬-¬TMûè;Gó~vn&?Ø:'´q¢ŠE‘ö³Š׬¡kFà`BA‡ô­z4ÛrYê¼4dÖü—³B®‰‘luY)ö¬sÓ¶ ¸},‹i?µ¤joHm[Ûì”Ëjë`á ;N+¶gfÕã°"¢Ýöé%ßyã‘ù[GÉMÛÌÙ=*­SVïTwfÂtÔPaæå¤Ð£±ÉòÇÃM
‡6…I0.0 †0©”ïMk¥{wÞ'K­&sendstream
endobj
233 0 obj
381
endobj
234 0 obj<</Type/Page/Parent 191 0 R/Contents 235 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
235 0 obj<</Length 236 0 R/Filter/FlateDecode>>stream
V[sÚ:~çWì0}H[<•2‡™6Ós Iò"luj[®$Cø÷]I†˜[Ò)0ƒlíõÛÝOúUó _úð{¦µ›y­u7oó%îôúÌ£«‹ˆg+øý*¸d)Ë´ú8ÿeð<'Ûìôˆ•žÇL1†¬h@.ÅšG "¦)OX<[
™RÍEøS¢!ƒ%îÛÐÆÍ"ˆDX#N6™Æbb@ÏžO:¯žWúHxƨ˜& ,Ð<O8:ÔÌ›±µ9þü¹êr_®c?|Ÿ—%"Ò%×ežþÀåyC<˜9õ;£¾µÑXÑàštKQ¾§)¦s·vNFÓjV(¦’†šIBÊ(„ÿ³Æ‹¹±LÒ`ŸæÔ‚'\o]2"‰˜„‡ûé#̬«­Ò,Ud—Žso@¦<3XYh€ßEÓ5bš{Á2([½%ÔIX7eƒÑýlZBŒïòܽE´\W“%`Ò:Æ(ë< “"bõ27}Æurx¿Cz;à;p[mž·úYFÃø ]%"@!fÔà¹âkFmeTÍÚ¨4ì*/d.°'1ÿŒjS'r §Š|+ù*ÖÅ„‡&eô” ë†}k=í SÆf‡jy¹rñ¡Ú‘gÉÖÜ‚YE^…ÅÖZ?Πþa
%r¢b&5xÄG® Zín«ãA§=ìÃv)ÿÉ`ò’Ç:hº:ÌÛ0pB®Ù°‹Ç3­Oðéï|9¶ pËT(y®Ë.²•œ¢È»Úã}q0Ž~Óc`šPµÅ Zê
Å:—"*B­–p¬¸:5%‘°äšEï;ݳª­°Ò²p…o€Â¾vëúÂLaj¸’4U€ñœ´í)EÎ$rp>|kѼ@QÍzLGœ»c84©ômB7æ)_icªÀ$Öª(´aêèÔb¥‹¡þu:žÜÏ&D¿è:lbn¦3E9VX0fØ’†#ïsébW»™€éòõÑ4{Ê•.œÒˆ¦t…Fò„Qåš ÷ÔÜ%´ôðÝJšÏHëlhOøºîéëž×:ïô¼lxAFùGjxäl·’¯‘;f× ç&8¯øH’íFˆ¨ߨÜ&¦jvÏï5}Ef£?ÊðQ`^Cx¾òÛÞóGðû~sÐkûû†÷ó"WMCD_ÌŠ¹:/ðôô4„Xë|Øjm6rAþX}\ÎøûEÚ«÷|…Ñ7Ã#—å;gä;oÈûgäýcùÖá™Õ4üY=µBk‘þÑÁ¥¥¹y½yráŒî¶ö¬tjüÅàŽ¢\ò›êõ\,'x}Á­ŸÖ/ÞÃ-êò¾®œÕÝòBuéFô¼¨µŒg›m2¯ý[û
DÝAYendstream
endobj
236 0 obj
1069
endobj
237 0 obj<</Type/Page/Parent 191 0 R/Contents 238 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
238 0 obj<</Length 239 0 R/Filter/FlateDecode>>stream
xÚÕVQ“Ú6~çWì0™ÉqÆÂ9Hó’ËÝÌ=$½Nè3!¯±ZYr%ù€vúß»²
Î¥×´O†ÑZÚOß÷iWð[ALoÉ,|DÑ{¿ìï¦À,3š™]O£kX¦ÎTV dRá[øÁ[N¡é ÎI½éCTŠÖŠVä܃0)Bά5(ã<h䶆@ôb°ü…öaMâ4bI§a*¦…`|yÂ%Ü6HýW÷é‚„”‘Ë}¡†À¢Ø|>ÇWã ƒI¼¸š.â)QþávW«~Ô74æÀ®‚ú FH2¦aþ=ñ¹«´ðÒhw\™4Œ ez]µë"ŸxAÆ4ËN¾Ž&³ì[ésà°QfÍ8aJ—s¥È7¼”ž+ù;¦°ºè0Ë\ºþê÷Íè³)Ðç´Û­rHЋh5€%™k´ÚD¶~âN`èØl¥žlÎäæç‡Ï µG›q:}%×–Û=d'Ò¹9|O©"J‹™ÜÁÖØ”Ò;+³E+¸Ã DT¥;©9Dµ¢†~›üM¿”_Û•¢PÜ’W}ç¹—¢œÊƒ&N{×é•NÑR®ÅP~
4vÊD45_|˲6¦ÓÐ\ÿ‚Om¦0I4;Æ>Q¨?£¿Y·œü=ø}øÄjaŠ€9rÒBʰrzqš¯î¬CzjÐ
ëGÇ•º¬<l!ý×¢©Ï¹Þ¯ÃÚ¾³<SùøÈUEÞu—Ò\‰BÒÑH[Ô*©ï1Åô?tùëöV«ÁkÁÂÞAó|·tÛ¹ òÉxt ÐF㳌ς¦’ S†l
¯ñ%üHîõ#ÕP°†J«1dqÃïˆ}1w€*Ðî íá„B®¶0»†–u€þ8çEA}e5!ÑѼ=›úó…;.TÖ&ýû.yù†kaNÍ)õ?nCøžÆëÞo/·aò}mXÔJþe¶Éÿ“ß]·&0ƨ>fóð[F“õ/ÂÑ™ÜT¶AüÈ5ß`­ÿAñÚÛ¾¡¬Ñ›I’Ø4<Lè¿Dqc={ÎúÛeï§Þ_Ī‹nendstream
endobj
239 0 obj
835
endobj
240 0 obj<</Type/Page/Parent 191 0 R/Contents 241 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
241 0 obj<</Length 242 0 R/Filter/FlateDecode>>stream
xÚ•UMsÛ6½ëWìèËQ¢>,ÛiwrhêNÔž4ãÁ¥„”­dúß»DY¤•J3¢,ÞîÛ}»üÜKaLߘ^/{o—½Ñí®’ , ¿wq¹€e~6:,ÿîa˜¦~ çð‚Kfíõu®ïÝFØÕÙjð†p£Ëªv;x
qÿq5H:—»XµC{
J+욎ZëÖ¢š9xþÃïɵEc*ý€¶LÖøÆÉ~yMÑÑOJÿ;ø]NÑ1ð ôî Vg{´Ç=™uð¾¶Ù$I‡žAWEH»ÕàUëè_¿Ý^A:O.}-†TŒáô*™ùÓ·ôø‹Á2‰ö`9U#ŒÙe2ßÛ%)|d¥Pëh6Œ&ìÂm€ÁZêŒI°\Wvä„ ³J8&ÅÌ)àþ’ÔÜì¿Z3×^ ûÉ1‡G›èx²4<C¸ùÙrƒ •Ü>r¬œÐ
œÚSË£Þüy÷ „rh
Æ¤È 3»&âíà(këèæZ¨H:Î+ƒ…x„>¯+Û÷´üŸ.µ¸×¢™À¯]¿‡`
V"Ì!ÛAQ+îyu|3³®KTÎG
I­¤Uk52ùf‰¤æÏ+$½89#Í«ZåÔ\º–¡{@¤4h“[ÏÓç÷~{ Ô Ž™;:nø¾Q»½ëeÓæ£¤¤3°º6T§B2Gê3§oI ‚÷“žN’‹FÂx§yÈkòxRÉiì„?BŠÒ%‰G!0•?вÄ\Щ±ÐÒç3cÀuéÝCFìÿé$+GËȨłDÿ×1Ìãaz¸Òju’3´Êñ*¼6Æûõ‰¢6)b_t¦L8*Ø÷h¢E€ïŒš»ê£eþãÑò†òê+»ã§•êËÓ¿w}`U…d•ÇÙ€@‹È&bwJÒÜû¦ÛÔÃ!?‡åÓ ú¦êæÿOueä·a[ìJ¦%­ ¢b÷×r,~Z+ÏßÃ~XEïô$Ü8" MƒÉ€óÔž|©Žn/÷\Ò4%Л> ïúp£U!Öµ Ôá7¦Ø;ÉB*†élA·†‹É8&lz*a³ÅŒŒ‚E:÷ï—½?zÿ…†•endstream
endobj
242 0 obj
855
endobj
243 0 obj<</Type/Page/Parent 191 0 R/Contents 244 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
244 0 obj<</Length 245 0 R/Filter/FlateDecode>>stream
xÚÍUMoÚ@½ó+žr"¨Ö|7§†¦·V©âÞ"¡e½€[Ûëz× Tõ¿gv×|*I.­@È3Ì{3oö­ü»ÁÐ¥Coh¿"kÜFΗ.&AˆhasÃñQÜ4ÛBÆr$7U¡gf•Ðegææ:úI¨ Ø [XpíÞ$è[äm0ă)+aªRê}iÏwè¢Ýƒº0`øÆ³$_ú²>«‹Â¡gû”¦Ð;6ä<“zÅ);—HÕF–‚k‰MbV¨òX–Z(jKÿš”96ªŒ5xãjF<WàE!©.†Q0+
 öÑÎ@ý¤qÓöÂcóÊ ÷#8† 7§)iDðxýŒØ^Hë¨Å†ø¬D•ÉÜp“¨üEÍw\¬ŽD{¹+¾–à˜§JüBBAœp#Ó-)^r§Écji¹2™Íe¹ßۙиŠv’äà‚ó\ÔKµ|k^&|žºýÓa¡Pi"¶àsµ–½Œc í™w˜
:­“-D´Ù#LÜ?Ѓšóª°‹ÒÁ²s×j.=œÌIÝŸSgmWï×s Ó´*K»`M‡$Ý@¶æ¼çM>¸ˆææý÷Ò
ašr­/\ŸÑë®°Tï¾:»àXöæßE¯ðýèm¾÷Ó¾Ýó÷’åq0ù™ûÿåý¨ïµ»GÜîâÿÜèãú°cä÷aÈ÷’qÚ§*_$˪tÞÀWžó¥tÇ}Ÿrç•6ëÕ…] bC›ìûA]o±Ás»‹ßOë×vendstream
endobj
245 0 obj
575
endobj
246 0 obj<</Type/Page/Parent 191 0 R/Contents 247 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
247 0 obj<</Length 248 0 R/Filter/FlateDecode>>stream
xÚµUMoÚ@½ó+¦9 á£i„¤j¤6MWUU¢hmñ6¶×Ý]—Òªÿ½³þ @ J§};óæÍ<ó½fC‡~6 »Ð×ΜZûõìckN@wƒáЀã×Ï(2‰Ò,Ѫá|+p=«[àZý‘u\â,®XÌ“yëƒm— îÀêÐ$ŠÀ+“AÂbT BFA!KS”S ®CÈ¥ò„DŸnõ1¾‚YýÀysys7}uãL®œƒ#Sª¬|s=qÖ®µgÍm€O(q $èaúéúx¢QÌCˆ¸+™\Bœ)MÅç<)8±äåVÍTRÊŸ†›Éu·Eªè.^e¦J#g™3L²%Óœ8¯i¤èjb?PB*”ân„ @,Š~è=x!z÷4 p—yƒžˆS¡´vL°×]Mšbç£ʉÎK?:È©ˆ
ÜHx÷AN1Ÿ3Ñ’˜ä„yájâ/‹tµiõVúUrÚæ`šßüÞ8<hì|œ|9€vœ+Ð’-¡ÙÞ
*<Ó;ñNV*•~hª½qÑû™5¦Uòq¯Æd†§Ii<¡D&=3%K-3Í#þ ÍøL"•¯!mc%^±4z•'9m‡´HW[ã¢Y:ÓVÄÆEË­e0—"KA@óј—xòÚÍM‘›0~ÊÓ“F\©>™ 'Y–µõnSüƒÙçYÃ)tN€Ã+:(RE³zžœL݆*²qóµs;kÌæÕááÊcÕ>~K‰É‹ÎÅÝåùÛ‹“ÇyüÛëgÆun·¢U/dÉÕ³šóÅÞÿ_½ð*$Iðb]ƒhW"»ß£N™‘¨žî%¹NnG!!¦³ºMÌ7íH_<úv=¿BiãQé9Û¶É̓ãQþ3_|úCø<+ ïXÂæ¹ à:b¹a[vHoZÃngçaاP~gMà©}¨ýû‡Žendstream
endobj
248 0 obj
749
endobj
249 0 obj<</Type/Page/Parent 191 0 R/Contents 250 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
250 0 obj<</Length 251 0 R/Filter/FlateDecode>>stream
xÚ•V]OÛ0}ﯸÊ0š6´
Û$`LBb[»í&ä&7­‡kw¶Ó&þû®í”,ác¬­’ؾ¾_çø¤¿: ôé›À`×ýÒEçxÒé}A2ˆw`’ÓÚî~â³ãxDc{+psò3X%Á¦;Å»61ƒ3™¡´Ìr%ƒí°¶ÝÙ‡ÎöHHU†0*½1€2Ê`Ó[˜j–Þ 5`æŒÌ¦8ãJnç`çj‰’Ë™·¢‘K\b 2ðnÉRB®„P¥qIPèPU¶a,ÓÖyhì–[Ô>BðÌdÜ÷ÅPb;`–4oª ”mÙù€KA£¬é¸=ää¶Úu®Ì†Â4§B™¨Búþöa!˜<­'nð»1òaBo ΕZºp+¦a«×0kîémµ|lÁ…VT±¡Fª)m_1Q ´Z–VÁh4Šã¸½í¥ äJÃÕ‡wÐ?o!é÷ýÓ›7W›-ÛvQ™º¶snÈÁÕæáÓ«Ì>¹zßß7‰Ùu}]SsLÝØõ¤ ®X\jà¢LEÛ¡0èîT‘»ñœ®Ž4Q9ç£ö>¦0%
·¸q΂Ê/¸£Qdˆùé<
å §Ã§žÀÈÒ9D)£ÜB6æ¬67÷j>…¨„ÓšÝ^ò-pÚÐ8ç0žMN¯Ï>œŸÂÁ#pþÞËð¹ÏT#»i/Tå=P*
)gÿãó¾)p
n‰›Â˜ZNnŸ—·JW N€F£A½"ÜJ¥3êoàMÅ™m@›ÆW›Þ?®jˆÓN‡øm‰èÈ‘2]Ëì_<’lôËÉ
Ó³"0˜ø´dšçh¸‰éx³È¾ -´„oþÔ?[êEí²Ê×Z«‚ÂWz¡½ G5^B£°½š›ÁžzWó­÷EÔ2/…ÏòWt„R%WôŽ¡ª@¸T–*DFóMeª”%#ìHÿîP+wç‹¥V+ºÎ4[À5©Â‚Éôõ'®FÃïPåÕÑ#2ôš3—}:ŒÐ…Ä©æûJG»ÝGê¹>¹ä±nTÕ¦ýªü$Iâýú-òõb 'Jæ|VhÿOL²™—@¸Ì3­ ÷hWwo§ï6%ûnr8Ð\ÿ‰ÿ
§“Îçι¸j2endstream
endobj
251 0 obj
856
endobj
252 0 obj<</Type/Page/Parent 191 0 R/Contents 253 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
253 0 obj<</Length 254 0 R/Filter/FlateDecode>>stream
xÚí“MOƒ@†ïüŠ9êa‘ᣀ µåf¬Ïd¥‹b
‹Ó­¦ÿÞ]¨6Æ»lB6»ï3oÞ½B¼u[i C^†±0 }È×g7ÉJ½s“Ü=n¬D'IA*©9Ï_4¢YØ.0ÏwížÍvMÃi²‚%I6—àtŒ“c´Å/Ÿ‘cG õ[9¸@&ÞÕj?²ëÅ7LVé̽£yoà‹ÂMæ²Ü5¢U\Õ²e "IS™—<´\[1%Ù’êV1ÎÒZ÷f¢ô'J½áÃVœ¨L++vµÙŒ;Ì]ÊNŒB÷ʯз¼|®[&é]'H§lŸX¶ß*\S+ ";>zÍ…â:éæb[RÝ™6}3áþÓ„§=ùçŽ_~ô9=]c†C‘ŸS?ôíh˜Ææ`[÷Ö.Ë3ýendstream
endobj
254 0 obj
333
endobj
255 0 obj<</Type/Page/Parent 191 0 R/Contents 256 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
256 0 obj<</Length 257 0 R/Filter/FlateDecode>>stream
xÚ-ŒA D÷œb–ºhªÒµÝ™Tû=*45”Ðx}%53«É{ófüjŸ{wì@lÓÖd!¶ª¬¡$=V͵ëÑoÇaŽ:Á㤽Œ3>¡›´_Ó“‹Sü%ÉóXIUî°¼ 6}t4 æÛdp1¯Ú]†ÄÎì ý‚*;endstream
endobj
257 0 obj
135
endobj
258 0 obj<</Type/Page/Parent 191 0 R/Contents 259 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 106 0 R>>endobj
259 0 obj<</Length 260 0 R/Filter/FlateDecode>>stream
xÚÝ›KsÛ8 €ïùVŸmºéì¡m¼½»ŽÒz'¶ZÙn'ÿ~I”ÄLøy9°>šóýJ•ÿE- e‹ÍîêÕêêÅ+„+V÷…°ª”…­_Ýý¶Z~h‹î¾¸îöÇv<ü¾ú÷êÏÕUUVžÞDxûø&4
«ÿØ®ïðù¡¸
ü'_ï¿/nL!Dè1<æ 7QÌâGä®P¦lr>Hr»é¾µ4R*ìUßÿJ¹ø—˜Õ„²AÓÒø÷]adi°A¨Z£ª½½­´QÓ%¡ë tçŸAÛÓ.PAÝùY±½ßnÖÇm·ÿµÖM]ÖKÒ;§Û8â¤ÛؘÕmШþQ§’Ó)’›º´9ÅHº}<Ûá ãóÞ@J ?:¹È‘öþGÛÿض?m-J·ã0V1®ñƒB«@ƒ²Šq®Ä™®«$²¨‚Wdh”#êu·9íütŸçM¨u©s`úÓH?£žÙ4‚ ø¦–CÀ‡Ïg|S+Õ’ø o‚º2>H‘ò±½oûv¿i3ztËŠ?¿x)fò{
áç…{cã¸%îSMY Îõ?n “ÏúÉoª`´) ä@J¾D¤
kŸ×hœM´Ó4È€¤-„cɦ‰Dn*»22Š‘ôþøµí sŒ‡,Q…X4…¡aÉ ó>$áCŠHÂùab@ŠŸÏ H2hÇN1 ñ²ñ%ãGi¢Ülý¢y4yxW¸h–) Ä õv½_iƒafÖV®\äšÖ0ÎSYˆìqBÇÆ™­ª!è+>¤a®*žöb$½ÞöíæØõó¼ "¸RXÏf@”#ðöØŸ6ÇS?³ Qauöü&c,¤S4¨ð¦øÜ· (ã¢8rn»S¿!|hòtX¸Åg,”Þ8Õ„[–ïp6©Ý˜r AÚÄGø¬Â­Yˆzè'3KB]wûûí—Só6±žp<µ áŒê¿0BÙ gŸ)È2Ùh£†dŸÏJ6ÚhˆíšN6 ¯¿CËø EʪïNŸ©|3yÞÿVíƒOC1Ò>¶ßºžØáLž‘PûH˜ÿ4#íCßùUùa»ÿ2³ªXF(,kÆït5f+hœ—­´4›­RB¨¡ÇÌêúaí5JŸ¸ØjQ«N½²ž¤šØ Úl@¥lªA.ae`”7—z„ÅiÔO¢1QÄ©Q¡KÔ)(ìÜS2ŠuÊ}XUÍ*4n;¶nå”ZUã 4H¥VyB,d”ŠdQ™O§h”#ê]ÇNT¹}ÚðjȪj=œ Áç³r¨J
CçЄ7ê)¤H¹íî?×=D'?ù¥O™
Å&H=´ëÃÜ¢Ó¯ÿ›=û•c†Æy9PY0S~K,òP9ŸÚþ@.='‡#ØG3Ê#ìÝi÷¹í©åÉ¢>g]±TXR~½×€A¸ü™ÈáÐZçh”#êM»oûõe{N«JÁ¤V• šÈ~‹ú„Œb$­ÚÃqvf*µÈmN©RÄ} 46H¥J ÛÃfÐDn¬÷ØŒŒb™¶712_REEæOé°L[ùCã¬*]œd/©ZÖ@ÜÁ²"ã8RÞ<t‡ÃºœQ«+ÅÒËî‚©>ÊkÂÚg~hœ—ýdƒUØ—dþ±~«¡Ã4‡AŒ¤UÛïf–r™K ‹»q –+îJ‹õÓ—daÁ?ÂYS†FyBmúnÿ8§XvFR¬ +³RCéT„Õ4΋ ‹ª¯ÈÈ †üªàI(FÎuwç³q:UO`áðã
åC©÷ûiÛ·D¡Êšr9‡º‚©!J‰uÝ0½ qfXQqˆ¯˜ ¢†╬‡=nŸ
?}záYäq{¹¤wÂ:µ CP;8 1kÚ§G¥ToÊ.¡V9å{·Þ«À%ìOX5V2†`WlDä FÉ©ÙÂZ¿ÀËà(WùÝò¾Ási“ ¢bqtYhPéQ8,¿bÒ£È.ìt32ˆéæ´‡y‡åÞTzªSMÏJQcu8LhP³RÔXÜõ:e;±Á¹38ÊvÎÍ©ÑB
ÆeÉ2qP£M“uíD×ÎÐ(×ËwlÍ8¶vi[¡°A:¶©R†Qœc#Ù…MCFq"½m_»»¹“J»À‹sìŒô¿zH7Ð gd¼ŽÙèØS8Êö?pl 5^—$«ÛAR§œ£x×F6ºöŽr„]¶s ¬G‡dÕ88·)Ãhι‘콈ŒŒb$}Z÷Ûð‡Ùƒ½4÷†ž–®Ó«™lã0XjÖ± ~=å‚ôRVâŒò5îgÅlg]êãÁàÏS2Hu~Åt™ÞÌܽª«tB¥à3å˵H9Å0®ŒØ&xì BĬ¿Íù°4 ½ÛÎÍESé%~¦æ¢iRr1¬+#\yJ).ß™µ÷/Z3ÛmRn1¬3#œyJ).Ú™•Ý”`î)Ôœe\¡.ܧ›BA˜ß ¾ }´
?õÅMƒ‡&üC•mšáßAò¡ãUÎâÃÃ:N ·Ô2l‹Jüûê?®²¸ãendstream
endobj
260 0 obj
1984
endobj
261 0 obj<</Type/Page/Parent 191 0 R/Contents 262 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 134 0 R>>endobj
262 0 obj<</Length 263 0 R/Filter/FlateDecode>>stream
xÚÕ˜Ár›0†ï<…ŽíÁ
HB׸uOí¤1}š`;Æ´O§oß•´
à©=ÙN2Ìì,|kýÚ_kò+a$…_F2iþžšä¾LîVš0MÊ
a2£œH%àZ>¿+«ïûš´²l}}èïËÉÇ2Ii
saæòø‰(NS"³žkˆ.¨Ä`OÖ¦ÂÙÝ–Ü­r˜©© `¦]Á{*)#³UFà†°,©‰e0°/U³;l
l ¥X>˨à.zÁ&#rW/¨
f52réEä1‘̤¤ùy‹úÐ>Øøªßµ‡·•À…” ¨—I£c´€5Šœf̪^ŒÃV?5¯ÞÖB“1¤å¾:ëãL 2Ø¥‹·à÷¤°ý=é‚PO
­)v¥ŠZÛ³µ'pÌ#ìö­-
Æó2Ú (ca|Š2ÆÌíÙÎÜvÓö #÷övAÈÞBe~Æ{{²V°ö ÓH‚©xì+‹¯¥ËùÕœ©HW
= »R¦¨hÜÚHFkÑ.ïP7`옄¹°³Á­ÊA sé§N76²ÑØc8ævÝÆVcgÜNg6
}FÇŒd¥ŒXc2¦‘´lŸë·UãŠ\ßÐþ—¾dz4plìKžú£ãæF6öåîòv«}éLåðzã‚ ‚©òlÆÍ·Â óö3½ ²_Ko²bv¹\iwŽ¥°×.¼(
|Q„犿XÏË9bÂ"@»I—öœu»éW]87ì¼Ù– Î¥=®ìÚ“ycžßë`F!ÑÂïµÍ{Ücý³íúÀRGÀ‰âüÓÁ
mÕvÍÌ¡&.Ö6Lt·*pÆ*Ü¿Á/¿=¬Íÿ6»í©³gù\ªmmÎò°¯ì²`¹‚%.·«ØíP°¯É_*Ïk%endstream
endobj
263 0 obj
710
endobj
264 0 obj<</Count 9/First 265 0 R/Last 318 0 R>>endobj
265 0 obj<</Parent 264 0 R/Title(Table of Contents)/Dest[258 0 R/XYZ null 756 null]/Next 266 0 R>>endobj
266 0 obj<</Parent 264 0 R/Count -3/First 267 0 R/Last 269 0 R/Title(1 Scope)/Dest[198 0 R/XYZ null 743 null]/Prev 265 0 R/Next 270 0 R>>endobj
267 0 obj<</Parent 266 0 R/Title(1.1 Identification)/Dest[198 0 R/XYZ null 693 null]/Next 268 0 R>>endobj
268 0 obj<</Parent 266 0 R/Title(1.2 System Overview)/Dest[198 0 R/XYZ null 613 null]/Prev 267 0 R/Next 269 0 R>>endobj
269 0 obj<</Parent 266 0 R/Title(1.3 Document Overview)/Dest[198 0 R/XYZ null 389 null]/Prev 268 0 R>>endobj
270 0 obj<</Parent 264 0 R/Count -2/First 271 0 R/Last 272 0 R/Title(2 References)/Dest[204 0 R/XYZ null 743 null]/Prev 266 0 R/Next 273 0 R>>endobj
271 0 obj<</Parent 270 0 R/Title(2.1 CUPS Documentation)/Dest[204 0 R/XYZ null 693 null]/Next 272 0 R>>endobj
272 0 obj<</Parent 270 0 R/Title(2.2 Other Documents)/Dest[204 0 R/XYZ null 495 null]/Prev 271 0 R>>endobj
273 0 obj<</Parent 264 0 R/Count -3/First 274 0 R/Last 276 0 R/Title(3 File Management)/Dest[210 0 R/XYZ null 743 null]/Prev 270 0 R/Next 277 0 R>>endobj
274 0 obj<</Parent 273 0 R/Title(3.1 Directory Structure)/Dest[210 0 R/XYZ null 693 null]/Next 275 0 R>>endobj
275 0 obj<</Parent 273 0 R/Title(3.2 Source Files)/Dest[210 0 R/XYZ null 600 null]/Prev 274 0 R/Next 276 0 R>>endobj
276 0 obj<</Parent 273 0 R/Title(3.3 Configuration Management)/Dest[210 0 R/XYZ null 534 null]/Prev 275 0 R>>endobj
277 0 obj<</Parent 264 0 R/Count -4/First 278 0 R/Last 281 0 R/Title(4 Trouble Report Processing)/Dest[216 0 R/XYZ null 743 null]/Prev 273 0 R/Next 282 0 R>>endobj
278 0 obj<</Parent 277 0 R/Title(4.1 Classification)/Dest[216 0 R/XYZ null 580 null]/Next 279 0 R>>endobj
279 0 obj<</Parent 277 0 R/Title(4.2 Identification)/Dest[216 0 R/XYZ null 355 null]/Prev 278 0 R/Next 280 0 R>>endobj
280 0 obj<</Parent 277 0 R/Title(4.3 Correction)/Dest[216 0 R/XYZ null 223 null]/Prev 279 0 R/Next 281 0 R>>endobj
281 0 obj<</Parent 277 0 R/Title(4.4 Notification)/Dest[219 0 R/XYZ null 736 null]/Prev 280 0 R>>endobj
282 0 obj<</Parent 264 0 R/Count -4/First 283 0 R/Last 286 0 R/Title(5 Software Releases)/Dest[222 0 R/XYZ null 743 null]/Prev 277 0 R/Next 287 0 R>>endobj
283 0 obj<</Parent 282 0 R/Title(5.1 Version Numbering)/Dest[222 0 R/XYZ null 693 null]/Next 284 0 R>>endobj
284 0 obj<</Parent 282 0 R/Title(5.2 Generation)/Dest[222 0 R/XYZ null 264 null]/Prev 283 0 R/Next 285 0 R>>endobj
285 0 obj<</Parent 282 0 R/Title(5.3 Testing)/Dest[222 0 R/XYZ null 185 null]/Prev 284 0 R/Next 286 0 R>>endobj
286 0 obj<</Parent 282 0 R/Title(5.4 Release)/Dest[225 0 R/XYZ null 736 null]/Prev 285 0 R>>endobj
287 0 obj<</Parent 264 0 R/Count -2/First 288 0 R/Last 289 0 R/Title(A Glossary)/Dest[228 0 R/XYZ null 743 null]/Prev 282 0 R/Next 290 0 R>>endobj
288 0 obj<</Parent 287 0 R/Title(A.1 Terms)/Dest[228 0 R/XYZ null 693 null]/Next 289 0 R>>endobj
289 0 obj<</Parent 287 0 R/Title(A.2 Acronyms)/Dest[228 0 R/XYZ null 389 null]/Prev 288 0 R>>endobj
290 0 obj<</Parent 264 0 R/Count -9/First 291 0 R/Last 315 0 R/Title(B Coding Requirements)/Dest[234 0 R/XYZ null 743 null]/Prev 287 0 R/Next 318 0 R>>endobj
291 0 obj<</Parent 290 0 R/Count -2/First 292 0 R/Last 293 0 R/Title(B.1 Source Files)/Dest[234 0 R/XYZ null 672 null]/Next 294 0 R>>endobj
292 0 obj<</Parent 291 0 R/Title(B.1.1 Naming)/Dest[234 0 R/XYZ null 610 null]/Next 293 0 R>>endobj
293 0 obj<</Parent 291 0 R/Title(B.1.2 Documentation)/Dest[234 0 R/XYZ null 525 null]/Prev 292 0 R>>endobj
294 0 obj<</Parent 290 0 R/Count -2/First 295 0 R/Last 296 0 R/Title(B.2 Functions)/Dest[237 0 R/XYZ null 676 null]/Prev 291 0 R/Next 297 0 R>>endobj
295 0 obj<</Parent 294 0 R/Title(B.2.1 Naming)/Dest[237 0 R/XYZ null 615 null]/Next 296 0 R>>endobj
296 0 obj<</Parent 294 0 R/Title(B.2.2 Documentation)/Dest[237 0 R/XYZ null 489 null]/Prev 295 0 R>>endobj
297 0 obj<</Parent 290 0 R/Count -2/First 298 0 R/Last 299 0 R/Title(B.3 Methods)/Dest[237 0 R/XYZ null 278 null]/Prev 294 0 R/Next 300 0 R>>endobj
298 0 obj<</Parent 297 0 R/Title(B.3.1 Naming)/Dest[237 0 R/XYZ null 217 null]/Next 299 0 R>>endobj
299 0 obj<</Parent 297 0 R/Title(B.3.2 Documentation)/Dest[237 0 R/XYZ null 145 null]/Prev 298 0 R>>endobj
300 0 obj<</Parent 290 0 R/Count -2/First 301 0 R/Last 302 0 R/Title(B.4 Variables)/Dest[240 0 R/XYZ null 604 null]/Prev 297 0 R/Next 303 0 R>>endobj
301 0 obj<</Parent 300 0 R/Title(B.4.1 Naming)/Dest[240 0 R/XYZ null 542 null]/Next 302 0 R>>endobj
302 0 obj<</Parent 300 0 R/Title(B.4.2 Documentation)/Dest[240 0 R/XYZ null 404 null]/Prev 301 0 R>>endobj
303 0 obj<</Parent 290 0 R/Count -2/First 304 0 R/Last 305 0 R/Title(B.5 Types)/Dest[240 0 R/XYZ null 303 null]/Prev 300 0 R/Next 306 0 R>>endobj
304 0 obj<</Parent 303 0 R/Title(B.5.1 Naming)/Dest[240 0 R/XYZ null 241 null]/Next 305 0 R>>endobj
305 0 obj<</Parent 303 0 R/Title(B.5.2 Documentation)/Dest[240 0 R/XYZ null 169 null]/Prev 304 0 R>>endobj
306 0 obj<</Parent 290 0 R/Count -2/First 307 0 R/Last 308 0 R/Title(B.6 Structures)/Dest[243 0 R/XYZ null 725 null]/Prev 303 0 R/Next 309 0 R>>endobj
307 0 obj<</Parent 306 0 R/Title(B.6.1 Naming)/Dest[243 0 R/XYZ null 663 null]/Next 308 0 R>>endobj
308 0 obj<</Parent 306 0 R/Title(B.6.2 Documentation)/Dest[243 0 R/XYZ null 591 null]/Prev 307 0 R>>endobj
309 0 obj<</Parent 290 0 R/Count -2/First 310 0 R/Last 311 0 R/Title(B.7 Classes)/Dest[243 0 R/XYZ null 424 null]/Prev 306 0 R/Next 312 0 R>>endobj
310 0 obj<</Parent 309 0 R/Title(B.7.1 Naming)/Dest[243 0 R/XYZ null 362 null]/Next 311 0 R>>endobj
311 0 obj<</Parent 309 0 R/Title(B.7.2 Documentation)/Dest[243 0 R/XYZ null 303 null]/Prev 310 0 R>>endobj
312 0 obj<</Parent 290 0 R/Count -2/First 313 0 R/Last 314 0 R/Title(B.8 Constants)/Dest[246 0 R/XYZ null 736 null]/Prev 309 0 R/Next 315 0 R>>endobj
313 0 obj<</Parent 312 0 R/Title(B.8.1 Naming)/Dest[246 0 R/XYZ null 693 null]/Next 314 0 R>>endobj
314 0 obj<</Parent 312 0 R/Title(B.8.2 Documentation)/Dest[246 0 R/XYZ null 581 null]/Prev 313 0 R>>endobj
315 0 obj<</Parent 290 0 R/Count -2/First 316 0 R/Last 317 0 R/Title(B.9 Code)/Dest[246 0 R/XYZ null 460 null]/Prev 312 0 R>>endobj
316 0 obj<</Parent 315 0 R/Title(B.9.1 Documentation)/Dest[246 0 R/XYZ null 399 null]/Next 317 0 R>>endobj
317 0 obj<</Parent 315 0 R/Title(B.9.2 Style)/Dest[249 0 R/XYZ null 729 null]/Prev 316 0 R>>endobj
318 0 obj<</Parent 264 0 R/Title(C Software Trouble Report Form)/Dest[252 0 R/XYZ null 743 null]/Prev 290 0 R>>endobj
319 0 obj<</Type/Catalog/Pages 191 0 R/Names 135 0 R/ViewerPreferences<</PageLayout/TwoColumnRight>>/Outlines 264 0 R/PageMode/UseOutlines/OpenAction[198 0 R/XYZ null null null]>>endobj
xref
0 320
0000000000 65535 f
0000000015 00000 n
0000000218 00000 n
0000000279 00000 n
0000000353 00000 n
0000000431 00000 n
0000000508 00000 n
0000000587 00000 n
0000000663 00000 n
0000000744 00000 n
0000000802 00000 n
0000000905 00000 n
0000001009 00000 n
0000001114 00000 n
0000001219 00000 n
0000001324 00000 n
0000001429 00000 n
0000001534 00000 n
0000001639 00000 n
0000001744 00000 n
0000001849 00000 n
0000001952 00000 n
0000002056 00000 n
0000002161 00000 n
0000002266 00000 n
0000002371 00000 n
0000002476 00000 n
0000002581 00000 n
0000002686 00000 n
0000002789 00000 n
0000002893 00000 n
0000002998 00000 n
0000003103 00000 n
0000003208 00000 n
0000003313 00000 n
0000003418 00000 n
0000003523 00000 n
0000003628 00000 n
0000003733 00000 n
0000003838 00000 n
0000003943 00000 n
0000004046 00000 n
0000004150 00000 n
0000004255 00000 n
0000004360 00000 n
0000004465 00000 n
0000004570 00000 n
0000004675 00000 n
0000004780 00000 n
0000004885 00000 n
0000004990 00000 n
0000005095 00000 n
0000005200 00000 n
0000005303 00000 n
0000005407 00000 n
0000005512 00000 n
0000005617 00000 n
0000005722 00000 n
0000005827 00000 n
0000005932 00000 n
0000006037 00000 n
0000006142 00000 n
0000006247 00000 n
0000006352 00000 n
0000006457 00000 n
0000006560 00000 n
0000006664 00000 n
0000006769 00000 n
0000006874 00000 n
0000006979 00000 n
0000007084 00000 n
0000007187 00000 n
0000007291 00000 n
0000007396 00000 n
0000007501 00000 n
0000007606 00000 n
0000007711 00000 n
0000007816 00000 n
0000007921 00000 n
0000008026 00000 n
0000008131 00000 n
0000008236 00000 n
0000008341 00000 n
0000008446 00000 n
0000008551 00000 n
0000008656 00000 n
0000008761 00000 n
0000008866 00000 n
0000008971 00000 n
0000009076 00000 n
0000009181 00000 n
0000009286 00000 n
0000009391 00000 n
0000009496 00000 n
0000009601 00000 n
0000009706 00000 n
0000009811 00000 n
0000009916 00000 n
0000010021 00000 n
0000010126 00000 n
0000010231 00000 n
0000010336 00000 n
0000010441 00000 n
0000010545 00000 n
0000010649 00000 n
0000010753 00000 n
0000010857 00000 n
0000011553 00000 n
0000011659 00000 n
0000011765 00000 n
0000011871 00000 n
0000011977 00000 n
0000012081 00000 n
0000012186 00000 n
0000012292 00000 n
0000012398 00000 n
0000012504 00000 n
0000012610 00000 n
0000012714 00000 n
0000012819 00000 n
0000012925 00000 n
0000013031 00000 n
0000013137 00000 n
0000013243 00000 n
0000013347 00000 n
0000013452 00000 n
0000013558 00000 n
0000013664 00000 n
0000013770 00000 n
0000013876 00000 n
0000013980 00000 n
0000014084 00000 n
0000014189 00000 n
0000014295 00000 n
0000014401 00000 n
0000014635 00000 n
0000014669 00000 n
0000014703 00000 n
0000015402 00000 n
0000015451 00000 n
0000015500 00000 n
0000015549 00000 n
0000015598 00000 n
0000015647 00000 n
0000015696 00000 n
0000015745 00000 n
0000015794 00000 n
0000015843 00000 n
0000015892 00000 n
0000015941 00000 n
0000015990 00000 n
0000016039 00000 n
0000016088 00000 n
0000016137 00000 n
0000016186 00000 n
0000016235 00000 n
0000016284 00000 n
0000016333 00000 n
0000016382 00000 n
0000016431 00000 n
0000016480 00000 n
0000016529 00000 n
0000016578 00000 n
0000016627 00000 n
0000016676 00000 n
0000016725 00000 n
0000016774 00000 n
0000016823 00000 n
0000016872 00000 n
0000016921 00000 n
0000016970 00000 n
0000017019 00000 n
0000017068 00000 n
0000017117 00000 n
0000017166 00000 n
0000017215 00000 n
0000017264 00000 n
0000017313 00000 n
0000017362 00000 n
0000017411 00000 n
0000017460 00000 n
0000017509 00000 n
0000017558 00000 n
0000017607 00000 n
0000017656 00000 n
0000017705 00000 n
0000017754 00000 n
0000017803 00000 n
0000017852 00000 n
0000017901 00000 n
0000017950 00000 n
0000017999 00000 n
0000018260 00000 n
0000018412 00000 n
0000024803 00000 n
0000024825 00000 n
0000024938 00000 n
0000025040 00000 n
0000025060 00000 n
0000025200 00000 n
0000026140 00000 n
0000026161 00000 n
0000026274 00000 n
0000026462 00000 n
0000026483 00000 n
0000026623 00000 n
0000027216 00000 n
0000027237 00000 n
0000027350 00000 n
0000027543 00000 n
0000027564 00000 n
0000027695 00000 n
0000028308 00000 n
0000028329 00000 n
0000028442 00000 n
0000028631 00000 n
0000028652 00000 n
0000028783 00000 n
0000029727 00000 n
0000029748 00000 n
0000029879 00000 n
0000030166 00000 n
0000030187 00000 n
0000030327 00000 n
0000031243 00000 n
0000031264 00000 n
0000031395 00000 n
0000031753 00000 n
0000031774 00000 n
0000031914 00000 n
0000032410 00000 n
0000032431 00000 n
0000032562 00000 n
0000033014 00000 n
0000033035 00000 n
0000033175 00000 n
0000034315 00000 n
0000034337 00000 n
0000034477 00000 n
0000035383 00000 n
0000035404 00000 n
0000035544 00000 n
0000036470 00000 n
0000036491 00000 n
0000036631 00000 n
0000037277 00000 n
0000037298 00000 n
0000037438 00000 n
0000038258 00000 n
0000038279 00000 n
0000038419 00000 n
0000039346 00000 n
0000039367 00000 n
0000039507 00000 n
0000039911 00000 n
-717
Ver Arquivo
@@ -1,717 +0,0 @@
<HTML>
<HEAD>
<META NAME="DOCNUMBER" CONTENT="CUPS-CMP-1.0">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Configuration Management Plan</TITLE>
</HEAD>
<BODY>
<H1>Scope</H1>
<H2>Identification</H2>
This configuration management plan document provides the guidelines for
development and maintainance of the Common UNIX Printing System ("CUPS")
Version 1.0 software.
<H2>System Overview</H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
and users. CUPS provides the System V and Berkeley command-line interfaces.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis
for managing print jobs and queues. The Line Printer Daemon (LPD,
RFC1179), Server Message Block (SMB), and AppSocket protocols are also
supported with reduced functionality.
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
This configuration management document is organized into the following
sections:
<UL>
<LI>1 - Scope</LI>
<LI>2 - References</LI>
<LI>3 - File Management</LI>
<LI>4 - Trouble Report Processing</LI>
<LI>5 - Software Releases</LI>
<LI>A - Glossary</LI>
<LI>B - Coding Requirements</LI>
</UL>
<H1>References</H1>
<H2>CUPS Documentation</H2>
The following CUPS documentation is referenced by this document:
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan
<LI>CUPS-IDD-1.0: CUPS System Interface Design Description
<LI>CUPS-SAM-1.0.x: CUPS Software Administrators Manual
<LI>CUPS-SDD-1.0: CUPS Software Design Description
<LI>CUPS-SPM-1.0: CUPS Software Programming Manual
<LI>CUPS-SSR-1.0: CUPS Software Security Report
<LI>CUPS-STP-1.0: CUPS Software Test Plan
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description
</UL>
<H2>Other Documents</H2>
The following non-CUPS documents are referenced by this document:
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft)
<LI>IPP/1.0: Additional Optional Operations - Set 1
<LI>IPP/1.0: Encoding and Transport
<LI>IPP/1.0: Implementers Guide
<LI>IPP/1.0: Model and Semantics
<LI>RFC 1179, Line Printer Daemon Protocol
</UL>
<H1>File Management</H1>
<H2>Directory Structure</H2>
Each source file shall be placed a sub-directory corresponding to the software
sub-system it belongs to ("scheduler", "libcups", etc.) To remain compatible
with older UNIX filesystems, directory names shall not exceed 16 characters
in length.
<H2>Source Files</H2>
Source files shall be documented and formatted as described in Appendix
B, Coding Requirements.
<H2>Configuration Management</H2>
Source files shall be placed under the control of the Concurrent Versions
System ("CVS") software. Source files shall be "checked in" with each change
so that modifications can be tracked.
<P>Documentation on the CVS software is included with the whitepaper, "CVS
II: Parallelizing Software Development".
<H1>Trouble Report Processing</H1>
A Software Trouble Report ("STR") shall be submitted every time a user
or vendor experiences a problem with the CUPS software. Trouble reports
are maintained in a database with one of the following states:
<OL>
<LI>STR is closed with complete resolution</LI>
<LI>STR is closed without resolution</LI>
<LI>STR is active</LI>
<LI>STR is pending (new STR or additional information available)</LI>
</OL>
Trouble reports shall be processed using the following steps.
<H2>Classification</H2>
When a trouble report is received it must be classified at one of the following
levels:
<OL>
<LI>Request for enhancement</LI>
<LI>Documentation error</LI>
<LI>Unable to print a file</LI>
<LI>Unable to print to a printer</LI>
<LI>Unable to print at all</LI>
</OL>
The scope of the problem should also be determined as:
<OL>
<LI>Specific to a machine</LI>
<LI>Specific to an operating system</LI>
<LI>Applies to all machines and operating systems</LI>
</OL>
<H2>Identification</H2>
Once the level and scope of the trouble report is determined the software
sub-system(s) involved with the problem are determined. This may involve
additional communication with the user or vendor to isolate the problem
to a specific cause.
<P>When the sub-system(s) involved have been identified, an engineer will
then determine the change(s) needed and estimate the time required for
the change(s).
<H2>Correction</H2>
Corrections are scheduled based upon the severity and complexity of the
problem. Once all changes have been made, documented, and tested successfully
a new software release snapshot is generated. Additional tests are added
as necessary for proper testing of the changes.
<H2>Notification</H2>
The user or vendor is notified when the fix is available or if the problem
was caused by user error.
<H1>Software Releases</H1>
<H2>Version Numbering</H2>
CUPS uses a three-part version number separated by periods to represent
the major, minor, and patch release numbers:
<UL>
<PRE>
major.minor.patch
1.0.0
</PRE>
</UL>
Beta-test releases are indentified by appending the letter B followed by
the build number:
<UL>
<PRE>
major.minor.patchbbuild
1.0.0b1
</PRE>
</UL>
A CVS snapshot is generated for every beta and final release and uses
the version number preceded by the letter "v" and with the decimal
points replaced by underscores:
<UL>
<PRE>
v1_0_0b1
v1_0_0
</PRE>
</UL>
Each change that corrects a fault in a software sub-system increments the
patch release number. If a change affects the software design of CUPS then
the minor release number will be incremented and the patch release number
reset to 0. If CUPS is completely redesigned the major release number will
be incremented and the minor and patch release numbers reset to 0:
<UL>
<PRE>
1.0.0b1 First beta release
1.0.0b2 Second beta release
1.0.0 First production release
1.0.1b1 First beta of 1.0.1
1.0.1 Production release of 1.0.1
1.1.0b1 First beta of 1.1.0
1.1.0 Production release of 1.1.0
2.0.0b1 First beta of 2.0.0
2.0.0 Production release of 2.0.0
</PRE>
</UL>
<H2>Generation</H2>
Software releases shall be generated for each successfully completed software
trouble report. All object and executable files shall be deleted prior
to performing a full build to ensure that source files are recompiled.
<H2>Testing</H2>
Software testing shall be conducted according to the CUPS Software Test
Plan, CUPS-STP-1.0. Failed tests cause STRs to be generated to correct
the problems found.
<H2>Release</H2>
When testing has been completed successfully a new distribution image is
created from the current CVS code "snapshot". No production release shall
contain software that has not passed the appropriate software tests.
<H1 TYPE=A VALUE=1>Glossary</H1>
<H2>Terms</H2>
<DL>
<DT>C
<DD>A computer language.
<DT>parallel
<DD>Sending or receiving data more than 1 bit at a time.
<DT>pipe
<DD>A one-way communications channel between two programs.
<DT>serial
<DD>Sending or receiving data 1 bit at a time.
<DT>socket
<DD>A two-way network communications channel.
</DL>
<H2>Acronyms</H2>
<DL>
<DT>ASCII
<DD>American Standard Code for Information Interchange
<DT>CUPS
<DD>Common UNIX Printing System
<DT>ESC/P
<DD>EPSON Standard Code for Printers
<DT>FTP
<DD>File Transfer Protocol
<DT>HP-GL
<DD>Hewlett-Packard Graphics Language
<DT>HP-PCL
<DD>Hewlett-Packard Printer Control Language
<DT>HP-PJL
<DD>Hewlett-Packard Printer Job Language
<DT>IETF
<DD>Internet Engineering Task Force
<DT>IPP
<DD>Internet Printing Protocol
<DT>ISO
<DD>International Standards Organization
<DT>LPD
<DD>Line Printer Daemon
<DT>MIME
<DD>Multimedia Internet Mail Exchange
<DT>PCL
<DD>Page Control Language
<DT>PPD
<DD>PostScript Printer Description
<DT>SMB
<DD>Server Message Block
<DT>TFTP
<DD>Trivial File Transfer Protocol
</DL>
<H1>Coding Requirements</H1>
These coding requirements provide detailed information on source file
formatting and documentation content. These guidelines shall be applied
to all C and C++ source files provided with CUPS.
<H2>Source Files</H2>
<H3>Naming</H3>
All source files names shall be 16 characters or less in length to
ensure compatibility with older UNIX filesystems. Source files
containing functions shall have an extension of ".c" for ANSI C and
".cpp" for C++ source files. All other "include" files shall have an
extension of ".h".
<H3>Documentation</H3>
The top of each source file shall contain a header giving the name of the
file, the purpose or nature of the source file, the copyright and licensing
notice, and the functions contained in the file. The file name and revision
information is provided by the CVS "$Id: cmp.shtml 351 1999-05-21 20:54:09Z mike $" tag:
<UL>
<PRE>
/*
* "$Id: cmp.shtml 351 1999-05-21 20:54:09Z mike $"
*
* Description of file contents.
*
* Copyright 1997-1999 by Easy Software Products, all rights
* reserved.
*
* These coded instructions, statements, and computer programs are
* the property of Easy Software Products and are protected by
* Federal copyright law. Distribution and use rights are outlined
* in the file "LICENSE.txt" which should have been included with
* this file. If this file is missing or damaged please contact
* Easy Software Products at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44145 Airport View Drive, Suite 204
* Hollywood, Maryland 20636-3111 USA
*
* Voice: (301) 373-9603
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*
* Contents:
*
* function1() - Description 1.
* function2() - Description 2.
* function3() - Description 3.
*/
</PRE>
</UL>
The bottom of each source file shall contain a trailer giving the name
of the file using the CVS "$Id: cmp.shtml 351 1999-05-21 20:54:09Z mike $" tag. The primary purpose of this is to
mark the end of a source file; if the trailer is missing it is possible
that code has been lost near the end of the file:
<UL>
<PRE>
/*
* End of "$Id: cmp.shtml 351 1999-05-21 20:54:09Z mike $".
*/
</PRE>
</UL>
<H2>Functions</H2>
<H3>Naming</H3>
Functions with a global scope shall be capitalized ("DoThis", "DoThat",
"DoSomethingElse", etc.) The only exception to this rule shall be the
CUPS interface library functions which may begin with a prefix word in
lowercase ("cupsDoThis", "cupsDoThat", etc.)
<P>Functions with a local scope shall be declared "static" and be lowercase
with underscores between words ("do_this", "do_that", "do_something_else",
etc.)
<H3>Documentation</H3>
Each function shall begin with a comment header describing what the function
does, the possible input limits (if any), and the possible output values
(if any), and any special information needed:
<UL>
<PRE>
/*
* 'do_this()' - Compute y = this(x).
*
* Notes: none.
*/
static float /* O - Inverse power value, 0.0 &lt;= y &lt;= 1.0 */
do_this(float x) /* I - Power value (0.0 &lt;= x &lt;= 1.0) */
{
...
return (y);
}
</PRE>
</UL>
<H2>Methods</H2>
<H3>Naming</H3>
Methods shall be in lowercase with underscores between words ("do_this",
"do_that", "do_something_else", etc.)
<H3>Documentation</H3>
Each method shall begin with a comment header describing what the method
does, the possible input limits (if any), and the possible output values
(if any), and any special information needed:
<UL>
<PRE>
/*
* 'class::do_this()' - Compute y = this(x).
*
* Notes: none.
*/
float /* O - Inverse power value, 0.0 &lt;= y &lt;= 1.0 */
class::do_this(float x) /* I - Power value (0.0 &lt;= x &lt;= 1.0) */
{
...
return (y);
}
</PRE>
</UL>
<H2>Variables</H2>
<H3>Naming</H3>
Variables with a global scope shall be capitalized ("ThisVariable",
"ThatVariable", "ThisStateVariable", etc.) The only exception to this
rule shall be the CUPS interface library global variables which must
begin with the prefix "cups" ("cupsThisVariable", "cupsThatVariable",
etc.) Global variables shall be replaced by function arguments whenever
possible.
<P>Variables with a local scope shall be lowercase with underscores between
words ("this_variable", "that_variable", etc.) Any local variables shared
by functions within a source file shall be declared "static".
<H3>Documentation</H3>
Each variable shall be declared on a separate line and shall be immediately
followed by a comment block describing the variable:
<UL><PRE>
int this_variable; /* The current state of this */
int that_variable; /* The current state of that */
</PRE></UL>
<H2>Types</H2>
<H3>Naming</H3>
All type names shall be lowercase with underscores between words and
"_t" appended to the end of the name ("this_type_t", "that_type_t",
etc.)
<H3>Documentation</H3>
Each type shall have a comment block immediately before the typedef:
<UL>
<PRE>
/*
* This type is for CUPS foobar options.
*/
typedef int cups_this_type_t;
</PRE>
</UL>
<H2>Structures</H2>
<H3>Naming</H3>
All structure names shall be lowercase with underscores between words and
"_str" appended to the end of the name ("this_struct_str", "that_struct_str",
etc.)
<H3>Documentation</H3>
Each structure shall have a comment block immediately before the struct
and each member shall be documented in accordance with the variable naming
policy above:
<UL>
<PRE>
/*
* This structure is for CUPS foobar options.
*/
struct cups_this_struct_str
{
int this_member; /* Current state for this */
int that_member; /* Current state for that */
};
</PRE>
</UL>
<H2>Classes</H2>
<H3>Naming</H3>
All class names shall be lowercase with underscores between words
("this_class", "that_class", etc.)
<H3>Documentation</H3>
Each class shall have a comment block immediately before the class
and each member shall be documented in accordance with the variable naming
policy above:
<UL>
<PRE>
/*
* This class is for CUPS foobar options.
*/
class cups_this_class
{
int this_member; /* Current state for this */
int that_member; /* Current state for that */
};
</PRE>
</UL>
<H2>Constants</H2>
<H3>Naming</H3>
All constant names shall be uppercase with underscored between words
("THIS_CONSTANT", "THAT_CONSTANT", etc.) Constants defined for the CUPS
interface library must begin with an uppercase prefix
("CUPS_THIS_CONSTANT", "CUPS_THAT_CONSTANT", etc.)
<P>Typed enumerations shall be used whenever possible to allow for type
checking by the compiler.
<H3>Documentation</H3>
Comment blocks shall immediately follow each constant:
<UL>
<PRE>
enum
{
CUPS_THIS_TRAY, /* This tray */
CUPS_THAT_TRAY /* That tray */
};
</PRE>
</UL>
<H2>Code</H2>
<H3>Documentation</H3>
All source code shall utilize block comments within functions to describe
the operations being performed by a group of statements:
<UL>
<PRE>
/*
* Clear the state array before we begin...
*/
for (i = 0; i &lt; (sizeof(array) / sizeof(sizeof(array[0])); i ++)
array[i] = STATE_IDLE;
/*
* Wait for state changes...
*/
do
{
for (i = 0; i &lt; (sizeof(array) / sizeof(sizeof(array[0])); i ++)
if (array[i] != STATE_IDLE)
break;
if (i == (sizeof(array) / sizeof(array[0])))
sleep(1);
} while (i == (sizeof(array) / sizeof(array[0])));
</PRE>
</UL>
<H3>Style</H3>
<H4 TYPE="a">Indentation</H4>
All code blocks enclosed by brackets shall begin with the opening brace
on a new line. The code then follows starting on a new line after the brace
and is indented 2 spaces. The closing brace is then placed on a new line
following the code at the original indentation:
<UL>
<PRE>
{
int i; /* Looping var */
/*
* Process foobar values from 0 to 999...
*/
for (i = 0; i &lt; 1000; i ++)
{
do_this(i);
do_that(i);
}
}
</PRE>
</UL>
Single-line statements following "do", "else", "for", "if", and "while"
shall be indented 2 spaces as well. Blocks of code in a "switch" block
shall be indented 4 spaces after each "case" and "default" case:
<UL>
<PRE>
switch (array[i])
{
case STATE_IDLE :
do_this(i);
do_that(i);
break;
default :
do_nothing(i);
break;
}
</PRE>
</UL>
<H4>Spacing</H4>
A space shall follow each reserved word ("if", "while", etc.) Spaces shall
not be inserted between a function name and the arguments in parenthesis.
<H4>Return Values</H4>
Parenthesis shall surround values returned from a function using "return":
<UL>
<PRE>
return (STATE_IDLE);
</PRE>
</UL>
<H4>Loops</H4>
Whenever convenient loops should count downward to zero to improve program
performance:
<UL>
<PRE>
for (i = sizeof(array) / sizeof(array[0]) - 1; i >= 0; i --)
array[i] = STATE_IDLE;
</PRE>
</UL>
<H1 ALIGN=RIGHT>Software Trouble Report Form</H1>
<CENTER><TABLE WIDTH="80%">
<TR>
<TH ALIGN=RIGHT>Summary of Problem:</TH>
<TD ALIGN=LEFT>________________________________________</TD>
</TR>
<TR>
<TH ALIGN=RIGHT>Problem Severity:</TH>
<TD ALIGN=LEFT>__1=RFE
<BR>__2=Documentation-Error
<BR>__3=Unable-to-Print-a-File
<BR>__4=Unable-to-Print-to-a-Printer
<BR>__5=Unable-to-Print-at-All</TD>
</TR>
<TR>
<TH ALIGN=RIGHT>Problem Scope:</TH>
<TD ALIGN=LEFT>__1=Machine __2=Operating-System __3=All</TD>
</TR>
<TR>
<TH ALIGN=RIGHT VALIGN=TOP>Detailed Description of Problem:</TH>
<TD ALIGN=LEFT>________________________________________
<BR>________________________________________
<BR>________________________________________
<BR>________________________________________
<BR>________________________________________
<BR>________________________________________</TD>
</TR>
</TABLE></CENTER>
</BODY>
</HTML>
-4
Ver Arquivo
@@ -1,4 +0,0 @@
BODY { background-color: #cccc99 }
H1 { font-family: sans-serif; }
H2 { font-family: sans-serif; }
TH { background-color: #999966 }
-9
Ver Arquivo
@@ -1,9 +0,0 @@
H1 { font-family: sans-serif }
H2 { font-family: sans-serif }
H3 { font-family: sans-serif }
H4 { font-family: sans-serif }
H5 { font-family: sans-serif }
H6 { font-family: sans-serif }
SUP { font-family: sans-serif; font-size: 6pt }
PRE { margin-left: 2em }
CODE { font-weight: bold }
-70
Ver Arquivo
@@ -1,70 +0,0 @@
<HTML>
<HEAD>
<TITLE>Documentation - Common UNIX Printing System</TITLE>
<LINK REL=STYLESHEET TYPE="text/css" HREF="cups.css">
<MAP NAME="navbar">
<AREA SHAPE="RECT" COORDS="10,10,85,30" HREF="printers" ALT="Current Printer Status">
<AREA SHAPE="RECT" COORDS="95,10,175,30" HREF="classes" ALT="Current Printer Classes Status">
<AREA SHAPE="RECT" COORDS="185,10,235,30" HREF="jobs" ALT="Current Jobs Status">
<AREA SHAPE="RECT" COORDS="245,10,395,30" HREF="documentation.html" ALT="Read CUPS Documentation On-Line">
<AREA SHAPE="RECT" COORDS="405,10,490,30" HREF="http://www.cups.org" ALT="Download the Current CUPS Software">
</MAP>
</HEAD>
<BODY>
<P ALIGN=CENTER>
<A HREF="http://www.easysw.com" ALT="Easy Software Products Home Page">
<IMG SRC="images/logo.gif" WIDTH="71" HEIGHT="40" BORDER=0 ALT="Easy Software Products Home Page"></A>
<IMG SRC="images/navbar.gif" WIDTH="540" HEIGHT="40" USEMAP="#navbar" BORDER=0>
<H1>Documentation</H1>
The following documentation for CUPS is available on this server:
<UL>
<LI>Whitepaper - An Overview of the Common UNIX Printing System (
<A HREF="overview.html">HTML</A> |
<A HREF="overview.pdf">PDF</A> )
<LI>Software Users Manual (
<A HREF="sum.html">HTML</A> |
<A HREF="sum.pdf">PDF</A> )
<LI>Software Administrators Manual (
<A HREF="sum.html">HTML</A> |
<A HREF="sum.pdf">PDF</A> )
<LI>Configuration Management Plan (
<A HREF="cmp.html">HTML</A> |
<A HREF="cmp.pdf">PDF</A> )
<LI>Interface Design Description (
<A HREF="idd.html">HTML</A> |
<A HREF="idd.pdf">PDF</A> )
<LI>Software Design Description (
<A HREF="sdd.html">HTML</A> |
<A HREF="sdd.pdf">PDF</A> )
<LI>Software Version Description (
<A HREF="svd.html">HTML</A> |
<A HREF="svd.pdf">PDF</A> )
<LI>Software Security Report (
<A HREF="ssr.html">HTML</A> |
<A HREF="ssr.pdf">PDF</A> )
<LI>Software Test Plan (Not Yet Available)
</UL>
<HR>
<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the
trademark property of <A HREF="http://www.easysw.com">Easy Software
Products</A>. CUPS is copyright 1997-1999 by Easy Software Products,
All Rights Reserved.
</BODY>
</HTML>
BIN
Ver Arquivo
Arquivo binário não exibido.
-741
Ver Arquivo
@@ -1,741 +0,0 @@
<HTML>
<HEAD>
<TITLE>DRAFT - CUPS Interface Design Description</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-IDD-1.0">
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>DRAFT - CUPS Interface Design Description</H1></A><BR>
CUPS-IDD-1.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 References</A></B>
<UL>
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
</UL>
<B><A HREF=#3>3 Internal Interfaces</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Character Set Files</A></LI>
<LI><A HREF=#3_2>3.2 Language Files</A></LI>
<LI><A HREF=#3_3>3.3 MIME Files</A></LI>
<UL>
<LI><A HREF=#3_3_1>3.3.1 mime.types</A></LI>
<LI><A HREF=#3_3_2>3.3.2 mime.convs</A></LI>
</UL>
<LI><A HREF=#3_4>3.4 PostScript Printer Description Files</A></LI>
<UL>
<LI><A HREF=#3_4_1>3.4.1 CUPS Extensions to PPD Files</A></LI>
</UL>
<LI><A HREF=#3_5>3.5 Scheduler Configuration Files</A></LI>
<UL>
<LI><A HREF=#3_5_1>3.5.1 classes.conf</A></LI>
<LI><A HREF=#3_5_2>3.5.2 cupsd.conf</A></LI>
<LI><A HREF=#3_5_3>3.5.3 printers.conf</A></LI>
</UL>
</UL>
<B><A HREF=#4>4 External Interfaces</A></B>
<UL>
<LI><A HREF=#4_1>4.1 AppSocket Protocol</A></LI>
<LI><A HREF=#4_2>4.2 CUPS Browsing Protocol</A></LI>
<LI><A HREF=#4_3>4.3 CUPS PostScript File</A></LI>
<LI><A HREF=#4_4>4.4 CUPS Raster File</A></LI>
<LI><A HREF=#4_5>4.5 CUPS Raw Files</A></LI>
<LI><A HREF=#4_6>4.6 File Transfer Protocol</A></LI>
<LI><A HREF=#4_7>4.7 Internet Printing Protocol</A></LI>
<UL>
<LI><A HREF=#4_7_1>4.7.1 Get Default Destination (CUPS_GET_DEFAULT =
0x4001)</A></LI>
<LI><A HREF=#4_7_2>4.7.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></LI>
<LI><A HREF=#4_7_3>4.7.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></LI>
<LI><A HREF=#4_7_4>4.7.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
</LI>
<LI><A HREF=#4_7_5>4.7.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></LI>
<LI><A HREF=#4_7_6>4.7.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></LI>
<LI><A HREF=#4_7_7>4.7.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></LI>
<LI><A HREF=#4_7_8>4.7.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></LI>
<LI><A HREF=#4_7_9>4.7.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></LI>
<LI><A HREF=#4_7_10>4.7.10 Set Default Destination (CUPS_SET_DEFAULT =
0x400A)</A></LI>
</UL>
<LI><A HREF=#4_8>4.8 Line Printer Daemon Protocol</A></LI>
<LI><A HREF=#4_9>4.9 Server Message Block Protocol</A></LI>
<LI><A HREF=#4_10>4.10 Trivial File Transfer Protocol</A></LI>
</UL>
<B><A HREF=#5>5 5 - Directories</A></B>
<BR>
<BR><B><A HREF=#6>A Glossary</A></B>
<UL>
<LI><A HREF=#6_1>A.1 Terms</A></LI>
<LI><A HREF=#6_2>A.2 Acronyms</A></LI>
</UL>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
<P>This interface design description document provides detailed file
formats, message formats, and program conventions for the Common UNIX
Printing System (&quot;CUPS&quot;) Version 1.0. </P>
<H2><A NAME=1_2>1.2 System Overview</A></H2>
<P>The Common UNIX Printing System provides a portable printing layer
for UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
and users. CUPS provides the System V and Berkeley command-line
interfaces. </P>
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis for
managing print jobs and queues. The Line Printer Daemon (LPD, RFC1179),
Server Message Block (SMB), and AppSocket protocols are also supported
with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
<P>This interface design description document is organized into the
following sections: </P>
<UL>
<LI>1 - Scope </LI>
<LI>2 - References </LI>
<LI>3 - Internal Interfaces </LI>
<LI>4 - External Interfaces </LI>
<LI>5 - Directories </LI>
<LI>A - Glossary </LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
<P>The following CUPS documentation is referenced by this document: </P>
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.0: CUPS System Interface Design Description </LI>
<LI>CUPS-SAM-1.0.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.0: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.0: CUPS Software Programming Manual </LI>
<LI>CUPS-SSR-1.0: CUPS Software Security Report </LI>
<LI>CUPS-STP-1.0: CUPS Software Test Plan </LI>
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
<P>The following non-CUPS documents are referenced by this document: </P>
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
<LI>IPP/1.0: Additional Optional Operations - Set 1 </LI>
<LI>IPP/1.0: Encoding and Transport </LI>
<LI>IPP/1.0: Implementers Guide </LI>
<LI>IPP/1.0: Model and Semantics </LI>
<LI>RFC 1179, Line Printer Daemon Protocol </LI>
</UL>
<H1><A NAME=3>3 Internal Interfaces</A></H1>
<H2><A NAME=3_1>3.1 Character Set Files</A></H2>
<P>The character set files define a mapping between 8-bit characters
and the Unicode character set. They are named using the ISO standard
number defined for the character set. Each file consists of up to 256
lines of ASCII text. Each line consists of two hexadecimal numbers; the
first number is the character number in the character set (0x00 to
0xff), and the second number is the Unicode character number (0x0000 to
0xffff). </P>
<H2><A NAME=3_2>3.2 Language Files</A></H2>
<P>The language files define the default character set and a collection
of text messages in that language. They are named by prefixing the
string &quot;cups_&quot; to the front of the language specifier (e.g. &quot;cups_en&quot;,
&quot;cups_fr&quot;, etc.) Each file consists of two or more lines of ASCII text. </P>
<P>The first line identifies the character set to be used for the
messages. The currently recognized values are: </P>
<UL>
<LI>us-ascii </LI>
<LI>utf-8 </LI>
<LI>iso-8859-1 </LI>
<LI>iso-8859-2 </LI>
<LI>iso-8859-3 </LI>
<LI>iso-8859-4 </LI>
<LI>iso-8859-5 </LI>
<LI>iso-8859-6 </LI>
<LI>iso-8859-7 </LI>
<LI>iso-8859-8 </LI>
<LI>iso-8859-9 </LI>
<LI>iso-8859-14 </LI>
<LI>iso-8859-15 </LI>
</UL>
<P>The second and succeeding lines define text messages. If the message
text is preceded by a number, then the current message number is
updated and the text after the number is used. </P>
<H2><A NAME=3_3>3.3 MIME Files</A></H2>
<P>CUPS uses two MIME files in its standard configuration. </P>
<H3><A NAME=3_3_1>3.3.1 mime.types</A></H3>
<P>The mime.types file defines the recognized file types and consists
of 1 or more lines of ASCII text. Comment lines start with the pound
(&quot;#&quot;) character. The backslash (&quot;\&quot;) character can be used at the end
of a line to continue that line to the next. </P>
<P>Each non-blank line starts with a MIME type identifier
(&quot;super/type&quot;) as registered with the IANA. All text following the MIME
type is treated as a series of type recognition rules: </P>
<UL>
<PRE>
mime-type := super &quot;/&quot; type { SP rule }*
super := { &quot;a-z&quot; | &quot;A-Z&quot; }*
type := { &quot;a-z&quot; | &quot;A-Z&quot; | &quot;-&quot; | &quot;.&quot; | &quot;0-9&quot; }*
rule := { extension | match | operator | &quot;(&quot; rule &quot;)&quot; }*
extension := { &quot;a-z&quot; | &quot;A-Z&quot; | &quot;0-9&quot; }*
match := &quot;match(&quot; regexp &quot;)&quot; |
&quot;ascii(&quot; offset &quot;,&quot; length &quot;)&quot; |
&quot;printable(&quot; offset &quot;,&quot; length &quot;)&quot; |
&quot;string(&quot; offset &quot;,&quot; string &quot;)&quot; |
&quot;char(&quot; offset &quot;,&quot; value &quot;)&quot; |
&quot;short(&quot; offset &quot;,&quot; value &quot;)&quot; |
&quot;int(&quot; offset &quot;,&quot; value &quot;)&quot; |
&quot;locale(&quot; string &quot;)&quot;
operator := &quot;+&quot; | [ logical AND ]
&quot;,&quot; | SP [ logical OR ]
&quot;!&quot; [ unary NOT ]
</PRE>
</UL>
<P>The <CODE>int</CODE> and <CODE>short</CODE> rules match look for
integers in network byte order (a.k.a. big-endian) with the
most-significant byte first. </P>
<H3><A NAME=3_3_2>3.3.2 mime.convs</A></H3>
<P>The mime.types file defines the recognized file filters and consists
of 1 or more lines of ASCII text. Comment lines start with the pound
(&quot;#&quot;) character. </P>
<P>Each non-blank line starts with two MIME type identifiers
(&quot;super/type&quot;) representing the source and destination types. Following
the MIME types are a cost value (0 to 100) and the filter program to
use. If the filter program is not specified using the full path then it
must reside in the CUPS filter directory. </P>
<H2><A NAME=3_4>3.4 PostScript Printer Description Files</A></H2>
<P>The PostScript Printer Description (PPD) file format is described in <A
HREF=http://partners.adobe.com/supportservice/devrelations/PDFS/TN/5003.PPD_Spec_v4.3.pdf>
Adobe TechNote #5003: PostScript Printer Description File Format
Specification Version 4.3</A>. </P>
<H3><A NAME=3_4_1>3.4.1 CUPS Extensions to PPD Files</A></H3>
<P>CUPS adds several new attributes that are described below. </P>
<H4>3.4.1.1 cupsFilter</H4>
<P>This string attribute provides a conversion rule of the form: </P>
<UL>
<PRE>
source/type cost program
</PRE>
</UL>
<P>The destination type is assumed to the printer's type. If a printer
supports the source type directly the special filter program &quot;-&quot; may be
specified. </P>
<H4>3.4.1.2 cupsManualCopies</H4>
<P>This boolean attribute notifies the RIP filters that the destination
printer does not support copy generation in hardware. The default value
is false. </P>
<H4>3.4.1.3 cupsModelNumber</H4>
<P>This integer attribute specifies a printer-specific model number.
This number can be used by a filter program to adjust the output for a
specific model of printer. </P>
<H4>3.4.1.4 cupsProfile</H4>
<P>This string attribute specifies a color profile of the form: </P>
<UL>
<PRE>
resolution/type density m00 m01 m02 m10 m11 m12 m20 m21 m22
</PRE>
</UL>
<P>The <I>resolution</I> and <I>type</I> values may be &quot;-&quot; to act as a
wildcard. Otherwise they must match one of the <CODE>Resolution</CODE>
or <CODE>MediaType</CODE> attributes defined in the PPD file. </P>
<P>The <I>density</I> value defines a gamma and density adjustment
function such that: </P>
<UL>
<PRE>
f(x) = d * x<SUP>1/d</SUP>
</PRE>
</UL>
<P>The <I>m00</I> through <I>m22</I> values define a 3x3 transformation
matrix for the CMY color values. The density function is applied <I>
after</I> the CMY transformation. </P>
<H4>3.4.1.5 cupsVersion</H4>
<P>This required attribute describes which version of the CUPS IDD was
used for the PPD file extensions. Currently it must be the string
&quot;1.0&quot;. </P>
<H2><A NAME=3_5>3.5 Scheduler Configuration Files</A></H2>
<P>The scheduler reads three configuration files that define the
available printers, classes, and services: </P>
<DL>
<DT>classes.conf </DT>
<DD>This file defines all of the printer classes known to the system. </DD>
<DT>cupsd.conf </DT>
<DD>This file defines the files, directories, passwords, etc. used by
the scheduler. </DD>
<DT>printers.conf </DT>
<DD>This file defines all of the printers known to the system. </DD>
</DL>
<H3><A NAME=3_5_1>3.5.1 classes.conf</A></H3>
<P>The classes.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
<TR><TD>&lt;Class name&gt;
<BR> &lt;/Class&gt;</TD><TD></TR>
<TR><TD>&lt;DefaultClass name&gt;
<BR> &lt;/Class&gt;</TD><TD></TR>
<TR><TD>Info</TD><TD></TR>
<TR><TD>Location</TD><TD></TR>
<TR><TD>MoreInfo</TD><TD></TR>
<TR><TD>Printer</TD><TD></TR>
</TABLE>
</CENTER>
</P>
<H3><A NAME=3_5_2>3.5.2 cupsd.conf</A></H3>
<P>The cupsd.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
<TR><TD>AccessLog</TD><TD>Specifies the location of the access log file
(default &quot;logs/access_log&quot;).</TD></TR>
<TR><TD>Allow</TD><TD></TR>
<TR><TD>AuthClass</TD><TD></TR>
<TR><TD>AuthType</TD><TD></TR>
<TR><TD>BrowseAddress</TD><TD></TR>
<TR><TD>BrowseInterval</TD><TD></TR>
<TR><TD>BrowsePort</TD><TD></TR>
<TR><TD>BrowseTimeout</TD><TD></TR>
<TR><TD>Browsing</TD><TD></TR>
<TR><TD>DefaultCharset</TD><TD></TR>
<TR><TD>DefaultLanguage</TD><TD></TR>
<TR><TD>Deny</TD><TD></TR>
<TR><TD>DocumentRoot</TD><TD></TR>
<TR><TD>ErrorLog</TD><TD></TR>
<TR><TD>Group</TD><TD></TR>
<TR><TD>HostNameLookups</TD><TD></TR>
<TR><TD>ImplicitClasses</TD><TD></TR>
<TR><TD>KeepAlive</TD><TD></TR>
<TR><TD>KeepAliveTimeout</TD><TD></TR>
<TR><TD>&lt;Location path&gt;
<BR> &lt;/Location&gt;</TD><TD></TR>
<TR><TD>LogLevel</TD><TD></TR>
<TR><TD>MaxLogSize</TD><TD></TR>
<TR><TD>MaxRequestSize</TD><TD></TR>
<TR><TD>Order</TD><TD></TR>
<TR><TD>PageLog</TD><TD></TR>
<TR><TD>Port</TD><TD></TR>
<TR><TD>RIPCache</TD><TD></TR>
<TR><TD>ServerAdmin</TD><TD></TR>
<TR><TD>ServerName</TD><TD></TR>
<TR><TD>ServerRoot</TD><TD></TR>
<TR><TD>SystemGroup</TD><TD></TR>
<TR><TD>Timeout</TD><TD></TR>
<TR><TD>User</TD><TD></TR>
</TABLE>
</CENTER>
</P>
<H3><A NAME=3_5_3>3.5.3 printers.conf</A></H3>
<P>The printers.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
<TR><TD>&lt;DefaultPrinter name&gt;
<BR> &lt;/Printer&gt;</TD><TD></TR>
<TR><TD>DeviceURI</TD><TD></TR>
<TR><TD>Info</TD><TD></TR>
<TR><TD>Location</TD><TD></TR>
<TR><TD>MoreInfo</TD><TD></TR>
<TR><TD>&lt;Printer name&gt;
<BR> &lt;/Printer&gt;</TD><TD></TR>
<TR><TD>State</TD><TD></TR>
</TABLE>
</CENTER>
</P>
<H1><A NAME=4>4 External Interfaces</A></H1>
<H2><A NAME=4_1>4.1 AppSocket Protocol</A></H2>
<P>The AppSocket protocol is an 8-bit clean TCP/IP socket connection.
The default IP service port is 9100. </P>
<H2><A NAME=4_2>4.2 CUPS Browsing Protocol</A></H2>
<P>The CUPS Browsing Protocol is a UDP/IP-based broadcast service. By
default this service operates on IP service port 631. </P>
<P>Each broadcast packet describes the state of a single printer or
class and is an ASCII text string of up to 1450 bytes ending with a
newline (0x0a). The string is formatted as follows: </P>
<UL>
<PRE>
type SP state SP uri NL
</PRE>
</UL>
<P>The <I>state</I> and <I>uri</I> values correspond to the IPP <CODE>
printer-state</CODE> and <CODE>printer-uri-supported</CODE> attributes. </P>
<P>The <I>type</I> value is a hexadecimal number string representing
capability/type bits:
<CENTER>
<TABLE BORDER=1 WIDTH=40%>
<TR><TH WIDTH=8%>Bit</TH><TH>Description</TH></TR>
<TR><TD>0</TD><TD>0 = printer
<BR> 1 = class</TD></TR>
<TR><TD>1</TD><TD>0 = local
<BR> 1 = remote</TD></TR>
<TR><TD>2</TD><TD>1 = can print B</TD></TR>
<TR><TD>3</TD><TD>1 = can print color</TD></TR>
<TR><TD>4</TD><TD>1 = can duplex</TD></TR>
<TR><TD>5</TD><TD>1 = can staple</TD></TR>
<TR><TD>6</TD><TD>1 = can do fast copies</TD></TR>
<TR><TD>7</TD><TD>1 = can do fast collating</TD></TR>
<TR><TD>8</TD><TD>1 = can punch holes</TD></TR>
<TR><TD>9</TD><TD>1 = can cover</TD></TR>
<TR><TD>10</TD><TD>1 = can bind</TD></TR>
<TR><TD>11</TD><TD>1 = can sort</TD></TR>
<TR><TD>12</TD><TD>1 = can print up to 9x14 inches</TD></TR>
<TR><TD>13</TD><TD>1 = can print up to 18x24 inches</TD></TR>
<TR><TD>14</TD><TD>1 = can print up to 36x48 inches</TD></TR>
<TR><TD>15</TD><TD>1 = can print variable sizes</TD></TR>
</TABLE>
</CENTER>
</P>
<H2><A NAME=4_3>4.3 CUPS PostScript File</A></H2>
<P>CUPS PostScript files are device-dependent Adobe PostScript program
files. The PostScript language is described in the <A HREF=http://partners.adobe.com/supportservice/devrelations/PDFS/TN/PLRM.pdf>
Adobe PostScript Language Reference Manual, Third Edition</A>. </P>
<P>The MIME type for CUPS PostScript files is <CODE>
application/vnd.cups-postscript</CODE>. </P>
<H2><A NAME=4_4>4.4 CUPS Raster File</A></H2>
<P>CUPS raster files are device-dependent raster image files that
contain a PostScript page device dictionary and device-dependent raster
imagery for each page in the document. These files are used to
transfer raster data from the PostScript and image file RIPs to
device-dependent filters that convert the raster data to a printable
format. </P>
<P>A raster file begins with a four byte synchronization word:
0x52615374 (&quot;RaSt&quot;) for big-endian architectures and 0x74536152
(&quot;tSaR&quot;) for little-endian architectures. The writer of the raster
file will use the native word order, and the reader is responsible for
detecting a reversed word order file and swapping bytes as needed. The
CUPS Interface Library raster functions perform this function
automatically. </P>
<P>Following the synchronization word are a series of raster pages.
Each page starts with a page device dictionary header and is followed
immediately by the raster data for that page.
<CENTER>
<TABLE BORDER=1 WIDTH=80%>
<TR><TH WIDTH=10%>Bytes</TH><TH WIDTH=20%>Description</TH><TH>Values</TH>
</TR>
<TR><TD>0-63</TD><TD>MediaClass</TD><TD>Nul-terminated ASCII string</TD></TR>
<TR><TD>64-127</TD><TD>MediaColor</TD><TD>Nul-terminated ASCII string</TD>
</TR>
<TR><TD>128-191</TD><TD>MediaType</TD><TD>Nul-terminated ASCII string</TD>
</TR>
<TR><TD>192-255</TD><TD>OutputType</TD><TD>Nul-terminated ASCII string</TD>
</TR>
<TR><TD>256-259</TD><TD>AdvanceDistance</TD><TD>0 to 2<SUP>32</SUP> - 1
points</TD></TR>
<TR><TD>260-263</TD><TD>AdvanceMedia</TD><TD>0 = Never advance roll
<BR> 1 = Advance roll after file
<BR> 2 = Advance roll after job
<BR> 3 = Advance roll after set
<BR> 4 = Advance roll after page</TD></TR>
<TR><TD>264-267</TD><TD>Collate</TD><TD>0 = do not collate copies
<BR> 1 = collate copies</TD></TR>
<TR><TD>268-271</TD><TD>CutMedia</TD><TD>0 = Never cut media
<BR> 1 = Cut roll after file
<BR> 2 = Cut roll after job
<BR> 3 = Cut roll after set
<BR> 4 = Cut roll after page</TD></TR>
<TR><TD>272-275</TD><TD>Duplex</TD><TD>0 = Print single-sided
<BR> 1 = Print double-sided</TD></TR>
<TR><TD>276-283</TD><TD>HWResolution</TD><TD>Horizontal and vertical
resolution in dots-per-inch.</TD></TR>
<TR><TD>284-299</TD><TD>ImagingBoundingBox</TD><TD>Four integers giving
the left, bottom, right, and top positions of the page bounding box in
points</TD></TR>
<TR><TD>300-303</TD><TD>InsertSheet</TD><TD>0 = Do not insert separator
sheets
<BR> 1 = Insert separator sheets</TD></TR>
<TR><TD>304-307</TD><TD>Jog</TD><TD>0 = Do no jog pages
<BR> 1 = Jog pages after file
<BR> 2 = Jog pages after job
<BR> 3 = Jog pages after set</TD></TR>
<TR><TD>308-311</TD><TD>LeadingEdge</TD><TD>0 = Top edge is first
<BR> 1 = Right edge is first
<BR> 2 = Bottom edge is first
<BR> 3 = Left edge is first</TD></TR>
<TR><TD>312-319</TD><TD>Margins</TD><TD>Left and bottom origin of image
in points</TD></TR>
<TR><TD>320-323</TD><TD>ManualFeed</TD><TD>0 = Do not manually feed
media
<BR> 1 = Manually feed media</TD></TR>
<TR><TD>324-327</TD><TD>MediaPosition</TD><TD>Input slot position from
0 to N</TD></TR>
<TR><TD>328-331</TD><TD>MediaWeight</TD><TD>Media weight in grams per
meter squared</TD></TR>
<TR><TD>332-335</TD><TD>MirrorPrint</TD><TD>0 = Do not mirror prints
<BR> 1 = Mirror prints</TD></TR>
<TR><TD>336-339</TD><TD>NegativePrint</TD><TD>0 = Do not invert prints
<BR> 1 = Invert prints</TD></TR>
<TR><TD>340-343</TD><TD>NumCopies</TD><TD>1 to 2<SUP>32</SUP> - 1</TD></TR>
<TR><TD>344-347</TD><TD>Orientation</TD><TD>0 = Do not rotate page
<BR> 1 = Rotate page counter-clockwise
<BR> 2 = Turn page upside down
<BR> 3 = Rotate page clockwise</TD></TR>
<TR><TD>348-351</TD><TD>OutputFaceUp</TD><TD>0 = Output face down
<BR> 1 = Output face up</TD></TR>
<TR><TD>352-359</TD><TD>PageSize</TD><TD>Width and length in points</TD></TR>
<TR><TD>360-363</TD><TD>Separations</TD><TD>0 = Print composite image
<BR> 1 = Print color separations</TD></TR>
<TR><TD>364-367</TD><TD>TraySwitch</TD><TD>0 = Do not change trays if
selected tray is empty
<BR> 1 = Change trays if selected tray is empty</TD></TR>
<TR><TD>368-371</TD><TD>Tumble</TD><TD>0 = Do not rotate even pages
when duplexing
<BR> 1 = Rotate even pages when duplexing</TD></TR>
<TR><TD>372-375</TD><TD>cupsWidth</TD><TD>Width of page image in pixels</TD>
</TR>
<TR><TD>376-379</TD><TD>cupsHeight</TD><TD>Height of page image in
pixels</TD></TR>
<TR><TD>380-383</TD><TD>cupsMediaType</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
<TR><TD>384-387</TD><TD>cupsBitsPerColor</TD><TD>1, 2, 4, 8 bits</TD></TR>
<TR><TD>388-391</TD><TD>cupsBitsPerPixel</TD><TD>1 to 32 bits</TD></TR>
<TR><TD>392-395</TD><TD>cupsBytesPerLine</TD><TD>1 to 2<SUP>32</SUP> -
1 bytes</TD></TR>
<TR><TD>396-399</TD><TD>cupsColorOrder</TD><TD>0 = chunky pixels (CMYK
CMYK CMYK)
<BR> 1 = banded pixels (CCC MMM YYY KKK)
<BR> 2 = planar pixels (CCC... MMM... YYY... KKK...)</TD></TR>
<TR><TD>400-403</TD><TD>cupsColorSpace</TD><TD>0 = white
<BR> 1 = RGB
<BR> 2 = RGBA
<BR> 3 = black
<BR> 4 = CMY
<BR> 5 = YMC
<BR> 6 = CMYK
<BR> 7 = YMCK
<BR> 8 = KCMY
<BR> 9 = KCMYcm</TD></TR>
<TR><TD>404-407</TD><TD>cupsCompression</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
<TR><TD>408-411</TD><TD>cupsRowCount</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
<TR><TD>412-415</TD><TD>cupsRowFeed</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
<TR><TD>416-419</TD><TD>cupsRowStep</TD><TD>Driver-specific 0 to 2<SUP>
32</SUP> - 1</TD></TR>
</TABLE>
</CENTER>
</P>
<P>The MIME type for CUPS Raster files is <CODE>
application/vnd.cups-raster</CODE>. </P>
<H2><A NAME=4_5>4.5 CUPS Raw Files</A></H2>
<P>Raw files are printer-dependent print files that are in a format
suitable to the destination printer (e.g. HP-PCL, HP-RTL, etc.) The
MIME type for CUPS Raw files is <CODE>application/vnd.cups-raw</CODE>. </P>
<H2><A NAME=4_6>4.6 File Transfer Protocol</A></H2>
<P>The File Transfer Protocol (FTP) is described by <A HREF=http://www.ietf.org/rfc/rfc959.txt>
RFC 959: File Transfer Protocol</A>. </P>
<H2><A NAME=4_7>4.7 Internet Printing Protocol</A></H2>
<P>The Internet Printing Protocol is described by the following RFCs: </P>
<UL>
<LI><A HREF=http://www.ietf.org/rfc/rfc2565.txt>RFC 2565: Internet
Printing Protocol/1.0: Encoding and Transport</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2566.txt>RFC 2566: Internet
Printing Protocol/1.0: Model and Semantics</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2567.txt>RFC 2567: Design Goals
for an Internet Printing Protocol</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2568.txt>RFC 2568: Rationale for
the Structure of the Model and Protocol for the Internet Printing
Protocol</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2569.txt>RFC 2569: Mapping
between LPD and IPP Protocols</A></LI>
</UL>
<P>CUPS defines the following extension operations to IPP. </P>
<H3><A NAME=4_7_1>4.7.1 Get Default Destination (CUPS_GET_DEFAULT =
0x4001)</A></H3>
<P>The get default destination operation returns the printer attributes
for the system default printer or class. The only required attributes
are <CODE>attributes-charset</CODE> and <CODE>
attributes-natural-language</CODE>. </P>
<P>Get default destination will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_7_2>4.7.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></H3>
<P>The get printers operation returns the printer attributes for all
printers known to the system. The only required attributes are <CODE>
attributes-charset</CODE> and <CODE>attributes-natural-language</CODE>. </P>
<P>Get printers will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_7_3>4.7.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></H3>
<P>The add printer operation adds or replaces the specified printer.
The <CODE>attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>
and <CODE>printer-uri</CODE> attributes are required. </P>
<P>The <CODE>printer-location</CODE>, <CODE>printer-info</CODE>, <CODE>
printer-more-info</CODE>, and <CODE>device-uri</CODE> attributes are
required when initially adding a printer and optional when modifying a
printer. </P>
<P>A PPD file or System V interface script may follow the IPP request
body. Note that the printer will be disabled until a valid interface
script or PPD file is sent. </P>
<P>Add printer will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-authorized</CODE>
, <CODE>ipp-bad-request</CODE>, or <CODE>ipp-attributes</CODE>. </P>
<H3><A NAME=4_7_4>4.7.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
</H3>
<P>The delete printer operation removes the specified printer. The only
required attributes are <CODE>attributes-charset</CODE>, <CODE>
attributes-natural-language</CODE>, and <CODE>printer-uri</CODE>. </P>
<P>Delete printer will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_7_5>4.7.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></H3>
<P>The get classes operation returns the printer attributes for all
classes known to the system. The only required attributes are <CODE>
attributes-charset</CODE> and <CODE>attributes-natural-language</CODE>. </P>
<P>Get classes will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_7_6>4.7.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></H3>
<P>The add class operation adds or replaces the specified class. The <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE> attributes are required. </P>
<P>The <CODE>printer-location</CODE>, <CODE>printer-info</CODE>, <CODE>
printer-more-info</CODE>, and <CODE>member-uris</CODE> attributes are
required when initially adding a printer and optional when modifying a
printer. </P>
<P>Add class will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-authorized</CODE>
, <CODE>ipp-bad-request</CODE>, or <CODE>ipp-attributes</CODE>. </P>
<H3><A NAME=4_7_7>4.7.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></H3>
<P>The delete class operation removes the specified class. The only
required attributes are <CODE>attributes-charset</CODE>, <CODE>
attributes-natural-language</CODE>, and <CODE>printer-uri</CODE>. </P>
<P>Delete class will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_7_8>4.7.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></H3>
<P>The accept jobs operation allows jobs to be accepted by the
specified destination. The only required attributes are <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE>. </P>
<P>Accept jobs will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_7_9>4.7.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></H3>
<P>The reject jobs operation prevents jobs from being accepted by the
specified destination. The only required attributes are <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE>. </P>
<P>Reject jobs will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_7_10>4.7.10 Set Default Destination (CUPS_SET_DEFAULT =
0x400A)</A></H3>
<P>The set default destination operation returns the printer attributes
for the system default printer or class. The only required attributes
are <CODE>attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>
, and <CODE>printer-uri</CODE>. </P>
<P>Set default destination will return <CODE>ipp-ok</CODE>, <CODE>
ipp-not-authorized</CODE>, <CODE>ipp-bad-request</CODE>, or <CODE>
ipp-not-found</CODE>. </P>
<H2><A NAME=4_8>4.8 Line Printer Daemon Protocol</A></H2>
<P>The Line Printer Daemon (LPD) protocol is described by <A HREF=http://www.ietf.org/rfc/rfc1179.txt>
RFC 1179: Line Printer Daemon Protocol</A>. </P>
<H2><A NAME=4_9>4.9 Server Message Block Protocol</A></H2>
<P>The Server Message Block (SMB) and related Common Internet File
System (CIFS) protocols are described at <A HREF=http://anu.samba.org/cifs>
http://anu.samba.org/cifs</A>. </P>
<H2><A NAME=4_10>4.10 Trivial File Transfer Protocol</A></H2>
<P>The Trivial File Transfer Protocol (TFTP) is described by <A HREF=http://www.ietf.org/rfc/rfc1350.txt>
RFC 1350: The TFTP Protocol (Revision 2)</A>. </P>
<H1><A NAME=5>5 5 - Directories</A></H1>
<DL>
<DT>/usr/bin </DT>
<DD>The <CODE>cancel</CODE>, <CODE>lp</CODE>, <CODE>lpq</CODE>, <CODE>
lpr</CODE>, <CODE>lprm</CODE>, and <CODE>lpstat</CODE> commands reside
here. </DD>
<DT>/usr/lib </DT>
<DD>The <CODE>accept</CODE>, <CODE>disable</CODE>, <CODE>enable</CODE>, <CODE>
lpadmin</CODE>, and <CODE>reject</CODE> commands reside here. </DD>
<DT>/usr/sbin </DT>
<DD>The <CODE>lpc</CODE> and <CODE>cupsd</CODE> commands resize here. </DD>
<DT>/usr/share/cups </DT>
<DD>The character set and filter data files reside here. </DD>
<DT>/usr/share/cups/fonts </DT>
<DD>The <CODE>pstoraster</CODE> font files reside here. </DD>
<DT>/usr/share/cups/model </DT>
<DD>The sample PPD files reside here. </DD>
<DT>/usr/share/cups/pstoraster </DT>
<DD>The <CODE>pstoraster</CODE> data files reside here. </DD>
<DT>/var/cups </DT>
<DD>This is the root directory of the CUPS scheduler. </DD>
<DT>/var/cups/backend </DT>
<DD>The backend filters reside here. </DD>
<DT>/var/cups/cgi-bin </DT>
<DD>The CGI programs reside here. </DD>
<DT>/var/cups/conf </DT>
<DD>The scheduler configuration and MIME files reside here. </DD>
<DT>/var/cups/doc </DT>
<DD>The scheduler documentation files reside here. </DD>
<DT>/var/cups/filter </DT>
<DD>The file filters reside here. </DD>
<DT>/var/cups/interfaces </DT>
<DD>System V interface scripts reside here. </DD>
<DT>/var/cups/logs </DT>
<DD>The <CODE>access_log</CODE>, <CODE>error_log</CODE>, and <CODE>
page_log</CODE> files reside here. </DD>
<DT>/var/cups/ppd </DT>
<DD>This directory contains PPD files for each printer. </DD>
<DT>/var/cups/requests </DT>
<DD>This directory contains pending print job files. </DD>
</DL>
<H1 TYPE=A VALUE=1><A NAME=6>A Glossary</A></H1>
<H2><A NAME=6_1>A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
<DT>parallel </DT>
<DD>Sending or receiving data more than 1 bit at a time. </DD>
<DT>pipe </DT>
<DD>A one-way communications channel between two programs. </DD>
<DT>serial </DT>
<DD>Sending or receiving data 1 bit at a time. </DD>
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME=6_2>A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
<DT>CUPS </DT>
<DD>Common UNIX Printing System </DD>
<DT>ESC/P </DT>
<DD>EPSON Standard Code for Printers </DD>
<DT>FTP </DT>
<DD>File Transfer Protocol </DD>
<DT>HP-GL </DT>
<DD>Hewlett-Packard Graphics Language </DD>
<DT>HP-PCL </DT>
<DD>Hewlett-Packard Printer Control Language </DD>
<DT>HP-PJL </DT>
<DD>Hewlett-Packard Printer Job Language </DD>
<DT>IETF </DT>
<DD>Internet Engineering Task Force </DD>
<DT>IPP </DT>
<DD>Internet Printing Protocol </DD>
<DT>ISO </DT>
<DD>International Standards Organization </DD>
<DT>LPD </DT>
<DD>Line Printer Daemon </DD>
<DT>MIME </DT>
<DD>Multimedia Internet Mail Exchange </DD>
<DT>PCL </DT>
<DD>Page Control Language </DD>
<DT>PPD </DT>
<DD>PostScript Printer Description </DD>
<DT>SMB </DT>
<DD>Server Message Block </DD>
<DT>TFTP </DT>
<DD>Trivial File Transfer Protocol </DD>
</DL>
</BODY>
</HTML>
-1564
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-1171
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 1.2 KiB

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 3.4 KiB

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 7.3 KiB

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 3.1 KiB

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 1.2 KiB

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 926 B

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 1.9 KiB

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 2.2 KiB

Arquivo binário não exibido.
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 706 B

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 805 B

Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 794 B

-34
Ver Arquivo
@@ -1,34 +0,0 @@
<HTML>
<HEAD>
<TITLE>Common UNIX Printing System</TITLE>
<LINK REL=STYLESHEET TYPE="text/css" HREF="cups.css">
<MAP NAME="navbar">
<AREA SHAPE="RECT" COORDS="10,10,85,30" HREF="printers" ALT="Current Printer Status">
<AREA SHAPE="RECT" COORDS="95,10,175,30" HREF="classes" ALT="Current Printer Classes Status">
<AREA SHAPE="RECT" COORDS="185,10,235,30" HREF="jobs" ALT="Current Jobs Status">
<AREA SHAPE="RECT" COORDS="245,10,395,30" HREF="documentation.html" ALT="Read CUPS Documentation On-Line">
<AREA SHAPE="RECT" COORDS="405,10,490,30" HREF="http://www.cups.org" ALT="Download the Current CUPS Software">
</MAP>
</HEAD>
<BODY>
<P ALIGN=CENTER>
<A HREF="http://www.easysw.com" ALT="Easy Software Products Home Page">
<IMG SRC="images/logo.gif" WIDTH="71" HEIGHT="40" BORDER=0 ALT="Easy Software Products Home Page"></A>
<IMG SRC="images/navbar.gif" WIDTH="540" HEIGHT="40" USEMAP="#navbar" BORDER=0>
<H1><A HREF="printers">Current Printer Status</A></H1>
<H1><A HREF="classes">Current Printer Classes Status</A></H1>
<H1><A HREF="jobs">Current Jobs Status</A></H1>
<H1><A HREF="documentation.html">Read CUPS Documentation On-Line</A></H1>
<H1><A HREF="http://www.cups.org">Download the Current CUPS Software</A></H1>
<HR>
<P>The Common UNIX Printing System, CUPS, and the CUPS logo are the
trademark property of <A HREF="http://www.easysw.com">Easy Software
Products</A>. CUPS is copyright 1997-1999 by Easy Software Products,
All Rights Reserved.
</BODY>
</HTML>
-287
Ver Arquivo
@@ -1,287 +0,0 @@
<HTML>
<HEAD>
<META NAME="Author" CONTENT="Michael Sweet">
<TITLE>An Overview of the Common UNIX Printing System</TITLE>
<LINK REL=STYLESHEET TYPE="text/css" HREF="cupsdoc.css">
</HEAD>
<BODY BGCOLOR=#ffffff>
<TABLE WIDTH="100%">
<TR VALIGN=TOP>
<TD><IMG SRC="images/cups-large.gif" WIDTH="103" HEIGHT="120"></TD>
<TD><H1 ALIGN=right>An Overview of the<BR>
Common UNIX Printing System</H1></DIV>
<P ALIGN=right>May 11, 1999<BR>
Michael Sweet, Easy Software Products<BR>
Copyright 1998-1999, All Rights Reserved.</P>
</TD>
</TR>
</TABLE>
<P>This whitepaper describes the Common UNIX Printing
System<SUP>TM</SUP> ("CUPS<SUP>TM</SUP>"), a portable and extensible
printing system for UNIX<SUP>&reg;</SUP>. CUPS is being developed by
Easy Software Products, a software firm located in Hollywood, Maryland
that has been selling commercial software for Silicon
Graphics<SUP>&reg;</SUP>, Sun<SUP>&reg;</SUP>, and HP workstations
since 1993 through more than 40 distributors serving over 80 countries
worldwide.
<P>Additional information on CUPS is available on the World Wide Web at
"<A HREF="http://www.cups.org">http://www.cups.org</A>".
<H2>Background</H2>
Printing within UNIX has historically been done using one of two
printing systems - the Berkeley Line Printer Daemon ("LPD") [RFC1179]
and the AT&amp;T Line Printer system. Replacements for these printing
systems have emerged [LPRng, Palladin, PLP], however none of the
replacements change the fundamental capabilities of these systems.
<P>Over the last few years several attempts at developing a standard
printing interface have been made, including the draft POSIX Printing
standard [IEEE-1387.4, last updated in 1994] and Internet Printing
Protocol [IETF-IPP]. The POSIX printing standard defines a common set
of command-line tools as well as a C interface for printer
administration and print jobs. The Internet Printing Protocol defines
extensions to the HyperText Transport Protocol 1.1 [RFC2068] to provide
support for remote printing services.
<H2>Weaknesses in Existing Printing Systems</H2>
Easy Software Products has identified several major weaknesses in
the printing systems currently in use:
<OL>
<LI>Users must print text or Adobe<SUP>&reg;</SUP>
PostScript<SUP>TM</SUP> files; other formats <I>may</I> be
supported, but not universally.
<LI>Lack of a standard command-line interface; each operating
system and driver package provides different command-line
options, e.g. setting the media size with one driver may
involve passing a single option ("letter") while another
requires two ("mediasize letter").
<LI>Lack of a standard application interface; most UNIX
applications either do not provide an interface for sending
printer options, or restrict the options to those in printer
description files supplied with the application.
<LI>Remote printing problems; no vendor seems to use the same
remote printing protocol (many use an "enhanced" version of the
LPD protocol with vendor-specific extensions).
<LI>Client printer administration hassles; most vendors
require that you install remote printers on each client by
hand, and many do not even provide the ability to browse
printers on the "server" system.
<LI>Drivers typically are hardcoded to handle printing to
parallel or serial printers; support for other types of
interfaces or networking protocols requires that a driver be
rewritten to support them.
<LI>Security, accounting, and quotas; most printing systems do
not support access control lists ("ACLs"), and printer
accounting and quotas are not well supported, if at all.
</OL>
<H2>Goals of CUPS</H2>
The basic goals of CUPS are:
<OL>
<LI>Provide standard support for text (US ASCII, UTF-8, and
ISO-8859-x), Adobe PostScript, PDF, HP-GL/2, TIFF, JPEG, PNG,
PBM, PGM, PPM, GIF, SGI RGB, Sun Raster, and Kodak
PhotoCD<SUP>TM</SUP> files.
<LI>Provide a standard command-line interface with a standard
minimum set of options (media size and so forth).
<LI>Provide a standard application interface.
<LI>Provide a common remote printing interface (IPP).
<LI>Provide a printer browsing interface and allow users to
print to remote printers using a "printer@server" notation
rather than adding the printer locally.
<LI>Provide a scheduler extension interface to support
different interfaces separate from the printer driver (e.g.
serial, parallel, lpd, tftp, ipp, etc.)
<LI>Provide a standard interface for ACLs, quotas, accounting,
and logging.
</OL>
<H2>Design Overview</H2>
Like most printing systems, CUPS is designed around a central print
scheduling process that dispatches print jobs, processes administrative
commands, provides printer status information to local and remote
programs, and informs users as needed. Figure 1 shows the basic
organization of CUPS.
<P ALIGN=CENTER><IMG SRC="images/cups-block-diagram.gif" WIDTH="540" HEIGHT="200">
<BR>Figure 1 - CUPS Block Diagram
<H3>Scheduler</H3>
The scheduler is a HTTP/1.1 server application that handles HTTP
requests. Besides handling printer requests via IPP POST requests, the
scheduler also acts as a full-featured web server for documentation and
status monitoring.
<P>The scheduler also monitors the LAN for printer browsing information
and dispatches print jobs as needed using the appropriate filters and
backends.
<H3>Configuration Files</H3>
The configuration files consist of:
<UL>
<LI>A HTTP server configuration file.
<LI>Printer and class definition files.
<LI>MIME type and conversion rule files.
<LI>PostScript Printer Description (PPD) files.
</UL>
The HTTP server configuration file is purposely similar to the
Apache server configuration file and defines all of the access control
properties for the server.
<P>The printer and class definition files list the available printer
queues and classes.
<P>The MIME type files list the supported MIME types (text/plain,
application/postscript, etc.) and "magic" rules for automatically
detecting the format of a file. These are used by the HTTP server to
determine the <I>Content-Type</I> field for <I>GET</I> and <I>HEAD</I>
requests, and by the IPP request handler to determine the file type
when a <I>Print-Job</I> request is received with a
<I>document-format</I> of <I>application/octet-stream</I>.
<P>The MIME conversion rule files list the available filters. These
files are augmented by <I>AddFilter</I> entries in the printer
definition files. The filters are used when a job is dispatched so that
an application can send a convenient file format to the printing system
which then converts the document into a printable format as needed.
<P>The PPD files describe the capabilities of PostScript printers. There is
one PPD file for each printer.
<H3>CUPS Interface Library</H3>
The CUPS interface library contains CUPS-specific convenience functions
for queuing print jobs, etc. It also contains functions to access
resources via HTTP and IPP, perform MIME typing and conversion, and
manipulate PPD files.
<H3>Filters</H3>
A filter program reads from the standard input or from a file if a
filename is supplied. All filters must support a common set of options
including printer name, job ID, username, job title, number of copies,
and job options. All output is sent to the standard output.
<H3>Backends</H3>
A backend program is a special filter that writes incoming data to a
device or network connection. Backends for serial, parallel, LPD, TFTP,
FTP, IPP, SMB, and AppSocket (JetDirect) connections are provided in
CUPS 1.0.
<H2>Berkeley and System V Commands</H2>
CUPS provides the System V and Berkeley command-line interfaces
for submitting jobs and checking the printer status. The "lpstat" and
"lpc status" commands also show network printers ("printer@hostname")
when printer browsing is enabled.
<P>The System V administation commands are supplied for managing
printers local to the system. The Berkeley printer administration tool
("lpc") is only supported in a "read-only" mode to check the current
status of the printer queues and scheduler.
<H2>Summary</H2>
The Common UNIX Printing System provides a modern printing interface
for UNIX applications that is both flexible and user-friendly. The
software provides System V and Berkeley compatible command-line
interfaces to ensure compatibility with existing applications.
<H2>Licensing</H2>
CUPS is available under the terms of the Aladdin Free Public
License, which means that it is basically free except for commercial
distribution. Vendors wishing to license CUPS for their printing
solution should contact Easy Software Products at:
<UL>
<P>Attn: CUPS Licensing<BR>
Easy Software Products<BR>
44141 Airport View Drive Suite 204<BR>
Hollywood, Maryland 20636-3111 USA
<P>+1.301.373.9600<BR>
cups-info@cups.org
</UL>
<H2>References</H2>
<DL>
<DT>IEEE-1387.4</DT>
<DD>System Administration - Part 4: Printing Interfaces (draft)</DD>
<DT><A HREF="http://www.pwg.org/ipp/index.html">IETF-IPP</A></DT>
<DD>Internet Printing Protocol/1.0</DD>
<DT><A HREF="http://www.astart.com/lprng.html">LPRng</A></DT>
<DD>An enhanced, extended, and portable implementation of the Berkeley LPR
print spooler functionality</DD>
<DT>Palladin</DT>
<DD>A printing system developed at the Massachussetts Institute of Technology</DD>
<DT><A HREF="http://www-usa.iona.com//hyplan/jmason/plp.html">PLP</A></DT>
<DD>The Portable Line Printer spooler system</DD>
<DT><A HREF="http://www.cis.ohio-state.edu/rfc/rfc1179.txt">RFC1179</A></DT>
<DD>Line Printer Daemon Protocol</DD>
<DT><A HREF="http://www.cis.ohio-state.edu/rfc/rfc2046.txt">RFC2046</A></DT>
<DD>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</DD>
<DT><A HREF="http://www.cis.ohio-state.edu/rfc/rfc2068.txt">RFC2068</A></DT>
<DD>Hypertext Transfer Protocol -- HTTP/1.1</DD>
</DL>
<H2>Trademarks</H2>
The Common UNIX Printing System, CUPS, and the CUPS logo are
trademarks of Easy Software Products. All other trademarks are the
property of their respective owners.
</BODY>
</HTML>
Arquivo binário não exibido.
-746
Ver Arquivo
@@ -1,746 +0,0 @@
<HTML>
<HEAD>
<TITLE>DRAFT - CUPS Software Administrators Manual</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.0">
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>DRAFT - CUPS Software Administrators Manual</H1></A><BR>
CUPS-SAM-1.0.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>Preface</A></B>
<UL>
<LI><A HREF=#1_1>System Overview</A></LI>
<LI><A HREF=#1_2>Document Overview</A></LI>
</UL>
<B><A HREF=#2>1 - Printing System Overview</A></B>
<UL>
<LI><A HREF=#2_1>The Printing Problem</A></LI>
<LI><A HREF=#2_2>The Technology</A></LI>
<LI><A HREF=#2_3>Filters</A></LI>
<LI><A HREF=#2_4>Printer Drivers</A></LI>
</UL>
<B><A HREF=#3>2 - Building and Installing CUPS</A></B>
<UL>
<LI><A HREF=#3_1>Installing a Source Distribution</A></LI>
<UL>
<LI><A HREF=#3_1_1>Requirements</A></LI>
<LI><A HREF=#3_1_2>Compiling CUPS</A></LI>
<LI><A HREF=#3_1_3>Installing the Software</A></LI>
<LI><A HREF=#3_1_4>Running the Software</A></LI>
</UL>
<LI><A HREF=#binary>Installing a Binary Distribution</A></LI>
</UL>
<B><A HREF=#4>3 - Printer Queue Management</A></B>
<UL>
<LI><A HREF=#4_1>The lpadmin Command</A></LI>
<LI><A HREF=#4_2>Adding and Modifying Printers</A></LI>
<UL>
<LI><A HREF=#4_2_1>Using Standard Printer Drivers</A></LI>
</UL>
<LI><A HREF=#4_3>Removing Printers</A></LI>
<LI><A HREF=#4_4>Printer Classes</A></LI>
<LI><A HREF=#4_5>Setting the Default Printer</A></LI>
</UL>
<B><A HREF=#5>4 - Printing System Management</A></B>
<UL>
<LI><A HREF=#5_1>Network Configuration</A></LI>
<UL>
<LI><A HREF=#5_1_1>Port</A></LI>
<LI><A HREF=#5_1_2>Listen</A></LI>
<LI><A HREF=#5_1_3>BrowsePort</A></LI>
<LI><A HREF=#5_1_4>BrowseAddress</A></LI>
</UL>
<LI><A HREF=#5_2>Printer Security</A></LI>
<UL>
<LI><A HREF=#5_2_1>Location</A></LI>
<LI><A HREF=#5_2_2>Order</A></LI>
<LI><A HREF=#5_2_3>Allow</A></LI>
<LI><A HREF=#5_2_4>Deny</A></LI>
<LI><A HREF=#5_2_5>AuthType</A></LI>
<LI><A HREF=#5_2_6>AuthClass</A></LI>
<LI><A HREF=#5_2_7>AuthGroupName</A></LI>
<LI><A HREF=#5_2_8>SystemGroup</A></LI>
</UL>
<LI><A HREF=#5_3>File Formats</A></LI>
<UL>
<LI><A HREF=#5_3_1>mime.types</A></LI>
<LI><A HREF=#5_3_2>mime.convs</A></LI>
</UL>
</UL>
<B><A HREF=#6>5 - Printer Accounting</A></B>
<UL>
<LI><A HREF=#6_1>Where to Find the Log Files</A></LI>
<LI><A HREF=#6_2>The access_log File</A></LI>
<LI><A HREF=#6_3>The error_log File</A></LI>
<LI><A HREF=#6_4>The page_log File</A></LI>
</UL>
<HR>
<H1 ALIGN=RIGHT><A NAME=1>Preface</A></H1>
This software administrators manual provides printer administration
information for the Common UNIX Printing System (&quot;CUPS&quot;) Version 1.0.0.
<H2><A NAME=1_1>System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
and users. CUPS provides the System V and Berkeley command-line
interfaces.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis for
managing print jobs and queues. The Line Printer Daemon (LPD, RFC1179),
Server Message Block (SMB), and AppSocket protocols are also supported
with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_2>Document Overview</A></H2>
<P>This software administrators manual is organized into the following
sections:</P>
<UL>
<LI>1 - Printing System Overview</LI>
<LI>2 - Building and Installing CUPS</LI>
<LI>3 - Printer Queue Management</LI>
<LI>4 - Printing System Management</LI>
<LI>5 - Printer Accounting</LI>
</UL>
<H1 ALIGN=RIGHT><A NAME=2>1 - Printing System Overview</A></H1>
<P>This chapter provides an overview of how the Common UNIX Printing
System works. </P>
<H2><A NAME=2_1>The Printing Problem</A></H2>
<P>For years <I>the printing problem</I> has plagued UNIX&reg;. Unlike
Microsoft&reg; Windows&reg; or MacOS, UNIX has no standard interface or system
in place for supporting printers. Among the solutions previously
available, the Berkeley and System V printing systems are the most
prevalent. </P>
<P>These printing systems support line printers (text only) or
PostScript printers (text and graphics), and with some coaxing they can
be made to support a full range of printers and file formats. However,
because each varient of the UNIX operating system uses a different
printing system than the next, developing printer drivers for a wide
range of printers is extremely difficult. That combined with the
limited volume of customers for each UNIX varient has forced most
printer vendors to give up supporting UNIX entirely. </P>
<P>The Common UNIX Printing System, or CUPS, is designed to eliminate <I>
the printing problem</I>. One common printing system can be used by all
UNIX varients to support the printing needs of users. Printer vendors
can use its modular filter interface to develop a single driver program
that supports a wide range of file formats with little or no effort.
Since CUPS provides both the System V and Berkeley printing commands,
users (and applications) can reap the benefits of this new technology
with no changes. </P>
<H2><A NAME=2_2>The Technology</A></H2>
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
and printer server manufacturers, and will be supported by the next
Microsoft Windows operating system. </P>
<P>IPP defines a standard protocol for printing as well as managing
print jobs and printer options like media size, resolution, and so
forth. Like all IP-based protocols, IPP can be used locally or over the
Internet to printers hundreds or thousands of miles away. Unlike other
protocols, however, IPP also supports access control, authentication,
and encryption, making it a much more secure printing solution than
older ones. </P>
<P>IPP is layered on top of the Hyper-Text Transport Protocol, or HTTP,
which is the basis of web servers on the Internet. This allows the user
to view documentation and status information on a printer or server
using their web browser. </P>
<P>CUPS provides a complete IPP/1.0-based printing system that provides
Basic authentication and domain or IP-based access control. Digest
authentication and TLS encryption will be available in future versions
of CUPS. </P>
<H2><A NAME=2_3>Filters</A></H2>
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
different formats that the printer can understand. Others perform page
selection and ordering tasks. <I>Backend</I> filters perform the most
important task of all - they send the filtered print data to the
printer. </P>
<P>CUPS provides filters for printing many types of image files,
HP-GL/2 files, PDF files, and text files. CUPS also supplies PostScript
and image file Raster Image Processors, or RIPs, that convert
PostScript or image files into bitmaps that can be sent to a raster
printer. </P>
<P>CUPS provides backends for printing over parallel and serial ports,
and over the network via the JetDirect (AppSocket), Server Message
Block, and Line Printer Daemon protocols. </P>
<H2><A NAME=2_4>Printer Drivers</A></H2>
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes a sample printer driver for Hewlett-Packard
LaserJet and DeskJet printers. While this driver does not generate
optimal output for different printer models, it does demonstrate how
you can write your own printer drivers and incorporate them into CUPS. </P>
<H1 ALIGN=RIGHT><A NAME=3>2 - Building and Installing CUPS</A></H1>
<P>This chapter shows how to build and install the Common UNIX Printing
System. If you are installing a binary distribution from the CUPS web
site, proceed to the section titled, <A HREF=#binary>Installing a
Binary Distribution</A>. </P>
<H2><A NAME=3_1>Installing a Source Distribution</A></H2>
<H3><A NAME=3_1_1>Requirements</A></H3>
<P>You'll need an ANSI C compiler to build CUPS on your system. As its
name implies, CUPS is designed to run on the UNIX operating system,
however the CUPS interface library and most of the filters and backends
supplied with CUPS should also run under Microsoft&reg; Windows&reg;. </P>
<P>For the image file filters and PostScript RIP, you'll need the JPEG,
PNG, TIFF, and ZLIB libraries. CUPS will build without these, but with
reduced functionality. Easy Software Products maintains a mirror of the
current versions of these libraries at: </P>
<UL>
<PRE>
<A HREF=ftp://ftp.easysw.com/pub/libraries>ftp://ftp.easysw.com/pub/libraries</A>
</PRE>
</UL>
<P>If you make changes to the man pages you'll need GNU groff or
another nroff-like package. GNU groff is available from: </P>
<UL>
<PRE>
<A HREF=ftp://ftp.gnu.org/pub/groff>ftp://ftp.gnu.org/pub/groff</A>
</PRE>
</UL>
<P>The documentation is formatted using the HTMLDOC software. If you
need to make changes you can get the HTMLDOC software from: </P>
<UL>
<PRE>
<A HREF=http://www.easysw.com/htmldoc>http://www.easysw.com/htmldoc</A>
</PRE>
</UL>
<H3><A NAME=3_1_2>Compiling CUPS</A></H3>
<P>CUPS uses GNU autoconf to configure the makefiles and source code
for your system. To configure CUPS for your system type: </P>
<UL>
<PRE>
% ./configure ENTER
</PRE>
</UL>
<P>The default installation will put the CUPS software in the <CODE>/usr</CODE>
and <CODE>/var</CODE> directories on your system, which will overwrite
any existing printing commands on your system. To install the CUPS
software in another location use the <CODE>--prefix</CODE> option: </P>
<UL>
<PRE>
% ./configure --prefix=/usr/local ENTER
</PRE>
</UL>
<P>If the PNG, JPEG, TIFF, and ZLIB libraries are not installed in a
system default location (typically <CODE>/usr/include</CODE> and <CODE>
/usr/lib</CODE>) you'll need to set the <CODE>CFLAGS</CODE> and <CODE>
LDFLAGS</CODE> environment variables prior to running configure: </P>
<UL>
<PRE>
% setenv CFLAGS &quot;-I/some/directory&quot;
% setenv LDFLAGS &quot;-L/some/directory&quot;
% ./configure ... ENTER
</PRE>
</UL>
<P>Once you have configured things, just type: </P>
<UL>
<PRE>
% make ENTER
</PRE>
</UL>
<P>to build the software. </P>
<H3><A NAME=3_1_3>Installing the Software</A></H3>
<P>To install the software type: </P>
<UL>
<PRE>
% make install ENTER
</PRE>
</UL>
<H3><A NAME=3_1_4>Running the Software</A></H3>
Once you have installed the software you can start the CUPS daemon by
typing:
<UL>
<PRE>
% /usr/sbin/cupsd &amp; ENTER
</PRE>
</UL>
<H2><A NAME=binary>Installing a Binary Distribution</A></H2>
<P>We are currently distributing CUPS binary distributions in TAR
format with installation and removal scripts. </P>
<UL><B>WARNING:</B>
<P>Installing CUPS will overwrite your existing printing system. If
you experience difficulties with the CUPS software and need to go back
to your old printing system, you will need to remove the CUPS software
with the provided script and reinstall the printing system from your
operating system CDs. </P>
</UL>
<P>To install the CUPS software you will need to be logged in as root
(doing an &quot;su&quot; is good enough). Once you are the root user, run the
installation script with: </P>
<UL>
<PRE>
./cups.install ENTER
</PRE>
</UL>
<P>After asking you a few yes/no questions the CUPS software will be
installed and the scheduler will be started automatically. </P>
<H1 ALIGN=RIGHT><A NAME=4>3 - Printer Queue Management</A></H1>
<P>This chapter discusses how to add, modify, and delete print queues
on your system. </P>
<H2><A NAME=4_1>The lpadmin Command</A></H2>
<P>The <CODE>lpadmin</CODE> command allows you to perform most printer
administration tasks from the command-line. Since <CODE>lpadmin</CODE>
is also a System V printing system command, it is located in the <CODE>
/usr/lib</CODE> directory instead of a more common one like <CODE>
/usr/bin</CODE> or <CODE>/usr/sbin</CODE>. </P>
<H2><A NAME=4_2>Adding and Modifying Printers</A></H2>
<P>To add a printer to CUPS you simply run the <CODE>lpadmin</CODE>
command with the &quot;-p&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -p<I>printer</I> -v<I>device</I> -P<I>ppd</I> ENTER
</PRE>
</UL>
<P>Spaces between the option letter and value are optional. </P>
<P>The <I>printer</I> name can be up to 127 letters, digits, hyphens,
and underscores. Unlike other printing systems, the printer name in
CUPS is <I>not</I> case-sensitive, so you can't add two printers named <CODE>
LaserJet</CODE> and <CODE>laserjet</CODE>. </P>
<P>The <I>device</I> argument specifies the device URI or filename for
the printer. The following devices are supported in a basic
installation of CUPS: </P>
<DL>
<DT>file:/dev/filename </DT>
<DT>/dev/filename </DT>
<DD>Sends all output to the specified file. </DD>
<DT>ipp://hostname[:port]/resource </DT>
<DD>Sends all output to the specified IPP printer or server. The <I>
port</I> parameters defaults to 631. </DD>
<DT>lpd://hostname/queue </DT>
<DD>Sends all output to the specified LPD printer queue. </DD>
<DT>parallel:/dev/filename </DT>
<DD>Sends all output to the specified parallel port device. </DD>
<DT>serial:/dev/filename[?options] </DT>
<DD>Sends all output to the specified serial port device. The <I>
options</I> can be any of the following separated by the plus (+)
character:
<UL>
<LI><CODE>baud=<I>rate</I></CODE> - Sets the baud rate for the device. </LI>
<LI><CODE>bits=<I>7 or 8</I></CODE> - Sets the number of data bits. </LI>
<LI><CODE>parity=<I>even</I></CODE> - Sets even parity checking. </LI>
<LI><CODE>parity=<I>odd</I></CODE> - Sets odd parity checking. </LI>
<LI><CODE>parity=<I>none</I></CODE> - Turns parity checking off. </LI>
</UL>
</DD>
<DT>socket://hostname[:port] </DT>
<DD>Sends all output to the specified printer using the AppSocket
protocol. The <I>port</I> parameter defaults to 9100. </DD>
</DL>
<P>The <I>ppd</I> argument specifies the PostScript Printer Description
file to use for this printer. Many options (such as media size, etc.)
will not be available if you omit this part of the <CODE>lpadmin</CODE>
command. </P>
<H3><A NAME=4_2_1>Using Standard Printer Drivers</A></H3>
<P>The <CODE>lpadmin</CODE> command allows you to use &quot;standard&quot; PPD
files and interface scripts located in the <CODE>/usr/share/cups/model</CODE>
directory with the &quot;-m&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -p<I>printer</I> -v<I>device</I> -m<I>model</I> ENTER
</PRE>
</UL>
<P>The <I>model</I> argument specifies the name of the PPD file or
interface script. For example, to add a printer using the sample HP
DeskJet series driver connected to parallel port 1 under Linux you
would use: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -pDeskJet -vparallel:/dev/par1 -mdeskjet.ppd ENTER
</PRE>
</UL>
<H2><A NAME=4_3>Removing Printers</A></H2>
<P>To remove a printer to CUPS you simply run the <CODE>lpadmin</CODE>
command with the &quot;-x&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -x<I>printer</I> ENTER
</PRE>
</UL>
<H2><A NAME=4_4>Printer Classes</A></H2>
<P>CUPS allows you to group similar printers in a <I>printer class</I>.
When a user sends a print job to a class, the job will be processed by
the first available printer in that class. </P>
<P>To add a printer to a class you simply run the <CODE>lpadmin</CODE>
command with the &quot;-p&quot; and &quot;-c&quot; options: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -p<I>printer</I> -c<I>class</I> ENTER
</PRE>
</UL>
<P>The <I>class</I> is created automatically if it doesn't exist. To
remove a class just use the &quot;-x&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -x<I>class</I> ENTER
</PRE>
</UL>
<H2><A NAME=4_5>Setting the Default Printer</A></H2>
<P>To set the default printer or class simply run the <CODE>lpadmin</CODE>
command with the &quot;-d&quot; option: </P>
<UL>
<PRE>
% /usr/lib/lpadmin -d<I>destination</I> ENTER
</PRE>
</UL>
<P>The <I>destination</I> argument is the name of the printer or class. </P>
<H1 ALIGN=RIGHT><A NAME=5>4 - Printing System Management</A></H1>
<P>This chapter shows how you can configure the CUPS server. </P>
<H2><A NAME=5_1>Network Configuration</A></H2>
<P>The default configuration of the CUPS server listens for connections
from all network interfaces on port 631 (the standard IPP port).
Administration functions are limited to local connections with the
appropriate username and password. </P>
<P>If you'd like to limit access to your system you'll need to edit the <CODE>
/var/cups/conf/cupsd.conf</CODE> file. </P>
<H3><A NAME=5_1_1>Port</A></H3>
<P>The <CODE>Port</CODE> directive specifies a port to listen on for
all interfaces. Besides the standard IPP port (631) you can also setup
your server to listen on the HTTP port (80) to use your CUPS server as
a standard web server as well. </P>
<H3><A NAME=5_1_2>Listen</A></H3>
<P>The <CODE>Listen</CODE> directive specifies a listening address and
port, extending the functionality of the <CODE>Port</CODE> directive.
If you want to allow connections only from the local machine you can
use: </P>
<UL>
<PRE>
Listen 127.0.0.1:631
</PRE>
</UL>
<P>instead of the <CODE>Port</CODE> directive. </P>
<P>If you want to limit access to a specific network/subnet, make sure
you specify only the network address and not your system's network
address! </P>
<H3><A NAME=5_1_3>BrowsePort</A></H3>
<P>The <CODE>BrowsePort</CODE> directive controls which port is
monitored for remote printers. By default it is set to the IPP port
(631), however you can change it as needed. </P>
<UL><B>NOTE:</B>
<P>You must set the <CODE>BrowsePort</CODE> to the same value on all
of the systems that you want to see. </P>
</UL>
<H3><A NAME=5_1_4>BrowseAddress</A></H3>
<P>The <CODE>BrowseAddress</CODE> directive specifies a broadcast
address to use when sending printer status updates over the network.
The default browse address is <CODE>255.255.255.255</CODE> which will
send printer information to all subnets. </P>
<UL><B>NOTE:</B>
<P>If you are using HP-UX 10.20 and a subnet that is not 24, 16, or 8
bits, printer browsing (and in fact all broadcast reception) will not
work. This problem appears to be fixed in HP-UX 11.0. </P>
</UL>
<H2><A NAME=5_2>Printer Security</A></H2>
<P>CUPS provides IP and domain-name based access control and Basic
authentication for authentication. </P>
<H3><A NAME=5_2_1>Location</A></H3>
<P>The <CODE>Location</CODE> directive defines access control for a
specific HTTP directory. The following pseudo directories are provided
by the CUPS server: </P>
<UL>
<LI><CODE>/admin</CODE> - This is the URI that must be referenced to
do printer administation commands. </LI>
<LI><CODE>/classes</CODE> - This is the URI that must be referenced to
access printer classes. </LI>
<LI><CODE>/jobs</CODE> - This is the URI that must be referenced to
access jobs. </LI>
<LI><CODE>/printers</CODE> - This is the URI that must be referenced to
access printers. </LI>
</UL>
<P>All other directories are taken from the <CODE>/usr/share/cups/doc</CODE>
directory. </P>
<P>The <CODE>Location</CODE> directive surrounds the other access
control directives described below. The default server configuration
uses: </P>
<UL>
<PRE>
&lt;Location /admin&gt;
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
&lt;/Location&gt;
</PRE>
</UL>
<H3><A NAME=5_2_2>Order</A></H3>
<P>The <CODE>Order</CODE> directive defines the default access control.
The following values are supported: </P>
<UL>
<LI><CODE>Order Allow,Deny</CODE> - Allow requests from all systems <I>
except</I> for those listed in a <CODE>Deny</CODE> directive. </LI>
<LI><CODE>Order Deny,Allow</CODE> - Allow requests only from those
listed in an <CODE>Allow</CODE> directive. </LI>
</UL>
<P>The <CODE>Order</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_2_3>Allow</A></H3>
<P>The <CODE>Allow</CODE> directive specifies a hostname, IP address,
or network that is allowed access to the server: </P>
<UL>
<PRE>
Allow from All
Allow from None
Allow from *.domain.com
Allow from .domain.com
Allow from host.domain.com
Allow from nnn.*
Allow from nnn.nnn.*
Allow from nnn.nnn.nnn.*
Allow from nnn.nnn.nnn.nnn
Allow from nnn.nnn.nnn.nnn/mm
Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE>
</UL>
<P><CODE>Allow</CODE> directives are cummulative, so multiple <CODE>
Allow</CODE> directives can be used to allow access for multiple hosts
or networks. </P>
<P>The <CODE>Allow</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_2_4>Deny</A></H3>
<P>The <CODE>Deny</CODE> directive specifies a hostname, IP address, or
network that is allowed access to the server: </P>
<UL>
<PRE>
Deny from All
Deny from None
Deny from *.domain.com
Deny from .domain.com
Deny from host.domain.com
Deny from nnn.*
Deny from nnn.nnn.*
Deny from nnn.nnn.nnn.*
Deny from nnn.nnn.nnn.nnn
Deny from nnn.nnn.nnn.nnn/mm
Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE>
</UL>
<P><CODE>Deny</CODE> directives are cummulative, so multiple <CODE>Deny</CODE>
directives can be used to allow access for multiple hosts or networks. </P>
<P>The <CODE>Deny</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_2_5>AuthType</A></H3>
<P>The <CODE>AuthType</CODE> directive defines the type of
authentication to perform: </P>
<UL>
<LI><CODE>None</CODE> - No authentication should be performed
(default.) </LI>
<LI><CODE>Basic</CODE> - Basic authentication should be performed
using the UNIX password and group files. </LI>
</UL>
<P>The <CODE>AuthType</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_2_6>AuthClass</A></H3>
<P>The <CODE>AuthClass</CODE> directive defines what level of <CODE>
Basic</CODE> access is required: </P>
<UL>
<LI><CODE>Anonymous</CODE> - No authentication should be performed
(default.) </LI>
<LI><CODE>User</CODE> - A valid username and password is required. </LI>
<LI><CODE>System</CODE> - A valid username and password is required,
and the username must belong to the &quot;sys&quot; group (this can be changed
using the <CODE>SystemGroup</CODE> directive, below. </LI>
<LI><CODE>Group</CODE> - A valid username and password is required,
and the username must belong to the group named by the <CODE>
AuthGroupName</CODE> directive. </LI>
</UL>
<P>The <CODE>AuthClass</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_2_7>AuthGroupName</A></H3>
<P>The <CODE>AuthGroupName</CODE> directive sets the group to use for <CODE>
Group</CODE> authentication. </P>
<P>The <CODE>AuthGroupName</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_2_8>SystemGroup</A></H3>
<P>The <CODE>SystemGroup</CODE> directive sets the administration group
used when authenticating the <CODE>System</CODE> type. It defaults to
the &quot;sys&quot; group. </P>
<H2><A NAME=5_3>File Formats</A></H2>
<P>CUPS provides a MIME-based file typing and filtering mechanism to
convert files to a printable format for each printer. The <CODE>
mime.types</CODE> and <CODE>mime.convs</CODE> files define the file
type and filters that are available on the system. </P>
<H3><A NAME=5_3_1>mime.types</A></H3>
<P>The <CODE>mime.types</CODE> defines the known file types. Each line
of the file starts with the MIME type and may be followed by one or
more file type recognition rules. For example, the <CODE>text/html</CODE>
file type is defined as: </P>
<UL>
<PRE>
text/html html htm \
printable(0,1024) + (string(0,&quot;&lt;HTML&gt;&quot;) string(0,&quot;&lt;!DOCTYPE&quot;))
</PRE>
</UL>
<P>The first two rules say that any file with an extension of &quot;.html&quot;
or &quot;.htm&quot; is a HTML file. The third rules says that any file whose
first 1024 characters are printable text and starts with the strings
&quot;&lt;HTML&gt;&quot; or &quot;&lt;!DOCTYPE&quot; is a HTML file as well. </P>
<P>The first two rules deal solely with the name of the file being
typed. This is useful when the original filename is known, however for
print files the server doesn't always have a filename to work with. The
third rule takes care of this possibility and automatically figures out
the file type based upon the contents of the file instead. </P>
<P>The available tests are: </P>
<UL>
<LI><CODE>( expr )</CODE> - Parenthesis for expression grouping </LI>
<LI><CODE>+</CODE> - Logical AND </LI>
<LI><CODE>,</CODE> or whitespace - Logical OR </LI>
<LI><CODE>!</CODE> - Logical NOT </LI>
<LI><CODE>match(&quot;pattern&quot;)</CODE> - Pattern match on filename </LI>
<LI><CODE>extension</CODE> - Pattern match on &quot;*.extension&quot; </LI>
<LI><CODE>ascii(offset,length)</CODE> - True if bytes are valid
printable ASCII (CR, NL, TAB, BS, 32-126) </LI>
<LI><CODE>printable(offset,length)</CODE> - True if bytes are
printable 8-bit chars (CR, NL, TAB, BS, 32-126, 160-254) </LI>
<LI><CODE>string(offset,&quot;string&quot;)</CODE> - True if bytes are identical
to string </LI>
<LI><CODE>char(offset,value)</CODE> - True if byte is identical </LI>
<LI><CODE>short(offset,value)</CODE> - True if 16-bit integer is
identical (network or &quot;big-endian&quot; byte order) </LI>
<LI><CODE>int(offset,value)</CODE> - True if 32-bit integer is
identical (network or &quot;big-endian&quot; byte order) </LI>
<LI><CODE>locale(&quot;string&quot;)</CODE> - True if current locale matches
string </LI>
</UL>
<H3><A NAME=5_3_2>mime.convs</A></H3>
<P>The <CODE>mime.convs</CODE> file defines all of the filter programs
that are known to the system. Each line consists of: </P>
<UL>
<PRE>
source destination cost program
text/plain application/postscript 50 texttops
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
image/* application/vnd.cups-postscript 50 imagetops
image/* application/vnd.cups-raster 50 imagetoraster
</PRE>
</UL>
<P>The <I>source</I> field is a MIME type, optionally using a wildcard
for the super-type or sub-type (e.g. &quot;text/plain&quot;, &quot;image/*&quot;,
&quot;*/postscript&quot;). </P>
<P>The <I>destination</I> field is a MIME type defined in the <CODE>
mime.types</CODE> file. </P>
<P>The <I>cost</I> field defines a relative cost for the filtering
operation from 1 to 100. The cost is used to choose between two
different sets of filters when converting a file. For example, to
convert from <CODE>image/jpeg</CODE> to <CODE>
application/vnd.cups-raster</CODE>, you could use the <CODE>imagetops</CODE>
and <CODE>pstoraster</CODE> filters for a total cost of 100, or the <CODE>
imagetoraster</CODE> filter for a total cost of 50. </P>
<P>The <I>program</I> field defines the filter program to run; the
special program &quot;-&quot; can be used to make two file types equivalent. The
program must accept the standard filter arguments and environment
variables described in the CUPS Interface Design Document: </P>
<UL>
<PRE>
program job user title options [filename]
</PRE>
</UL>
<P>If specified, the <I>filename</I> argument defines a file to read
when filtering, otherwise the filter must read from the standard input.
All filtered output must go to the standard output. </P>
<H1 ALIGN=RIGHT><A NAME=6>5 - Printer Accounting</A></H1>
This chapter describes the CUPS log files.
<H2><A NAME=6_1>Where to Find the Log Files</A></H2>
<P>The log files are normally stored in the <CODE>/var/cups/logs</CODE>
directory. You can change this by editing the <CODE>
/var/cups/conf/cupsd.conf</CODE> configuration file. </P>
<H2><A NAME=6_2>The access_log File</A></H2>
<P>The <CODE>access_log</CODE> file lists each HTTP resource that is
accessed by a web browser or CUPS/IPP client. Each line is in the
so-called &quot;Common Log Format&quot; used by many web servers and web
reporting tools: </P>
<UL>
<PRE>
host group user date-time \&quot;method resource version\&quot; status bytes
127.0.0.1 - - [20/May/1999:19:20:29 +0000] &quot;POST /admin/ HTTP/1.1&quot; 401 0
127.0.0.1 - mike [20/May/1999:19:20:31 +0000] &quot;POST /admin/ HTTP/1.1&quot; 200 0
</PRE>
</UL>
<P>The <I>host</I> field will normally only be an IP address unless you
have changed the <CODE>HostnameLookups</CODE> directive on in the <CODE>
cupsd.conf</CODE> file. </P>
<P>The <I>group</I> field always contains &quot;-&quot;. </P>
<P>The <I>user</I> field is the authenticated username of the
requesting user. If no username and password is supplied for the
request then this field contains &quot;-&quot;. </P>
<P>The <I>date-time</I> field is the date and time of the request in
Greenwich Mean Time (a.k.a. ZULU) and is in the format: </P>
<UL>
<PRE>
[DD/MON/YYYY:HH:MM:SS +0000]
</PRE>
</UL>
<P>The <I>method</I> field is the HTTP method used (&quot;GET&quot;, &quot;PUT&quot;,
&quot;POST&quot;, etc.) </P>
<P>The <I>resource</I> field is the filename of the requested resource. </P>
<P>The <I>version</I> field is the HTTP specification version used by
the client. For CUPS clients this will always be &quot;HTTP/1.1&quot;. </P>
<P>The <I>status</I> field contains the HTTP result status of the
request. Usually it is &quot;200&quot;, but other HTTP status codes are possible.
For example, 401 is the &quot;unauthorized access&quot; status in the example
above. </P>
<P>The <I>bytes</I> field contains the number of bytes in the request.
For POST requests the <I>bytes</I> field contains the number of bytes
of non-IPP data that is received from the client. </P>
<H2><A NAME=6_3>The error_log File</A></H2>
<P>The <CODE>error_log</CODE> file lists messages from the scheduler
(errors, warnings, etc.): </P>
<UL>
<PRE>
level date-time message
I [20/May/1999:19:18:28 +0000] Job 1 queued on 'DeskJet' by 'mike'.
I [20/May/1999:19:21:02 +0000] Job 2 queued on 'DeskJet' by 'mike'.
I [20/May/1999:19:22:24 +0000] Job 2 was cancelled by 'mike'.
</PRE>
</UL>
<P>The <I>level</I> field contains the type of message: </P>
<UL>
<LI><CODE>E</CODE> - An error occurred. </LI>
<LI><CODE>W</CODE> - The server was unable to perform some action. </LI>
<LI><CODE>I</CODE> - Informational message. </LI>
<LI><CODE>D</CODE> - Debugging message. </LI>
</UL>
<P>The <I>date-time</I> field contains the date and time of when the
page started printing. The format of this field is identical to the <I>
data-time</I> field in the <CODE>access_log</CODE> file. </P>
<P>The <I>message</I> fields contains a free-form textual message. </P>
<H2><A NAME=6_4>The page_log File</A></H2>
<P>The <CODE>page_log</CODE> file lists each page that is sent to a
printer. Each line contains the following information: </P>
<UL>
<PRE>
printer user job-id date-time page-number num-copies
DeskJet root 2 [20/May/1999:19:21:05 +0000] 1 0
</PRE>
</UL>
<P>The <I>printer</I> field contains the name of the printer that
printed the page. If you send a job to a printer class, this field will
contain the name of the printer that was assigned the job. </P>
<P>The <I>user</I> field contains the name of the user (the IPP <CODE>
requesting-user-name</CODE> attribute) that submitted this file for
printing. </P>
<P>The <I>job-id</I> field contains the job number of the page being
printed. Job numbers are reset to 1 whenever the CUPS server is
started, so don't depend on this number being unique! </P>
<P>The <I>date-time</I> field contains the date and time of when the
page started printing. The format of this field is identical to the <I>
data-time</I> field in the <CODE>access_log</CODE> file. </P>
<P>The <I>page-number</I> and <I>num-pages</I> fields contain the page
number and number of copies being printed of that page. For printer
that can not produce copies on their own, the <I>num-pages</I> field
will always be 1. </P>
</BODY>
</HTML>
-961
Ver Arquivo
@@ -1,961 +0,0 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990611133723Z)/Title(DRAFT - CUPS Software Administrators Manual)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Oblique/Encoding 2 0 R>>endobj
5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj
8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
10 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
11 0 obj<</Subtype/Link/Rect[395.9 354.4 440.2 367.4]/Border[0 0 0]/Dest[207 0 R/XYZ null 713 0]>>endobj
12 0 obj<</Subtype/Link/Rect[440.2 354.4 447.8 367.4]/Border[0 0 0]/Dest[207 0 R/XYZ null 713 0]>>endobj
13 0 obj<</Subtype/Link/Rect[447.8 354.4 480.5 367.4]/Border[0 0 0]/Dest[207 0 R/XYZ null 713 0]>>endobj
14 0 obj<</Subtype/Link/Rect[480.5 354.4 533.7 367.4]/Border[0 0 0]/Dest[207 0 R/XYZ null 713 0]>>endobj
15 0 obj<</S/URI/URI(ftp://ftp.easysw.com/pub/libraries)>>endobj
16 0 obj<</Subtype/Link/Rect[108.0 123.5 291.6 134.5]/Border[0 0 0]/A 15 0 R>>endobj
17 0 obj[11 0 R
12 0 R
13 0 R
14 0 R
16 0 R
]endobj
18 0 obj<</S/URI/URI(ftp://ftp.gnu.org/pub/groff)>>endobj
19 0 obj<</Subtype/Link/Rect[72.0 723.0 217.8 732.0]/Border[0 0 0]/A 18 0 R>>endobj
20 0 obj<</S/URI/URI(http://www.easysw.com/htmldoc)>>endobj
21 0 obj<</Subtype/Link/Rect[72.0 646.0 228.6 655.0]/Border[0 0 0]/A 20 0 R>>endobj
22 0 obj[19 0 R
21 0 R
]endobj
23 0 obj<</Subtype/Link/Rect[72.0 673.2 107.4 686.2]/Border[0 0 0]/Dest[189 0 R/XYZ null 818 0]>>endobj
24 0 obj<</Subtype/Link/Rect[108.0 660.0 143.1 673.0]/Border[0 0 0]/Dest[189 0 R/XYZ null 416 0]>>endobj
25 0 obj<</Subtype/Link/Rect[143.1 660.0 186.5 673.0]/Border[0 0 0]/Dest[189 0 R/XYZ null 416 0]>>endobj
26 0 obj<</Subtype/Link/Rect[108.0 646.8 156.6 659.8]/Border[0 0 0]/Dest[192 0 R/XYZ null 800 0]>>endobj
27 0 obj<</Subtype/Link/Rect[156.6 646.8 199.9 659.8]/Border[0 0 0]/Dest[192 0 R/XYZ null 800 0]>>endobj
28 0 obj<</Subtype/Link/Rect[72.0 620.4 80.2 633.4]/Border[0 0 0]/Dest[195 0 R/XYZ null 818 0]>>endobj
29 0 obj<</Subtype/Link/Rect[80.2 620.4 89.3 633.4]/Border[0 0 0]/Dest[195 0 R/XYZ null 818 0]>>endobj
30 0 obj<</Subtype/Link/Rect[89.3 620.4 131.1 633.4]/Border[0 0 0]/Dest[195 0 R/XYZ null 818 0]>>endobj
31 0 obj<</Subtype/Link/Rect[131.1 620.4 167.5 633.4]/Border[0 0 0]/Dest[195 0 R/XYZ null 818 0]>>endobj
32 0 obj<</Subtype/Link/Rect[167.5 620.4 212.7 633.4]/Border[0 0 0]/Dest[195 0 R/XYZ null 818 0]>>endobj
33 0 obj<</Subtype/Link/Rect[108.0 607.2 127.9 620.2]/Border[0 0 0]/Dest[195 0 R/XYZ null 416 0]>>endobj
34 0 obj<</Subtype/Link/Rect[127.9 607.2 166.1 620.2]/Border[0 0 0]/Dest[195 0 R/XYZ null 416 0]>>endobj
35 0 obj<</Subtype/Link/Rect[166.1 607.2 203.3 620.2]/Border[0 0 0]/Dest[195 0 R/XYZ null 416 0]>>endobj
36 0 obj<</Subtype/Link/Rect[108.0 594.0 127.9 607.0]/Border[0 0 0]/Dest[198 0 R/XYZ null 800 0]>>endobj
37 0 obj<</Subtype/Link/Rect[127.9 594.0 180.4 607.0]/Border[0 0 0]/Dest[198 0 R/XYZ null 800 0]>>endobj
38 0 obj<</Subtype/Link/Rect[108.0 580.8 136.1 593.8]/Border[0 0 0]/Dest[198 0 R/XYZ null 522 0]>>endobj
39 0 obj<</Subtype/Link/Rect[108.0 567.6 140.7 580.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 311 0]>>endobj
40 0 obj<</Subtype/Link/Rect[140.7 567.6 173.7 580.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 311 0]>>endobj
41 0 obj<</Subtype/Link/Rect[72.0 541.2 80.2 554.2]/Border[0 0 0]/Dest[201 0 R/XYZ null 818 0]>>endobj
42 0 obj<</Subtype/Link/Rect[80.2 541.2 89.3 554.2]/Border[0 0 0]/Dest[201 0 R/XYZ null 818 0]>>endobj
43 0 obj<</Subtype/Link/Rect[89.3 541.2 132.4 554.2]/Border[0 0 0]/Dest[201 0 R/XYZ null 818 0]>>endobj
44 0 obj<</Subtype/Link/Rect[132.4 541.2 152.9 554.2]/Border[0 0 0]/Dest[201 0 R/XYZ null 818 0]>>endobj
45 0 obj<</Subtype/Link/Rect[152.9 541.2 200.2 554.2]/Border[0 0 0]/Dest[201 0 R/XYZ null 818 0]>>endobj
46 0 obj<</Subtype/Link/Rect[200.2 541.2 229.0 554.2]/Border[0 0 0]/Dest[201 0 R/XYZ null 818 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 528.0 152.3 541.0]/Border[0 0 0]/Dest[201 0 R/XYZ null 403 0]>>endobj
48 0 obj<</Subtype/Link/Rect[152.3 528.0 159.9 541.0]/Border[0 0 0]/Dest[201 0 R/XYZ null 403 0]>>endobj
49 0 obj<</Subtype/Link/Rect[159.9 528.0 193.2 541.0]/Border[0 0 0]/Dest[201 0 R/XYZ null 403 0]>>endobj
50 0 obj<</Subtype/Link/Rect[193.2 528.0 246.4 541.0]/Border[0 0 0]/Dest[201 0 R/XYZ null 403 0]>>endobj
51 0 obj<</Subtype/Link/Rect[144.0 514.8 205.1 527.8]/Border[0 0 0]/Dest[201 0 R/XYZ null 333 0]>>endobj
52 0 obj<</Subtype/Link/Rect[144.0 501.6 193.8 514.6]/Border[0 0 0]/Dest[204 0 R/XYZ null 678 0]>>endobj
53 0 obj<</Subtype/Link/Rect[193.8 501.6 221.3 514.6]/Border[0 0 0]/Dest[204 0 R/XYZ null 678 0]>>endobj
54 0 obj<</Subtype/Link/Rect[144.0 488.4 188.3 501.4]/Border[0 0 0]/Dest[204 0 R/XYZ null 262 0]>>endobj
55 0 obj<</Subtype/Link/Rect[188.3 488.4 204.5 501.4]/Border[0 0 0]/Dest[204 0 R/XYZ null 262 0]>>endobj
56 0 obj<</Subtype/Link/Rect[204.5 488.4 244.2 501.4]/Border[0 0 0]/Dest[204 0 R/XYZ null 262 0]>>endobj
57 0 obj<</Subtype/Link/Rect[144.0 475.2 184.6 488.2]/Border[0 0 0]/Dest[207 0 R/XYZ null 782 0]>>endobj
58 0 obj<</Subtype/Link/Rect[184.6 475.2 200.8 488.2]/Border[0 0 0]/Dest[207 0 R/XYZ null 782 0]>>endobj
59 0 obj<</Subtype/Link/Rect[200.8 475.2 240.5 488.2]/Border[0 0 0]/Dest[207 0 R/XYZ null 782 0]>>endobj
60 0 obj<</Subtype/Link/Rect[108.0 462.0 152.3 475.0]/Border[0 0 0]/Dest[207 0 R/XYZ null 713 0]>>endobj
61 0 obj<</Subtype/Link/Rect[152.3 462.0 159.9 475.0]/Border[0 0 0]/Dest[207 0 R/XYZ null 713 0]>>endobj
62 0 obj<</Subtype/Link/Rect[159.9 462.0 192.6 475.0]/Border[0 0 0]/Dest[207 0 R/XYZ null 713 0]>>endobj
63 0 obj<</Subtype/Link/Rect[192.6 462.0 245.8 475.0]/Border[0 0 0]/Dest[207 0 R/XYZ null 713 0]>>endobj
64 0 obj<</Subtype/Link/Rect[72.0 435.6 80.2 448.6]/Border[0 0 0]/Dest[213 0 R/XYZ null 818 0]>>endobj
65 0 obj<</Subtype/Link/Rect[80.2 435.6 89.3 448.6]/Border[0 0 0]/Dest[213 0 R/XYZ null 818 0]>>endobj
66 0 obj<</Subtype/Link/Rect[89.3 435.6 126.2 448.6]/Border[0 0 0]/Dest[213 0 R/XYZ null 818 0]>>endobj
67 0 obj<</Subtype/Link/Rect[126.2 435.6 159.5 448.6]/Border[0 0 0]/Dest[213 0 R/XYZ null 818 0]>>endobj
68 0 obj<</Subtype/Link/Rect[159.5 435.6 221.2 448.6]/Border[0 0 0]/Dest[213 0 R/XYZ null 818 0]>>endobj
69 0 obj<</Subtype/Link/Rect[108.0 422.4 127.9 435.4]/Border[0 0 0]/Dest[213 0 R/XYZ null 416 0]>>endobj
70 0 obj<</Subtype/Link/Rect[127.9 422.4 166.7 435.4]/Border[0 0 0]/Dest[213 0 R/XYZ null 416 0]>>endobj
71 0 obj<</Subtype/Link/Rect[166.7 422.4 212.5 435.4]/Border[0 0 0]/Dest[213 0 R/XYZ null 416 0]>>endobj
72 0 obj<</Subtype/Link/Rect[108.0 409.2 143.8 422.2]/Border[0 0 0]/Dest[213 0 R/XYZ null 311 0]>>endobj
73 0 obj<</Subtype/Link/Rect[143.8 409.2 162.4 422.2]/Border[0 0 0]/Dest[213 0 R/XYZ null 311 0]>>endobj
74 0 obj<</Subtype/Link/Rect[162.4 409.2 212.2 422.2]/Border[0 0 0]/Dest[213 0 R/XYZ null 311 0]>>endobj
75 0 obj<</Subtype/Link/Rect[212.2 409.2 246.4 422.2]/Border[0 0 0]/Dest[213 0 R/XYZ null 311 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 396.0 173.0 409.0]/Border[0 0 0]/Dest[216 0 R/XYZ null 251 0]>>endobj
77 0 obj<</Subtype/Link/Rect[173.0 396.0 214.9 409.0]/Border[0 0 0]/Dest[216 0 R/XYZ null 251 0]>>endobj
78 0 obj<</Subtype/Link/Rect[214.9 396.0 247.6 409.0]/Border[0 0 0]/Dest[216 0 R/XYZ null 251 0]>>endobj
79 0 obj<</Subtype/Link/Rect[247.6 396.0 280.6 409.0]/Border[0 0 0]/Dest[216 0 R/XYZ null 251 0]>>endobj
80 0 obj<</Subtype/Link/Rect[108.0 382.8 156.6 395.8]/Border[0 0 0]/Dest[219 0 R/XYZ null 743 0]>>endobj
81 0 obj<</Subtype/Link/Rect[156.6 382.8 190.8 395.8]/Border[0 0 0]/Dest[219 0 R/XYZ null 743 0]>>endobj
82 0 obj<</Subtype/Link/Rect[108.0 369.6 140.7 382.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 640 0]>>endobj
83 0 obj<</Subtype/Link/Rect[140.7 369.6 173.7 382.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 640 0]>>endobj
84 0 obj<</Subtype/Link/Rect[108.0 356.4 141.9 369.4]/Border[0 0 0]/Dest[219 0 R/XYZ null 433 0]>>endobj
85 0 obj<</Subtype/Link/Rect[141.9 356.4 158.1 369.4]/Border[0 0 0]/Dest[219 0 R/XYZ null 433 0]>>endobj
86 0 obj<</Subtype/Link/Rect[158.1 356.4 193.9 369.4]/Border[0 0 0]/Dest[219 0 R/XYZ null 433 0]>>endobj
87 0 obj<</Subtype/Link/Rect[193.9 356.4 223.8 369.4]/Border[0 0 0]/Dest[219 0 R/XYZ null 433 0]>>endobj
88 0 obj<</Subtype/Link/Rect[72.0 330.0 80.2 343.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
89 0 obj<</Subtype/Link/Rect[80.2 330.0 89.3 343.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
90 0 obj<</Subtype/Link/Rect[89.3 330.0 131.1 343.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
91 0 obj<</Subtype/Link/Rect[131.1 330.0 167.5 343.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
92 0 obj<</Subtype/Link/Rect[167.5 330.0 229.2 343.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
93 0 obj<</Subtype/Link/Rect[108.0 316.8 149.2 329.8]/Border[0 0 0]/Dest[225 0 R/XYZ null 416 0]>>endobj
94 0 obj<</Subtype/Link/Rect[149.2 316.8 211.0 329.8]/Border[0 0 0]/Dest[225 0 R/XYZ null 416 0]>>endobj
95 0 obj<</Subtype/Link/Rect[144.0 303.6 162.3 316.6]/Border[0 0 0]/Dest[225 0 R/XYZ null 269 0]>>endobj
96 0 obj<</Subtype/Link/Rect[144.0 290.4 171.5 303.4]/Border[0 0 0]/Dest[225 0 R/XYZ null 171 0]>>endobj
97 0 obj<</Subtype/Link/Rect[144.0 277.2 195.9 290.2]/Border[0 0 0]/Dest[228 0 R/XYZ null 649 0]>>endobj
98 0 obj<</Subtype/Link/Rect[144.0 264.0 213.7 277.0]/Border[0 0 0]/Dest[228 0 R/XYZ null 511 0]>>endobj
99 0 obj<</Subtype/Link/Rect[108.0 250.8 140.7 263.8]/Border[0 0 0]/Dest[228 0 R/XYZ null 361 0]>>endobj
100 0 obj<</Subtype/Link/Rect[140.7 250.8 177.4 263.8]/Border[0 0 0]/Dest[228 0 R/XYZ null 361 0]>>endobj
101 0 obj<</Subtype/Link/Rect[144.0 237.6 183.1 250.6]/Border[0 0 0]/Dest[228 0 R/XYZ null 267 0]>>endobj
102 0 obj<</Subtype/Link/Rect[144.0 224.4 169.7 237.4]/Border[0 0 0]/Dest[231 0 R/XYZ null 612 0]>>endobj
103 0 obj<</Subtype/Link/Rect[144.0 211.2 171.5 224.2]/Border[0 0 0]/Dest[231 0 R/XYZ null 447 0]>>endobj
104 0 obj<</Subtype/Link/Rect[144.0 198.0 167.8 211.0]/Border[0 0 0]/Dest[234 0 R/XYZ null 782 0]>>endobj
105 0 obj<</Subtype/Link/Rect[144.0 184.8 188.6 197.8]/Border[0 0 0]/Dest[234 0 R/XYZ null 496 0]>>endobj
106 0 obj<</Subtype/Link/Rect[144.0 171.6 189.8 184.6]/Border[0 0 0]/Dest[234 0 R/XYZ null 344 0]>>endobj
107 0 obj<</Subtype/Link/Rect[144.0 158.4 220.4 171.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 782 0]>>endobj
108 0 obj<</Subtype/Link/Rect[144.0 145.2 204.5 158.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 683 0]>>endobj
109 0 obj<</Subtype/Link/Rect[108.0 132.0 127.9 145.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 612 0]>>endobj
110 0 obj<</Subtype/Link/Rect[127.9 132.0 163.9 145.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 612 0]>>endobj
111 0 obj<</Subtype/Link/Rect[144.0 118.8 195.0 131.8]/Border[0 0 0]/Dest[237 0 R/XYZ null 492 0]>>endobj
112 0 obj<</Subtype/Link/Rect[144.0 105.6 197.5 118.6]/Border[0 0 0]/Dest[240 0 R/XYZ null 686 0]>>endobj
113 0 obj<</Subtype/Link/Rect[72.0 79.2 80.2 92.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 818 0]>>endobj
114 0 obj<</Subtype/Link/Rect[80.2 79.2 89.3 92.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 818 0]>>endobj
115 0 obj<</Subtype/Link/Rect[89.3 79.2 126.2 92.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 818 0]>>endobj
116 0 obj<</Subtype/Link/Rect[126.2 79.2 180.0 92.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 818 0]>>endobj
117 0 obj<</Subtype/Link/Rect[108.0 66.0 140.1 79.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 429 0]>>endobj
118 0 obj<</Subtype/Link/Rect[140.1 66.0 151.4 79.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 429 0]>>endobj
119 0 obj<</Subtype/Link/Rect[151.4 66.0 174.3 79.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 429 0]>>endobj
120 0 obj<</Subtype/Link/Rect[174.3 66.0 190.5 79.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 429 0]>>endobj
121 0 obj<</Subtype/Link/Rect[190.5 66.0 211.0 79.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 429 0]>>endobj
122 0 obj<</Subtype/Link/Rect[211.0 66.0 232.4 79.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 429 0]>>endobj
123 0 obj[23 0 R
24 0 R
25 0 R
26 0 R
27 0 R
28 0 R
29 0 R
30 0 R
31 0 R
32 0 R
33 0 R
34 0 R
35 0 R
36 0 R
37 0 R
38 0 R
39 0 R
40 0 R
41 0 R
42 0 R
43 0 R
44 0 R
45 0 R
46 0 R
47 0 R
48 0 R
49 0 R
50 0 R
51 0 R
52 0 R
53 0 R
54 0 R
55 0 R
56 0 R
57 0 R
58 0 R
59 0 R
60 0 R
61 0 R
62 0 R
63 0 R
64 0 R
65 0 R
66 0 R
67 0 R
68 0 R
69 0 R
70 0 R
71 0 R
72 0 R
73 0 R
74 0 R
75 0 R
76 0 R
77 0 R
78 0 R
79 0 R
80 0 R
81 0 R
82 0 R
83 0 R
84 0 R
85 0 R
86 0 R
87 0 R
88 0 R
89 0 R
90 0 R
91 0 R
92 0 R
93 0 R
94 0 R
95 0 R
96 0 R
97 0 R
98 0 R
99 0 R
100 0 R
101 0 R
102 0 R
103 0 R
104 0 R
105 0 R
106 0 R
107 0 R
108 0 R
109 0 R
110 0 R
111 0 R
112 0 R
113 0 R
114 0 R
115 0 R
116 0 R
117 0 R
118 0 R
119 0 R
120 0 R
121 0 R
122 0 R
]endobj
124 0 obj<</Subtype/Link/Rect[72.0 673.2 91.9 686.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 337 0]>>endobj
125 0 obj<</Subtype/Link/Rect[91.9 673.2 142.3 686.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 337 0]>>endobj
126 0 obj<</Subtype/Link/Rect[142.3 673.2 159.4 686.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 337 0]>>endobj
127 0 obj<</Subtype/Link/Rect[72.0 660.0 91.9 673.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 505 0]>>endobj
128 0 obj<</Subtype/Link/Rect[91.9 660.0 135.5 673.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 505 0]>>endobj
129 0 obj<</Subtype/Link/Rect[135.5 660.0 152.7 673.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 505 0]>>endobj
130 0 obj<</Subtype/Link/Rect[72.0 646.8 91.9 659.8]/Border[0 0 0]/Dest[249 0 R/XYZ null 800 0]>>endobj
131 0 obj<</Subtype/Link/Rect[91.9 646.8 134.9 659.8]/Border[0 0 0]/Dest[249 0 R/XYZ null 800 0]>>endobj
132 0 obj<</Subtype/Link/Rect[134.9 646.8 152.0 659.8]/Border[0 0 0]/Dest[249 0 R/XYZ null 800 0]>>endobj
133 0 obj[124 0 R
125 0 R
126 0 R
127 0 R
128 0 R
129 0 R
130 0 R
131 0 R
132 0 R
]endobj
134 0 obj<</Dests 135 0 R>>endobj
135 0 obj<</Kids[136 0 R]>>endobj
136 0 obj<</Limits[(1)(binary)]/Names[(1)137 0 R(1_1)138 0 R(1_2)139 0 R(2)140 0 R(2_1)141 0 R(2_2)142 0 R(2_3)143 0 R(2_4)144 0 R(3)145 0 R(3_1)146 0 R(3_1_1)147 0 R(3_1_2)148 0 R(3_1_3)149 0 R(3_1_4)150 0 R(4)151 0 R(4_1)152 0 R(4_2)153 0 R(4_2_1)154 0 R(4_3)155 0 R(4_4)156 0 R(4_5)157 0 R(5)158 0 R(5_1)159 0 R(5_1_1)160 0 R(5_1_2)161 0 R(5_1_3)162 0 R(5_1_4)163 0 R(5_2)164 0 R(5_2_1)165 0 R(5_2_2)166 0 R(5_2_3)167 0 R(5_2_4)168 0 R(5_2_5)169 0 R(5_2_6)170 0 R(5_2_7)171 0 R(5_2_8)172 0 R(5_3)173 0 R(5_3_1)174 0 R(5_3_2)175 0 R(6)176 0 R(6_1)177 0 R(6_2)178 0 R(6_3)179 0 R(6_4)180 0 R(binary)181 0 R]>>endobj
137 0 obj<</D[189 0 R/XYZ null 818 null]>>endobj
138 0 obj<</D[189 0 R/XYZ null 416 null]>>endobj
139 0 obj<</D[192 0 R/XYZ null 800 null]>>endobj
140 0 obj<</D[195 0 R/XYZ null 818 null]>>endobj
141 0 obj<</D[195 0 R/XYZ null 416 null]>>endobj
142 0 obj<</D[198 0 R/XYZ null 800 null]>>endobj
143 0 obj<</D[198 0 R/XYZ null 522 null]>>endobj
144 0 obj<</D[198 0 R/XYZ null 311 null]>>endobj
145 0 obj<</D[201 0 R/XYZ null 818 null]>>endobj
146 0 obj<</D[201 0 R/XYZ null 403 null]>>endobj
147 0 obj<</D[201 0 R/XYZ null 333 null]>>endobj
148 0 obj<</D[204 0 R/XYZ null 678 null]>>endobj
149 0 obj<</D[204 0 R/XYZ null 262 null]>>endobj
150 0 obj<</D[207 0 R/XYZ null 782 null]>>endobj
151 0 obj<</D[213 0 R/XYZ null 818 null]>>endobj
152 0 obj<</D[213 0 R/XYZ null 416 null]>>endobj
153 0 obj<</D[213 0 R/XYZ null 311 null]>>endobj
154 0 obj<</D[216 0 R/XYZ null 251 null]>>endobj
155 0 obj<</D[219 0 R/XYZ null 743 null]>>endobj
156 0 obj<</D[219 0 R/XYZ null 640 null]>>endobj
157 0 obj<</D[219 0 R/XYZ null 433 null]>>endobj
158 0 obj<</D[225 0 R/XYZ null 818 null]>>endobj
159 0 obj<</D[225 0 R/XYZ null 416 null]>>endobj
160 0 obj<</D[225 0 R/XYZ null 269 null]>>endobj
161 0 obj<</D[225 0 R/XYZ null 171 null]>>endobj
162 0 obj<</D[228 0 R/XYZ null 649 null]>>endobj
163 0 obj<</D[228 0 R/XYZ null 511 null]>>endobj
164 0 obj<</D[228 0 R/XYZ null 361 null]>>endobj
165 0 obj<</D[228 0 R/XYZ null 267 null]>>endobj
166 0 obj<</D[231 0 R/XYZ null 612 null]>>endobj
167 0 obj<</D[231 0 R/XYZ null 447 null]>>endobj
168 0 obj<</D[234 0 R/XYZ null 782 null]>>endobj
169 0 obj<</D[234 0 R/XYZ null 496 null]>>endobj
170 0 obj<</D[234 0 R/XYZ null 344 null]>>endobj
171 0 obj<</D[237 0 R/XYZ null 782 null]>>endobj
172 0 obj<</D[237 0 R/XYZ null 683 null]>>endobj
173 0 obj<</D[237 0 R/XYZ null 612 null]>>endobj
174 0 obj<</D[237 0 R/XYZ null 492 null]>>endobj
175 0 obj<</D[240 0 R/XYZ null 686 null]>>endobj
176 0 obj<</D[243 0 R/XYZ null 818 null]>>endobj
177 0 obj<</D[243 0 R/XYZ null 429 null]>>endobj
178 0 obj<</D[243 0 R/XYZ null 337 null]>>endobj
179 0 obj<</D[246 0 R/XYZ null 505 null]>>endobj
180 0 obj<</D[249 0 R/XYZ null 800 null]>>endobj
181 0 obj<</D[207 0 R/XYZ null 713 null]>>endobj
182 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 26/Kids[183 0 R
186 0 R
255 0 R
258 0 R
189 0 R
192 0 R
195 0 R
198 0 R
201 0 R
204 0 R
207 0 R
210 0 R
213 0 R
216 0 R
219 0 R
222 0 R
225 0 R
228 0 R
231 0 R
234 0 R
237 0 R
240 0 R
243 0 R
246 0 R
249 0 R
252 0 R
]>>endobj
183 0 obj<</Type/Page/Parent 182 0 R/Contents 184 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
184 0 obj<</Length 185 0 R/Filter/FlateDecode>>stream
xÚíßÜ8rÇ¥nõ‹Ÿ4³îwNH€ØîOÛg 4?´‰(IòäÁ¸õå6Ø»ÍÙÞ÷ß§M·~RU‘’¨¹á Ï ÕâG,~«HÕ}q%V›ÿ®Ä‡kñî½øÃŸ_Üɱ|ñWñnõ»7v|÷þý›•øÝÇ7×âúúêÍ֧ͮ·÷Ù¼ýô6ý×;±þçÕ®¼Û•÷»òqWîwåÇ]ù—ÿ|ûI|ÿúÛ—·ÿ.nÞ]½ý7±¾ºz{÷âF|zxÏ\fE>\/‹‹³mÙücqó0v.y¿8 =U9;¿|'—¼¾P#à7#ã’×mLåü2 ê€v3®û \üEì8×]èñÊùÚa®k.•MsgúÊnŸY溞yù!vŒ+»ð¬ÿÒ)®kÏZ™¬á’³Y.á2Ö »]f‰K^xÖ‹ÿjp®,ôº(? ÌuçuT&ñ\W^gÅ_ÆeY-ÛX›òj.zž‹`खËËÞ¹zÁbÁ°8`0,8-|ñ€q`yÞ²'®Îý–™ƒfsõŒµ‹ûàZy½—I\·ÞeÚ9Wê
R^vÌ•…ÃpDÜWx–vÀ¤¡0Í 1:Wæ
ZÖ]q…Ãr!‡ŒÀ!s¼ŒÃs‘ÅžÈ%‡Çòü¸„\^`+õœ(kË\2tƒkb™kå9RæV¹RÏ™[ärÅ
QNŒÀy•µ5®Ì%¬Vé€ñ‰*ꀊ&ê€QEx­Çr%®aµtŒOãQ#ÔxŒsÆqI±ãz£Æ#FŒÏ%£Fô×]gç‹Å«‡m¹Û|è¶Ã —îòÏ_ÕùöDgÝw—ßô/ï/ºé0躻Î[§JwhK®U7]Uìµ…õ°:ì.Bú±äæ¯Ù\ìPƒ–.Î$r¹¸¡==7cMb&³»XéÔœ. ˜\¬@ž›
Éè2ŸÇ•t£í»lÉâ
û²Á£7 ­H=Ø_Õ0I{ç$¬\¢·¡Åϼ
è\ÙXd0ŸÎEyßÎIa¬Í\aÁ¦T®d#ä˜bLäCaÁæ4®ÌЇ䂅F. ìM¼^æVKjdˆ`-’·ŒE:}5§p%£²2¸9XR
?¶ÏEhAŒç’æAšiÉø†¨ç‚A׾ܲ
¬ÌP&yGEp
lÈl'ƒ‹6æX®h(‡Ìå –‹`†Ó¼Ã"x†æfØR4q‰ãZ9a…„–8.´&>Š+Ø#3lá«aw^p6Ãp…nˆEë'®”˜
×aq;WäŠhP:lÙÎ:¢ñ¤ö­\©[Ý…ì°I+WäXw!}XÜÆ:Ö]È'=oáÊœqÉ´&-\‰sÝ…‹'-\±х–²¸‘K:Ø]¸1¿läJì.Ü2RÐÈ…Ty¿W,”M¹B‡"C¢r4qaU¾g,ÔðX7p!U>è›+'ÙpU~Ý;§
\¬­±
q¢çJ]y´ ÅZ.pQäÑh©åŽªΔf:.éªjà†þTÇ•ÒBò';ýT1öÇßÃá™&%UN±~~…o°‚¨9Šk®å’¥‡5%´]k¬á´X£‘kªå:ܦ¨sÇ!ñ8Ã+Àqyz.(¨W†7Ú’€3¼–H®¥–++<Àš!f”j. :¯f®@˵·½É©&–”~¢æDçÕÌ5Ñs´BRf=ègŒàp‰åz4.×IÛS¼b”>VqeÔª…k®å:‰`DY+I°ès¯Ï5ÕsE(¤L¾3¬ y®]
å[¸<=Wzø¬Œb†ˆ¨¸B¢¶r-µ\û{Íö¿Â/Ùµ
ÛTÁ%©fØÊè¹V{ QßC5Znó\)Õ [¹|=×þfÄéAŠD {åË5=ÖVrí㌺rŒŒê•'9–k>Ê“’« R”YªÀÙPecŽçŠƒš+aÍR[CÄY+#a3WZ©qIÖbI‚Ó5 ÊÆ$ÇsÉG³PsMŠ´X’áZĹr@àÚ5<Ðs%¬5;œÐQ6–.8ÜFÃ%Ykv­­¬q1Ò›¹²ƒ(h¸M$®ÙE¨&M6&9…+?(½Ž 8N ʤ€&3×Aéu\§¿R”'šl,i\¥×q…œñ%Qϸ‚(®ƒÒk¸RÞFˆ‘l E"×Aé5\o±¿íùOË\1¼Z¹öJ¯á
y›3æáI6–T®½Ò«¹2æ.F‚qÌ@ZÛÈ©\{¥WsÞ Ì"©2WÄ^í\;¥Ws fæŽÄ8f DQkgÝ‘~^¹`b›À­K\¬Mårl¥àÚµ^¨¸öv/!‡@4(QT¬~tqÑ@ü2שU.±×dA7ÄVA™kY|4U.Ðp=va7» 3+r!Öl¦“˜uRáÊ4\Éb‚ Èá\cÓúÕõÏ:×êñ! w+Ñž¶Ä%8²QÚ_TàŠ”\òØ‚Ù%®€jM"(,«\©’+9VNè±/BNô¾ûJ›«¢fÖüT•kuÔIÏ·
ñ\Ç+Ÿn៕áqE™«ð‰‚ûŠöðÑáãKfu®DÁULE‰È†¸j0€—Ã5F›â:W¦à*êMJž„žkÅ’šMLó:×ÁVK\aqÀ’'aò¡¹¸K6ªóxzO1/.r•3¢Vd4=U¬RnUN±ŽQäŠJ†túh9ÔNþNï5y•+¹d+,Y^ÖAª& £^½Ÿúç=!¥r%L9|,ûÁêW{4ïç£*€•ùÉ(¹/Šrž+äEQ®sI9t˜+3”CW¹Rntè8WòÔäðÀ±£C·¹VüèÐi.ñÔdþÀ>59<pq–æGÀ%ŸœÌï¹Ò''óX®QÈ|q8·ì~4/÷ßVr¾.pEl™/Ö9_«~ë]––ýN«½µã|Êh»í"Í" àÜòÁuZ·©ÎXÉ5çpÍÕ\Å‘ôòÈ%ØîK¯QJ§®©’+Sï/‡l÷¥Иq¥‰‡ËSr õ¾ÑFm¯ºÜÔJ®¥‚+©« ÜòË5Õ„/KWÀá
\aý1ZæÚ¬.w®ÒÄ ‡kRçz
ÿ,<Ú= Ür€æZª¹|Wõ8Š«vð(ç[rÌÇ5käÚýë^x¥ÌÊŽ%VqÍ•®¨".*:™ÇÍ6@…óv®Ã‹ð§µ]‡[¯t< ØÄ)‡«vQZr‡Ûj{‰à*¤¥”»ø”ÛSm¢Çáª]TÞt:äñ*ŒZc¸NiDŠ,ù™²‰KWõ"QÌw4ä„óÍ\RÃé¹Wõ¢ÊHÙ™åPaTŽá:ý ÈþWsù®ÊEÕƒ§ÏåwÁ¥8Î×Î¥¸(­:ØÅ¦\&<œ˜sÕuCqœ¯Kw0PÍ—=;\RõRë¼â8‚«~Q¤t°€ £‚ÜDÃcÎm¹‰õã|®úEBéˆP\3Wªö_©&ŽRçCpÕ/Òr¥–¸"e¼q
C*M¬çCpÕ/
•ŽÅ5ÇpI¯¦ÈóÅq> Wí"-W£
m8|Eã=¯TçÃpÕ.*V?ÝŵÎ
ç_sekÇù0\µ‹´\À£ruÇhVUkM<ˆ6«zWŽæ
T¿õcM«ÇùP\Õ‹´\‘E®µºcu«ÇùP\Õ‹´\+~x˜«
N³¼_kbõ8Š«zQXIS=r k\~¬á*„ª¥&VŽóá¸*ñ¹&H.YøíÁ/–=æê&VŽóá¸*‰‚b—¸B;\…üÃb¼±_öÔM¬çÃqU.ªÅQ –+Èqó”\ÅUx?”¢‰;Ѧr•/ZU#¢èÀåuË•6q•ó!¹g‹M\a¹fF\™.ž?•‚ÈU¾(©•pÏ%;æ’šSŠã|H®òEiE²¥‡åš\Àá*]$+¡yâWÆá*_˜8pµç.;ä*çÃr•/ŠÉø®tX®ˆÃUº(9í*ŸyçJ9\¥‹d±•é1Þ0™VZà’®òEâ´ÿuç¸â.¹ŠÇùÐ\å‹’Ú~¥ \ ‡«|Q%;.“é2Š+læÊ8\å‹Ê3ã`åWá8ž«rQ©Ãâ¨G®µ¾‰‡«|Q9v\­Ë¾!—ðŠK´3uÀOåª\t[œ,&ýpß i¢äpU/º+,EXàr§Üïò¾•k,9°²xfÚ—ÙF—Û»çÏ\Ï\càš>Q®`œ\á3×3×3×3×3ŽköÌõÌÕ=—gε™ù Ï•RêËu·{‡™‰i.¥îÀ\Õãkå—
Þ0§¨«Þ
PïTyŠƒRÚÖs‰ZúF9O¿¸=U¯ËàZ—C;⺭ÏhÊ/óÊN›·˜U­\Ëòí†K*v”Ê/4LŽKüuò¨•kÞ¨¦Ö¢8À*镺 ®Y^šÝp…ª­2(Žƒ°”&S­Ëà
Ê–Ò Wö¸ñtV¬[|uíi·^Y—Á5)ݺ®ä¸Q(¯
7-Hà)»BY—Ï•vÉv¬W'ïRpY§äsM]Õ2¿ú®åí¤K.QyU'
YS—Æå·O7ƒxÒWX\†¥?OÜP—Æ59>ލË$ž/ýNjq`i9I[U—Ä5=>ŽÍ“ úáJN?S` œ¤­ªKâ
ŠnfÆÕ’~xüsv¶)ó‚XÅ…3Rúº$®íù¯ãcšwÊ5ÑýaËSH*nZêÇs‰Ã Ýáeg\¡.ç°§œ`†Ô<×êðyÛO^wƵך¸qRFÚº$®è C[K;ã:ìuž¯ÕÖ.“âQεuI\pÊ~õóθŽ!z­µû/~ ¾X_WÉUOìÜQ$‡ñºu_ÝqòA*­½ÍÑëëR¸Òƒ¬¶lÆÕ´¯W¬Wz/qRÏ¢ÕÖ¥pe‡·nÙ«i6Ržã(MŽãÖº_ˆ>kæ2Ú_–ÚÌRQËjÑ×%påǼûmw\•,Z?®õd€¨KáÚ;æ[î’«ð¢­2…êKætu)\{Çœî||—\ak¹TªdÓÆº8®½cNwõ͸Zó¾îBÕ¨ʇ¢®‹÷Ë;7oÿï·pÙÈg»¿¨OjÍ$GU—À•ì,pç–»ç:µvZ ¥Ö¨º®½cÞ¹å>¸Ea¢4Mu \{Ǽsˆ\Øw‹¦ÍbÐT—À%½Ø¬/®Sâu;W¥.kï˜÷"ÙÈe½}•̲습\Mu)\œd§õÓN¸ÊîZ;uu)\ÉðÓ½c4äŠqë‡-\Mu)\ÛžN¼ã‹ê:ãš”lËoäÒÕ¥pÁþ0¬ßÆerîF”þ,u¾©.…+ÙŸ¬™˜s-›§_óâ<dªåjªKáJON½3®¤ØŸ«Êm*mªKáÊN³F.“sˆûký›Ó¦ÖRËÕT·%ž/½mK–w
¸æ­û°§MHýd±©.…«ð^Øî¸¢†¹Z•«¡.‰KฌÎeg
U«\
u\±9× —nS
ýk±Š¾.‰+ªý¦®L¯05®Œ»U¦€ãSiä2zÿFy-æeÞÈ¥¯KâÒ½ŸÕ.W¡±—y —¶.‰+=úôf.£…ì­7ºµ%&uŠá{{…òõzý|Ÿá{–œ-†ïÅzæêŸ«ýuËãäŠþn¹âQrµ/p¬GÉe2a~æêŸËhb9j®Ù(¹äß-W0J®ö Øô‰rMÆÉ>ÁÀ×ðû8ž¹àZ=ÁÀ÷=>ËQrÁåJž`€hø½fC•¶—½Î
¿‡n¨ÒÖä%î{ ¤;\ÎRmR~/çP%Bq…£ 8ÚB ì÷Þºpˆ6ûB~O±k+ma› ¿WÚµ€ÃCqÁØÙêo‘ßoîXÀ‘â¸F÷}ôIk7&ÚrÎ1Cë°Œ¹:ç˜W­2yqΉV·wàœ [{Pü®9°ö°Pöê˜ËÚÕPúâØÌ2mWo@ùÇXÒÞX@=ÇXÔn\€2XÇf`«ö¨Pq¤cL´‹à„Ó-¡G´pŽÎ)¡Ï¸žuJèS„Naœz@逫ê”ÐGˆ¦²k]z0-@E—"ú°Ý}=rÉ ½ÄH7äX¡ŸF.1AL0#!—Car¬Ð{cC¿È•ŽGQ†9Zè3TÄ9Z胑Èá¬È…zG„Pv9ZèŽJ­ž®Gˆ˜}¸’‘DR­B°ßJ€/ôÁ(dcRæBýd²”¹K7þ(dcVá㎧NDùðo¸NGŠô²@¸Âáˆm„œ ˆ,f·ªÀ´Ê…D<3v¹rŠ ÎÜW4†>
„õBzôYkÈIÂ1ôC¿£rp <ÀÚýTÁ%œ`øÄ; ïÐl…(Ó„cØ€ä`)~*¤XyàFØ}’Š"vÁ!'
Ç€Œ²I´~tFÙCâ…C.rD„ÆQG‡\ä ,µq`¨ôe±§TzÒŠ4P/¥i@UÒÁVÛ$IÓ€:43D„-Mµ\+w
‘¶ü9}€Í5Ãb,d—>!&4Cò g C\Ñž7ЭxC”ÄÐÈSœa 1!>nÈl€Q䜸h†¥™pLÿ“•„ú°!ç °ÞgÍ‚ªf³XÏI–)Ùû@Î`=»°ˆ<6€Õå=+‡¤·XC´gå`D­À™n÷súÈÎòHÏ1GÊ0 à
Ò^¥~ÅðÀ|<=J½ä<fà~NAbÄq<À¦ýuk¸WV{ë0\kf.¤Ò÷Ôa!ëÿ£úé0f˜ü‘ÚO‡…¼°ØŽ°ŸK˜ÎøÔKÐ9Žk…[ºÑ]S$WêH‡É„Cndˆ•¯Z&ÔPÍr!73ÄN'Î’o5b§Z}ºs4Þ;”ŽÔÀf 75D?Xã•âfÛ¥%Þz|3ÔrIohKÌŒ¤ rcCìH…‘ãAÛ‘wF[¡ze ŒGm7Þ93´0öõ 1ÊØxbög,+ÓG
®}/vG¸qNåJHfS;(š¹¤7˜ ÍØ1r`RX¸)X2i\Ï\´;lÊ=KaC¨V
Va®ŠWvLlÌW-‚ѰôñXY_(¸“uŸXz©[QÚìUOJؼ µÉT=ÈX
§ÑÀžç?Yϳz£€Í•‡°ê7£Ê5ý6k>WÂâòüjg1,¾)hãbv˜çÇwVóܨ•+ò¸ÿ¥ó÷‚5Œs.éñË9ʳ Þ§/¸ :l;Î.ÛÌñžIÕ2}hç2é°=Úƒþ³¯CöçÎ
¹¨Ó0¥A^>ÔúMÞ/B“Ç•›režrv¾X,^=lÊýbq~ÚܘËF‡Y/mù.é ×Ü—™$Ò]8.÷:li…˹k_úÂqɱu’‹°kÓGA,è!¹òÐ%®µ=®t\Ý…æb­tt¤ñ±M®Ì®yn“Ë­Çmoà¹d8§qq—p
ÒÝï¥pÉÑX!ËKDo’¸·D|Ö+Ž ØD®A-‘’ûBåÒ;S¶Ÿ¨\ö¤¤92×`CŒ–öBçË 1âÞ.ƒk!FÍ2àpQ҇Р6WïÚAO•ãqõ¬Œ @&—îJ¡ WŸ¢ÈJærõÆË$cs1Ò~zq\Æ\=MƘ' ¸úðÏ>÷ … W÷¦ÈÏÒ4âêÌ ùÔŒ«[U4I6äêÒAå@›ruf–ŒoÌEΡîhbbŸ«‹i‹aºº.û²h~nÂ
W.íÚâ¥y‹ìpmlÑ^—MÖ¹;\¹¼p§³lrYê²óuîW.¯eð•­¶Øäâ§V¨.íµÄ.—Az5"u{H..™]ª.¸8dç¯l·¡ .b^¼¿èà=ÝpmÊ.;Þ?¿éäöqíz­Å Ï]Ý»K®]·]/ÎÔýtùÐå}»æÚwÜö„Ãââl[΋ˇ‡ÎoÙ ×âO/’wòÅÛ?Š«BþQ\¯ß|7«77Bþôéí÷9d"ûõßÿïó×/âö§?ÿü—Ÿ¿}ÿúùû¯_¿‰ßþËoŸùGùß›O¹WWÛO¹ú°¯¯Þ½¹Þ~Êöê×Ùíï__½Y½Ym+¾þ¸¹Éëë÷û»ÄŸ¿ýíôéðõן~ûÃ÷o»z7ïÞ¼/|Яÿó·¯?ÿן¾oÚúñÃëÍÿ>þ“¸ýå‘nùM¤_¾}ùú¿_~Ú^Ë
ÙÿbNô+endstream
endobj
185 0 obj
6321
endobj
186 0 obj<</Type/Page/Parent 182 0 R/Contents 187 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
187 0 obj<</Length 188 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
ár
á
äHendstream
endobj
188 0 obj
31
endobj
189 0 obj<</Type/Page/Parent 182 0 R/Contents 190 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
190 0 obj<</Length 191 0 R/Filter/FlateDecode>>stream
xÚmTMoâ0½ó+F=(”ãÒ/!µÝl“V{àb’IqëØ©í€Ø_¿3I
”­rqìç™÷ÞÌø£€¾¦CM -:ó¤óãvá Æá8˜Âd:†$ëFs‘b/y#ÄÂýÒ
§ÁQÉZ:p&÷[aDVH-·Âë º
Jk62CG ©=Úc˜4¤Î-š5­À¯®LQÐïóãâ3@?5#"õ+Ä;ç±€e÷ìê9ŠÏ–=xAë8H èk˜“¶‹à’¹SŒÑ,¨µµWmÐn$n¿j$ÜpÒà’¯Là4÷^™€ÒX/V
‘ŒQbGZYß]/&`JdÍtèê.€…‡µp'Wˆ2Ü ¢¬vp#ÜâOŸ#k²*õ¼a…ñä=8/t&lv àŒªö¶
¥Ô—‡Ð'y+GÀ~´q9Z½/|æhßQáR²†6úJj„º´Ü1.h£~ºX‡£ÐM¨ã4úƒ™¤Æ›Ô(*åâ&¹í/¢ˆŠ)øJ8ê0æO©Ä+ãkyðfVµø¨°¢¤@Å:‘sϼ¢¶é®r—Ýûèúžn¯Âp:[öÎ!¦& ótN¼"Ì•Iß ?Ìù”3ü,˘6‰sÙR¥ÌÜîÊ™“”®*¹¨h[é×`‘êD?y¥S.„PÒï¾õGd™²ekìû~PVÖlKfq>N­,ýAºzCÖÂÎ¢èšÆ O–áQ˜úœ{å{®D’†”òª DY*™ŠæB¥3lš÷{Ƥžªžªª™€´rÞò/åÞ´ƒhr¸{|†»õú²›VÖ¢öj
Q“ÿƒÑ²w—Mô\\¦\Ò¬=-"já!¥ýr“e<ŸÊ´Ñý#ÛZ[]û4\>´/ÃÑ«7¾3:¤Ýÿo’ÎïÎ?ÅÁ´yendstream
endobj
191 0 obj
698
endobj
192 0 obj<</Type/Page/Parent 182 0 R/Contents 193 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
193 0 obj<</Length 194 0 R/Filter/FlateDecode>>stream
’AOà †ïýßqZ íhçms.ñ°¸Y¼y!”u˜"Ð-úë…u‹Î¸Ã \€—ç}?>Þ#©2&ï¢n@㤺ñg¤(´Í5ï;¡<í„ÙI±¿¡o^Bƒ2Î&ƒ’n¥«7nÏŒVwRIë sÚXè˜êY ^¡MÔü5Hå4¸­€n[½—ª+¸“ZÙ»Á…]p™`ˆ1Iò`ôŠIç1FbXO ”êÃ:ÑýJÌ¿£Ìã.€¼ÌzÙÖÄT
Ê:Ö¶ayÿ²ª®‚e§TÂÀº½€%S¬áA¯å”÷OÔøG¦)çº?@QyMÆüyº þN(ªS{§çí]Ú 1ÂyhVÓp‡½¬,!½ø™h´Ž¾ †ºendstream
endobj
194 0 obj
307
endobj
195 0 obj<</Type/Page/Parent 182 0 R/Contents 196 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
196 0 obj<</Length 197 0 R/Filter/FlateDecode>>stream
UMsÛ6½ëWìÑž‘}8Šul2É´‡ÔêXnsð"—"b`PŠþ}ß‚ÔG¨L2ÓÑE$w÷½}ûøw4¥ ~Sz7£ù‚òzô~=zóiIÓ%­KšMÙœïîi]ÜLéŽV^ۨ햞!rM;ö;ÍûÛõW¤ÝÓt*iw]ÞÝü~’¥Ôu¥å•j"{j¼Ûé‚)K®Ï'WRåö®®¥ç?ÿør…·wþ5dH¾Ío¨å‰ÏI+ï6†ëïÉuÁ þä<Xù@]È¢¹ͱJó£*7T©@QÛ–‹Äõeöv‘ѳ5ú•é³Î½ ®Œò–þѶpûþò³ÊŸÆ]ƒRÅ:©
^Óy6^!*[(_°/UÎ’: ´X¼*å]Û4Î÷4StÈè7È·MRgÚ¨SÏ;íÚ`¤vJ…–Æ3€~Ïþ•
GÑÿ>kÑqÀè<'€Ú…˜j+Ã6f}±Ùâ4ŒÀ×É=i2Úò‰6½ÜDþÉYsx¹•~W¨ý”{ÝÄ« !·õª©t^nÇéy¯c5ÔÑÕL¹Sßt§ÇrxnÚªwb¢¨l!¯ì–ÅŠ'<)\j“Ä®U„¸¿»=ôc”ÉU‹öXåCÜòrH%)
Ú5ìÕ… „\Ô§B—%{‰è„T•|‹–ÇTÖ¸æbÔÔÂëp_(ȯ¢šçšáÁÖykbFëJEHUo0“NËmt­#^ì`¤Z*
0ó6DˆÜ£Š]·GÄÞø’£Do•ăvŒ@kj›K+§,`ªŸc±Î‡ç ½â˜Ñ[é@,ÍXùl{FV¬$° †cë-†ñ´ÁÁW—’„Kß}‡l™‹ ÃBª¬ñj 
 Å~kW´Fyqª$œO
@õ¶#@àäÎ&Ò'6(¹,ù„+ß\zž<btŒ&N—ˆ„—ž´¶Ìà|Öo\ï¨Ó™"«u:mN"ˆÄøÆ
Xx<
«t°á¨Á=«&•ß°åR4I»X\.‘óÊ:㶇ÎÙàŠË-¯’‡óݰXÊòëÛîþa’-‘€Ð¹<\þýçm»endstream
endobj
197 0 obj
843
endobj
198 0 obj<</Type/Page/Parent 182 0 R/Contents 199 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
199 0 obj<</Length 200 0 R/Filter/FlateDecode>>stream
VMSä6½ó+úÈV1†ìB¤ 2a¼µ—½hl™ÑŽ%9’Œ3ûëóZ²=Œ—P)(°­V¼×ý¤¿æt‚Ÿ9]ðo¡nòƒã»Ï4ÿ%»¢¼ÂÚÅåevAyy˜¯%å²X[Û—í§ü; Ïi>Of³³ÏÉì×/%)O+áeImc
CRK÷¢Ì |¦®¤BÔ5,Ü §L`ó…³Á¶>"ëèa±Èø­üKi8 „žŸe§Zê•|­¶TÚÒx²5ìK:dQŽÏ^ºWüÓ´•(Bë¤óGÑ¢Su
ßäÛ¦±.$gœ›‘ÿzR…³ÞVaù«2¥í®‘NÄÄýÖ©³Þîô";g;N¾”•2Ò“ØAÐôUR…*›¡vÙIdƒÿHTDøâ"}·+¿Wm‚²(·VIZ–JLôê‡<"'½­[6MÅzËÃ:£GÞ"ï,17ä\8ë$––—jËœm™Ë0îQì$tŸ£§ukJ'KÏûÂÚ¶)D†´ªNl3úbb
>ÝÛÖ¶“ˆ•’52ïÂÆ¢ÞO¢ÖÇ}#Z¸ …ØÕ-Má¶Mz×bÃÀªBt[¬I[úe¦Øq1à†Ä„­K,¾G0š¿[‰R‰7؆kdŒî·h”;a<§¿ßá÷y¾8¢n­Üð&°¡"J\õ}‹×ië¿¥ £|- ˆ[’WÀ ·ôªd‡É(Z
D"©
ðÜzRÍ Óg^Ùu×80­?‡V.f·r“¨ òU•±í «›ZÉTϳ“±á¬ãè0Òa·í02cò¥ÕB!a7IkläÔÔ7DF·êEúðž«üqù¦5F)¯BÕbUK DUËjAÌBœ8[MârµYRÇ·2ÊúѸS5OÃêg¿žèZ‘;0 š¦•I  P'´*ÎQ§x¸¡Íœ Yñ„gIQ“px”Í.q®S¡HD ÔXÅLXe•f”ÌpÓiß ì#Òpƒõ)Á¸TUgˆœšÌ'~áë}¹ˆ‚Á€CVÉŒþdEð„ bÔˆΨ–ÅHŸu°Ž
¿ñ%ˆ/zˆoD±AûÀŽYŽy^´õS…Wš§U0rðÎh³ZÎØ|‘‰‚‹ç¥«‡cHfïØ'Yi®<âzD÷‹ÙïǧÃëâönxd@+M|ÏÞ£zTÑZÁõ5/ §š÷îÂгðLÈCü¹âq²|^"Éç‡"•íoÁ ú™NMê,­TТ雡?cvýéRäÿÝ*Ñ;Á.žOp|Ǩ“Ø¡GDMñèH0g´³³nñýn•C‡MòÿvxÝ4K‹xáÛ§#Z¦‘y,ŒÐ
ŽÇMòüˆƒ>MÖo…ÔèÔñLûH$Æ=N½~$ƒ]™ìX "*à§Fà~Á)ÏXëvê
zº?ÅéêfŠºMBí õ°>!…ŒhßËzf PÀ×™Gè®xƒ[é7ü<\2úºæ®
|FõNJz‘†/P2^h4h޹ӓA0´-%ßpG%ÃíCt‡Ûmm;¬s
Yí̸}€06¿)¬C‡`ëχNûFç¯zbæ§ç°º8éɹ}¾¾Ë!Ö%.«êu©•Q1/ 
*jö3KÛg—§'¼ûœ¿Ÿ\e|E÷úý[~ð×Á¿Jêîendstream
endobj
200 0 obj
1320
endobj
201 0 obj<</Type/Page/Parent 182 0 R/Contents 202 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 17 0 R>>endobj
202 0 obj<</Length 203 0 R/Filter/FlateDecode>>stream
UÛrÚ0}ç+ö­é ;yKÒ¡Ó24éeú"lÔX#ÉaøûîJ†8iÒv4±Ù=:g÷ìæ¡•@ŒŸÆ=è •­Ëu«;›B2…uÉx
a4À:;ëA.+QdBm© æÊ:Vôxu·\½_ÿÂÔ$ ¥vBn§?ˆ#Ÿ¾Þ 鎕ް;½·€8
õˆ" ‚Ûq¸ÒRjw‹ù7X¡ݳ:XÇeóºfø1Ç“"
×ëVÅ¨ŠŽ„ŽÛè÷úÑúɹHT:‰zõScHMt#3È„uFl*'En´ ¬P(ìù¬p¼
¥Ñ)ç© _-O}¸®àYÞæÓ`€|ÆÃhÒàóJ|#B ž`iÿߌÀøQ_è}žb¶Ç«Ðh.ƒËP’´'¸9‹‚ Ð@D˜|p;ýé+¸+]™”ÿëóûX Ì¡3 -˜zË*a¸äÊÙçf‹=þˆ‚¾ëê:HQW˜‚‹ÅjWjYŠw²›o$¶
m„v¬muaA8 ŠIô•, Ám;D¢w3nÅVùf{ñhqÏ1;3•"(r€·«.¹aÞ¯¸MNçtýÑBègnr†â ±1T\ò¿ÔÖÎ}X.
±þý†¥÷\eö޶*‰c{áv«¢a*¬¢U© ¯ý,R£­ÎÝÏÞp_…Êpüèï¨FìBwf:pm=…ç<–Èo•Q:¸/ÛT¼S±)íãòú¦
ËëùlÖöI?>Í/k•XÏè´+QB_HŠ®ÁY04EPgxV¥xM^)?c¬îÁ5³´Qîö´ –FcvP2,0~6Ha Ê
e}qqZƒvìEP[GYþD˜;na<‰›ò„ð—u%ôx{þ0`Œž»ò¼ÛÅ3â(Ïî#´o·¬6ݩק/™ôñšøH«±ŒÓÔëS²{N+YmQf½Â$MÉèE³¹7瀕dJc¤E/:…@
ŠIQ#P¼t+{d¢`²Õ´;ÉÓO¸D†ÿûOh0‰qãø2 ëö|iýíç;endstream
endobj
203 0 obj
831
endobj
204 0 obj<</Type/Page/Parent 182 0 R/Contents 205 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 22 0 R>>endobj
205 0 obj<</Length 206 0 R/Filter/FlateDecode>>stream
U]oÓ0}ﯸBBiqn+-c[GQcË^/nâ´†Ä.޽ÒϽN³fa£ µr›ø~s¯öbˆðÃá¾iÙ{ŸôΓ^Ä"|OKLËõ#ZKˆG1
¸!§Ž‡Y@8‰`Ìäz8zIÖÏíêmâÊÊ1máÊÍÃ…Ñyþ:ùÞŠm£ÄGǘ*"_2'GÇ3¨‹ÇlH»ÉR@¦SW
e¹•Z¬ צäÖŠ \%Õ,}H>ÍÎ>ŸB¥s»æF0˜æ°Ñ”@;«¡ä?¤K®¢ò)W°–¼}‘˜û€eýn,È.ßÖ…¶Ñß;ÐÖ_øÆ5¿ã‚ªŸžä—H=1KëY]¯×LðjS­YªËpiË y‚Öã!fhÑ:†ºD"Ög5±§º\É‚Ø;½½ºyØ„hÇ?m"ËHÙÅå-pguªUN|Ò¯\8d‡è'vsY WçLŠlëLP³ˆnÁŠ’AÒöm’·Øï8€Ý¬Ä>òÉ=¦‡—ÀÂ]ôóËäüº#0r} .‘sWXª²¼(j­eQÀÊyqøwZÊ¿l
ª£öCW™‡‰úž‰®ÙÿÃ,“F¤V‰äaêôX/eºìðãkÓw¬´³l@ü’•¥^®ŒTþJ¥Äü݈žý-ÒDZq¥ñ½éä,tZƒRx ~¬ öÿW›^‘×v¯ úŽÈ
©„boGñÐSyW—ðñê×d:™ø^|MßC!ç†{® 0mèÀ)AðÕ5²¸Gþ­B”XC±y¾E“/Tª´p™ø5x\rÞ1ýöšZö
;ÔÌ®ªS]ÿÓÉìäâæÍεêN­h¶
Sò9àNçQQx±㔪•µíÏ3ºŠõc.¨ë…Á4¬t)ÂFù›ÛoËF‡Ù‡¶lc{eòYáx¢K`ÉïÄ’½DŒÕ|w•}îäñ7̾ÌÈäÜÉ"óý¼¿¬ºÓ:Ú
êi-Ïæž»Ùº<9±;üþlÿ˜&P Ôhq4B·á fc²?»>™$Ôã¤)N²R*œL†cÏ*øÄ•ã… âÁºoþ®Ò»£xÄŽë»ëZütØiÒeµ½Z¿ô~´endstream
endobj
206 0 obj
856
endobj
207 0 obj<</Type/Page/Parent 182 0 R/Contents 208 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
208 0 obj<</Length 209 0 R/Filter/FlateDecode>>stream
TIo1¾ó+>EjE¤0¬aÉlUM[2U.¹xÆp3ØÄ dþ}¼Ì jUqñð–oy~~kõÑs¿>& ÇÈ×­ë´Õ½Ÿ¡?LH OûþHÛ +Ó,ÌŽ(vžþqé#ôû1¹3'#ŸüCä •´X-Ú²d4ëº8Äs"à‚Ê„ÐÍïŸO „­¥@VÁT‡xQz˜ENŽh'ò£mŸ¶¿ kµêꌋnn7šâ+îÓ»ElàT]&Sß¡ã[ g‘êC$ç¥\sAT…[®â™5\ŠO]áØ>3x¹UŠ SV û*×+HÉb;zÐN;7Î(¤Zƒ7«Æ â@…rlI +¾1:‰$.kž~ãôó|ñøðøíꯣ8Ð8íxYBn™Ú)nÂØ»cè36Š‹pЕ6là¡cbï¦8óS¥¼(xnKÙŽìÝäš9Ôc @û9{A‚ùéK,%2’¿úc@–%=½ˆfSì`û+r‚¶jظŽrË©«þÕ–Ö.×G˜(”\׌œRrº¹þ7·& ?•8lw,øÿŒ¡”Ë¥ûpÃ'JJƒ—6•áÖ œi{®;’‚ i—«—óÍèõ4t±š© (+Â_G©ï]ùïJÂæ$¶ƒõi®Ö‘
óÂ0å½z!^6AÁv¨˜î
‰7Ët¼óŸ=
þd‡oƒRxò£¶t}›œð@0zjƒ5ÒmÏ]yUoÈ´&ÙŒ\Òp2‰;p»˜ß§èD
Íã…9]sáW“©4¾aI&Ë;“Aï_/ßhÚKf)ÿ}—¶~µ>ù]°endstream
endobj
209 0 obj
640
endobj
210 0 obj<</Type/Page/Parent 182 0 R/Contents 211 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
211 0 obj<</Length 212 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS042Ñ3R072PIÑp rt QÐUp
VÎO+)O,JUpLÉÍÌË,.)J,É/*VðMÌ+MÌÑ ÉâÒ…hÖ…ê¶[…Àü Ò¼¼Ì¼t…’ŒT¸a %®!\\„‚)%endstream
endobj
212 0 obj
131
endobj
213 0 obj<</Type/Page/Parent 182 0 R/Contents 214 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
214 0 obj<</Length 215 0 R/Filter/FlateDecode>>stream
UQoÚ0~çWœ*Më¤H`ö¶UìaZ'ZÒ½»±·‰íÚˆ¿³—5´ë„D¿»ï¾ûÎyd0Æ_³&TÍà[9}_@¶€rƒÿ(fS(éåRXi.,ÓpÓ²–Á5&ì§òASÈ2J*LÇC,wÜ@µ#Ê!)7Uk 3°“°¥ 4’òÍ1"(PV3Ë@¹Rðä
޲Õ`ŽÆ²fÊ!ÇÏù+8Æj‹XŒA­m¸€+Ù4˜ñ%¹p¶ˆgCpÜ/;èKÈ%T!º–ã¸8êŠéÔ
²76ðÅ«‰åHÛóh`£eËu‰Òš æÛ@:Ùd˜;:k.ªÿ%„Š’Ú z°ö’Àï@€‹m'R,•·îx-+bÔÅž÷=jÕü¾_‡rÍ*+õ±Ç• ¬A(È
Rh¤a¿R þüñõ÷çHýêIs~ô_SÿJ©ëÜèÚ[ɽuf5oÏß»ˆ³Ã™^Ý­Ö~¾†7ª>‚n_Õ럸ÝyØEª.@*g…/1ÅÂI¸qÛö,gT7s/ NcœªÎ#8Cä{Áãù~öŠäãîûàŸ>FÙžW¬ÍcjHWoB•¢=Ü)Ë_åò¶w)äÅãÏ⯩p³ï™=04:®¿_$ÔqOj¼gˆŽ1RǥɋӾ‡BEœÂ AN³¤A—%¡UnÖY>늙¾åŸ»£Ú1aÂ]Ô
ŠÁ
ým†p'¼±%RÕým3IoA\?ÑV¾²»œ·p{|…´g>"†¥ipË÷,ÜtçIdÿÑzÏÚƒŒéÏOûý‰)ôv–úùBŸ"’®æá ÓmÞü¯
ÊÃßû&Lçãá"xbáÞ—åàfð¤ZÜçendstream
endobj
215 0 obj
679
endobj
216 0 obj<</Type/Page/Parent 182 0 R/Contents 217 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
217 0 obj<</Length 218 0 R/Filter/FlateDecode>>stream
xÚ­VmoÛ8 þž_AÐáæ8N‚¼‡¡»¶À€ÛkÒOÛ>(–¼è&[ž%¥Ë~ý‘²œ· 6äЭM“ù¥ïzø“À`D¿iÞy·ìÄ÷CHXfhM†Ý ,ùõr-àõò_4Ž‚ñš‹LEý²ñ¸V}u¹(,˜R¤2“€Eßúcx|xº‚L*Q°\@†d.+YXQup2­”~’Å×àe0¨ÇéA” º}ÊǸ²Ô•d VÌÈÿ5–)ŬÔè þzœ/fÇYc•QÔR Êb#FÜäžÙö…ÆYˆ‚cŽJv¶t¬öE5 p_o÷8‘è0‚,ËY¯µ±„ôiF¥}‰+a´«Ò‹ßÏç
¹D¼Õ¦¡¹ÕNÂl7³d惾[‘1§¬!ˆÑ 9W*ùA5ñw'ÜE5ü=¿ÝÕàƒ§”•jö¿5¯‰ÄPÉs Ç’µð?½Õ%M¥ùrI&uä£<^êd€j73e¬°bKÚ°‡BkKPÍ$®Õ¶–§r>_ÿñù5¤k4¥ØŠY€íí–ÅÎÅÿ³¶öxŠ×Î(‚…°õ~  ov+¡)ð4Š´¦2¦!ŸœÁ)\¾")dÀ™Å½1Î@
ÒnÛ b#Šd‚Ú é7$÷·ãkÎO„GËÅÑ ]¼Ðˆ¥«
ÓŽ4eg']§ß„}¾¹.R[º3”ÙnÊráЦ­NµúýýÕðÃe6Mz=_d4îcyÓîèÄyW–ü»9Ò±H+YZ˜‡rn…ñ/èd¢¥@ÈÎ4Ó.ÍþüàZK5g\ºneÏ ä‚Ko@Ø´‹Â|’Èj¡­×ø†IÅV#3Øj:—6à0\AÿÇ“ƒ{›ñ\>íTç9+x„)ÔiøIôk¶?cß]I<mZ‹¨÷É¿˜MŽ~2¾¤@à• ¨W0Çs‚¸Å+è^€)d /”NY¸1`õ'e;SÅלˆSWš8×\¨vB\V"µºÚ"ïvíÙ¼Šò«Ð¸Y|ZSEhÂ7ÍLèáx4%Wq¨¢²lpNÐsˆ ’¢kbÛÑÇxGóvˆ6mçþíÕ3¿¿®í]ûMhˆò“® ì<ûãàw÷qy÷pLOÔOÏJéEJOˆÉßÃÀ6¦-ßîoîñ­øÁòR¡*p<nKv¼PjÌIÀLúC,f4ñiÞ>ÜÜ/qÒ¥:³O8pC=‘ÆâѤñ„âtÌgÕθ4<
I^†½î æå†sÒÍe¶¥§ ¯ˆ»eçŸÎþc¤endstream
endobj
218 0 obj
981
endobj
219 0 obj<</Type/Page/Parent 182 0 R/Contents 220 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
220 0 obj<</Length 221 0 R/Filter/FlateDecode>>stream
xÚ½•mo0ÇßçSœ"MˤA¡ô]×tš¦mꪽvðÑ:Ìl“‡o¿3à´M4©Õ”ÁøÎw÷»¿ aCV>¥ƒñçÒœvâYäÏ å#s‹ YY_.aú÷W4 Q ÔÀ•Ø LVf9 5S¬(°€Z*CšŠ“É7Q5;ØË¶²)84O?¤kŠ9¹Ú ”‡Lí3Ù­ -»xãF«q!Vã¢f¼xµËÄÛ¸€§cŽ›1­ðJNÛk4~]s¸ø‘^\uÁæœØºrðl¸éÜl„+,åFT7p©DePéÎú‡µŒ­e*AYcugl>¿¾\¶ÕiA¨ö š
,9WbwΨOÿáé#âW–¬â°æ¶uz»!ÈÚY½ŠÒ®ss@ž•Cæ}òǧ'D§Ý†Z0KÈò®ççÓŸÇÖò¡.É­n1²%›ÚòSŽ¥J›õØbÈÎl”#x>üºEëCŠR¤ËŠk×XË•Ä:Ç-Zzç°õ·¢(`…ä#3¤*8¬ö­i.”6À6Œ2\xè·°½e¦;ÕïO ㎠„qþP}o*zöÍÐËœRôë.Ô+¤âeÇÎ1ý·{÷Zvð “ÇsµzátBqïîÛÑA
„†L!³3ˆ5F–̈Œô¶‘ƒ0À%êê½Ü m|¸‹»Ö¬j5Iè]¿årÿê%qO¦Ú±#Ë&¼Àœ5…qãë¥é¥ifZÞ»8™Êþz½™@ù› äÏ#¤O˜
qádîlž–ØdFH_’Ø££ï*eê¦)‘† Aæíó1K¿sžõÎAQ~'A[ùâêìs
^÷åXÊÜl™B8³U“D3’†áwV5¬°§x³—„m]×Ú¶~iˆ9SÜõí÷¸ÕU”Dî~}q~þSHþendstream
endobj
221 0 obj
726
endobj
222 0 obj<</Type/Page/Parent 182 0 R/Contents 223 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
223 0 obj<</Length 224 0 R/Filter/FlateDecode>>stream
xÚ-A ÷œâ-uA-`¬.«µ;“jéˆPƒ±4~P¯¯UóÞj2sgùgj5ý<°­fz
! {¹Ì$
™CÛYu*k
Ž]×´hÇ>½ 9”vðÁÇD&q0áans}eüó•*²
¾ >\Ð&¬!‹†|HŽP:Š“¼×ìÈÞe>-endstream
endobj
224 0 obj
141
endobj
225 0 obj<</Type/Page/Parent 182 0 R/Contents 226 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
226 0 obj<</Length 227 0 R/Filter/FlateDecode>>stream
xÚ•T]Ú0|çWì[ƒTBBR>{§V=©­¨.÷Æ‹oÀ½ÄNmÊ¿ïnœƒƒ^O­P‚gwfgÿ¥Ð'…Å ²9”Íè¦M?® ]AQAºÈ`¾È¡QX[¥½Ò[¸?:
|Zl±AíÇÅ*Ë!M¹lÂu“,Oâ¾´Ø)åN´-¸98 /8šJ¡¡4ºRÛÎ"øÂíÃúÚ=Ú8t%1ïâ%÷M¨é*ôüŠþ`ì#ÜÅÂ+£/Uô<(@X‰®ö'º¾LuÍ
µ¢á´ƒÊXk,IïÖ4 êôÀMf ­D‰¨Sk¬‡y–²¢N³xÆÔ›ˆû;/´VÂÝzÝ#7ãÞËFi"¤T˜yQ«Fy”à
Ô¦õ…”ƒò»^·h[kZ«„Ç+ÞŽ¦Ñ¢!ˆ–Ð
çH²ŒÐl\¼«8…7’ر§bV%ÍäøN)²6#ûéƒ*”„d
Áõdp=šî…–]ë¦ìtÿ$c~¼L'‚JÕxޏ—B›…ÐÖdÓ«‰^ÿ‰@*Ëží)KU)ÊJ„¨úi9i³æhÏ‘ÆpƒNI¿˜l"Êz3~Úâ+÷Eí í“ïÚÁ°ZœÜ÷SQœú-jGJ.=_JÁºO*øý|pE}Àº~ÍÖϽ€ÿ1ö¥Š¿YÆã;BHiy‹úý£ ßþ¢#Ég<úÓº‹Zùãð? Ëgª’xõo·O¾Èé’HœfüÇbômôûuƒ×endstream
endobj
227 0 obj
563
endobj
228 0 obj<</Type/Page/Parent 182 0 R/Contents 229 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
229 0 obj<</Length 230 0 R/Filter/FlateDecode>>stream
xÚ­VßÚF~篘>…“À‡ùͽݵ‰rRšÒ/Ëz6±wéîú(ÿ}gvmà|—H´ =;óÍ÷}3æïN
z¥0šò[–»Uçú]Ia•Óé|œÌa•u—Æú«ÕWº9®ov!S¥WO˜À}SÁ^hÞ€(
³i´æ£] ·¦¿E(Œ”Bn•ÆpR
•ÛXc‹dÈET?ñ÷¬Ë·ô3å”ó¨!Î’½Ò›é(}ޝÏgG‹dÊáJS¸ÈÀä¡~S¥îäÇÍÕu‡ÓdÌ©Z­ªT„”è\hܥʕ~oì·kWmèkúý†à*;Ža‡È ƒªÃAd™ådBgMË5Úx>jÁ¨òkŸù%v±€x‚솑‚;kö_¶:8±´zIÍ÷NÄ:{k
û­’[ØQ0(¥ÑÊ䯂ÅÒx„UÚ£u Ü Ã\T‡x‡P¢¢Õöýr“®»¤òúª[³Ç'´GçÈ­Ð_óæ3Ì’ˆwRãe34
~ücõöæ ÍÝ¿(gY9ñ\ÂHN”O¢¨´åQh\U#—l…æ!‡˜´•‹ö}¦Ýmùrù^=x®`mY$ÓÁÆIA4F$„4š¤.
œC)ý¥Ñœ¾rPí2áѵ„3¬Ñ™µꛀíX…Ð?œL’³O~tÛ^ÁŒêIiò[)xïô$–#ΣûÏ©7€ A®“ñ~Ùü é xjyQijŒw8îA:íÍÂ6Ê»Þq`‚­»|\iÈ…ô¯ ?iCÊáŽ[\_E
¸DÃ1UÜY³)°±Û¡°AÃ
B®þÁ¿FœÒê<o›þ´7C«ËáÊÊ*ø®÷~}\>pÑ'•‘‹î—‡Ì”B龿ØG¥ë=YoŒt'íJQ‘O´W2êÆãù¥ä«íƒ‰1—LÆëg·‚|JO'ׯ –üûÕjYž~þ…1qXem6ÑaÞ,6´e°‰‚À¥CKÓS›PÖð†sÊpôáz8µÛºY©^4Õ¦P.äütÖÙÂb޵$ä“Ì’)žqEš²$ÅšÁ‘'ž›Î^E$ áºÿ…©Ö ÁU§¼ÈW³ù)(8Ï…¥›ÇÞO$¡0¯“-¦0¥É‚1üöéöÝŠ’'=˜ÜïÙg·µšVùü.t%
NÒO‡c6ÖŒöNÇ|q<™%3œþlñÅ·«ÎŸY^endstream
endobj
230 0 obj
967
endobj
231 0 obj<</Type/Page/Parent 182 0 R/Contents 232 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
232 0 obj<</Length 233 0 R/Filter/FlateDecode>>stream
xÚ­VMoÛ0 ½çWð˜;Y>†¡@Ú­À€}t«wÛE•äV«-y’Ü,ÿ~”e§qêdî0"ÉG*¿Lð‰`Ãt4\$ƒðjQIŠÈ|9 °á:Ë@Ù{® Í©UZpDs°äKHµÊqx•üD“ÚÃ0,Í=†´,LÈõMŒáÎá6pÈÆñ<˜¹˜Ésw%V(ÙíC<r0¥Öª”ÌTl<eB)7¨’V«ìÉØã†jqËÜòLmp1OI™Y0\?r]“ЦAìH¡“TÜ•º¢¥áæMÃqå,RWÈus8r?Þ6ì!$,ò¼…®K{Ÿl Äú ºÌ¦p³5–ç-°õã‹f˜ï;.·#ì˜Ú´@÷®\£kŠâE0Á'jSîç>ÛøS»|§q0ßÅo7}LWíhhÇýnb+„ä¾—M[ÚÝô-K•Ë@È;x$YY+Ó”E¡´å¬î­ÄKd¾SÙx¾èdUUF®j‡ÇÍa0k¼ü Έ©dj‡óæÿMyaݤJcfÊpÈc $6•ŽßNM]Tvµ
ÚIŽ[''ÙÖÊÉ$•̶͠–‡Î;=¶¹Ž}þ]yiP
EÁ‰FF0äÅ #8ÔóäIÍIœVóé¬ÁœŠ´Zœ€´’ä|®0¦QÓ#@AHn7J?`aœªÔË\ËÞªjünê½z|'Óã³_AŸ•äǰ³€©œP•³éaâÒîa&¥ ÎN½ záÛÓ,Ìóþ–y°÷¶¥â·æê¨Î†û·”[f´Ìó2#îÃŒBñgVÙ %ˆkgõ–»‹‹9-Uêj´åöQã÷àÚs}3{ò4=.ë¿LÃÿße ùΑԴZ˜ßÖW .²Ëï×7p£R»q¥\»ËwÞáJøDdIª™ûããE<q§÷ƒÏîPõ9zí>¼O_³·endstream
endobj
233 0 obj
751
endobj
234 0 obj<</Type/Page/Parent 182 0 R/Contents 235 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
235 0 obj<</Length 236 0 R/Filter/FlateDecode>>stream
xÚ½V]oÚ0}çW\õ‰V$%º7Ú­S¥­êÖTÚ/nâÚˆßë$Ð@C mUA$ð¹¾ç~œkç¡ãA? ûxç<ìœ^ž7p}Ä‚±gÆÝoT,ÃÁó*М¹ÔBök°Å¾ 1S42lNAç4b £¤RA8íÁÕ
8VTëH‚š…TÿÁ¤ÄCÓ,“ ‰"4#AWTÍ©úº¢?«"Çtœ*‹¸k! ÖFQ剒&Y¶¹–‚î€NÜXr„I¾Ãäu ›ñëVB÷äl|_|ö³:å|oCî6žMy8¶?+õ¼(l»¢œ± ðayv˜ê4DDÀ=…B£ŠP>¥ VrJPqk·¶Cz•h-£'Ej·†üÀ¾Iÿ¼ÐHžS¢€ ÍbŠƒ°åá§Œ0a)vzq+¤9®ÎÀ¯j:)L.szÈȶïi†Ó„ ¬£;ƒ–  ¸‹
ê`mYsª°˜¼ɨöã1ÈuŦ~0Úæ_]“ÛÁaܦЩ,²Ø6²fÂnN»Áö¹ÓãMÞFÛHωfÑsÖryâB31+ rw}õr¢5J)ÃLÉ"‡„e´RŒSÕà]-øå\d˜Æ¡ÒiÙÔ¦…=Í3:§™UÏ>ݨoE
t,­‰bÉe¡?]_wx?='Àœd̪‡*{÷•rYk§‘©{ÙíRÊßA×+«æµi)¸{šI+óêÊ=ÒK}dYFîø) JíÓ®IÙú¤R"fñ»u§tz%ýb«Îy[5Z½~x1f+–x¬5JhÙ–³–2¶k4zyF7îÉ·ÍÝGãñü!¦ Gî—òÿ3¹ ±²w7·p+³°wö$æL0m1RiøEDAÊ7.§ÚîŒü¾ÝívqúÍ÷ïaçwç»oGendstream
endobj
236 0 obj
726
endobj
237 0 obj<</Type/Page/Parent 182 0 R/Contents 238 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
238 0 obj<</Length 239 0 R/Filter/FlateDecode>>stream
xÚ¥W[sê6~ϯØÃKIøp N§3äÖf&·&îCgx¶ŒÕØ–$ÃáßwWÂ`“IÚ ­v¿ýöÛ•óý¤=|õa2€á‚ôäÂ?ùvsý¡7?½ñ´OÃö¬0ñïJùKù©ÿÚ ßwVÝá¹7&+?æà6{ÛÍ÷¶!ŠF¬8hn4<¾$[0
Í!’ªîÏúªûa„gFÌ™y´¨coôÿP¥…6Àòœ3"Ó"äÀê®î¤‹zÔ‹çvª´v‡GØËFž6äô>©G5RÊÂTdBeqnFzCX#käeK{¢1\=’Ùä܃[³eÛe¶C±"¡ÐÒújén¹ {&μé>K[¤p¸‘*eF¥âò¯§È•\a%4–âþöþº»`”JDç¥À2ûÝpEßRÄ óO Q ³WÆš[ˆ ý‰Ì°Ebå†áé­–gAìì¸ò ¡ ©H¹G„è7ÒD,MÆä±C… ŠŒ[òʬx%'**¢d
WL$ºÓ_2Ö¶nïéïî÷åw<[ÝÉî5“ëlŸöàšhL(7íÓÓ†)”ËZ˜Ø.RQ÷9§l ^K.I"×XõÅ3Gw
R©ªtaÈe&¬àUPtðÞiR¹á?̷ؤISUœWQ'¦)ÏŸ;Zq„î–xû¶¥c(ÿÀ|~`»Ÿçí^§ßŒæ§ðæmì^Ô2-¶~ýÿ¿û­…ÕÅ/W—þßO׸>?=Ì KȪ匄¹fÖÒQ9všÊ6.[[ –!_†ãÜC±b-ð·ˆmû±E|0 8ö”ë  :ǵªa]K]â¡l[U±Àªœ¾ïM"Ñ
¢.G‚†’xÓ½rjˆ±Š°æIÒtcÔI
9K@Ë„' ¯1/¸¡(–èÀpø‹³6*7mÉR*±º£#ÙöªÆ#¶y:£Êq^Ù‹ÐrQ.Jœ+Ú
%×ÙOÈM²&~c¶¢KªôL#n-Õ«…\/öú¦JñnSB¹ÔZ,D"ÌÆ’w…ĉwEP —…B4²0µiåfr‘K—0V­J^¨†³°‰ûý\3\+…m·[M¦ˆvwf>Oêí<o£zsõnhCžÐa†@4¦Ù±czw;b
ÃUøiŠõõmˆ;¹$–`öpõ)Wº+„·Žò³€W?>Êï—ãýO¹Bñ¼ÝÊ™ÁFÍZÍ Û=°¶8£¤þáH»ñ󭟽yëSQ˜„˜·eá#Sa.MÜ”“¯
Tm„—Žán<­X"ÂÊš½\ÞÞâ´¾|îÀÃ]üÙE.^:0tûƒqéôƒ¸*wÁÀ¶G5í.„±“U7`#_|ÛAqX;Ð÷ºƒ³Q6¥ÎŸ½32¾zžÝøß>™½ÈȬ)ölÿÄ)1è=Ë
f¯Uô<¢Æ zÿUŒ&#„b÷úZ¸öOþ<ùœ»îendstream
endobj
239 0 obj
1150
endobj
240 0 obj<</Type/Page/Parent 182 0 R/Contents 241 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
241 0 obj<</Length 242 0 R/Filter/FlateDecode>>stream
VMsâ8½ó+º81SØ1²{Ên’ªRµ»Ãž–=»
JlÉ#É0üûiI¶±
IØ­ä€åþxýúuË߈èo³¹ýóÁoËÁÕS “ ,S˜.Â)Ì×á–Éh5ß—å+D•ÁHÅÅf5’iªÑŒ‡þy¸úâí®k;`©JžÂú`P 0<f ÞÓ»Õù#&3‚ðNòxËT“zDz \³þ§\z+•¹<Ùd¬¹. nPuÒÂj$Ðì¥z©`¸æ›E™:ˆ6æ-Þ ‘*AUçªÑ“s€)õåpgÓÿ ÎÂû„ÌLR`\.K\*EPÀû@ÎL¼%ý´år>Ñâ̦áÜæÎyŽa,ÅNwã¼Ù7Yn±î=¯¤œ$˜raœe S0€Î
ÑV(¹Q,×tÆŒSø›{aÕm­ôAÌCxdñ”Dsm4Åù¥qç+¡il(´¯,£û e©b‹B.˜áRPmêäÛ΃ÁæªÈÀŠ"£ÞZç«‚œu¬xaà&kdd¡;žmóH¸,tÐò;û^1m9¡˜…6Ò?u¢òœmðê+|"8ÓX8¦¯œŽ
,˧J˜7Cï¸>Uf‰/Ï/`ŽA‰â¥&iÒÛ=Ï’˜©§€²@X{;Kº\ûß«†›°®­júðدá†U±öç×VÏhtjÇé<¼~§Ž–X.)¦’8 ûÜ|X»³óq«×ó8šÙáÝ¡wM 4Ë®$&½úS%sºÁhÈ&Q‚Íç|¨¦RSô"ÞJ©±Gðš¶"U¸—ð4E·fh]Úq¬2iØoјء2¾«®Hx"DøƒåEF½·)¼‰GÓ_Å®w¯núUÙ5mÁû@Õ½(c8È’”D U|®ej`"éÛvǵ×^ljíë±i¤¡»ÂOìQ'ÆPõì<”Ð
y] ¬Ö|_\§Û6P•âW?¤Æœ×ï†Áb&`žrö†N7V }"ì`~/9ݺ¤(¯È:X^R5,Ž‘Kf¨nEx@LmÊœ¼´ë ŠWRØØ1ÅÙ:£Ø4Í4ûkLz™«iýýï?¾Á3Ýä*etQ< æ2v/¾gjįrmë¦^rC·Ÿ_sþ±¥ –㿬ÔçÔ³Iü'ã–š~ÕANdYÑÐZîîµ}B–ø©l–Ib«=¯Ä_qé¸væv(ûmj“ÏEQR£îéF÷¾ÔfY:ôA6²¹Ãkÿ:ôÀðÉôš¢ßLo}ùÝ?-éSÆuä›LÍÞ~Ü'9tëÓú’4L/L”þ[4ðîÁí4²Þ“…=¼žEô¥5_3ÍÞ}\þü Ù–>endstream
endobj
242 0 obj
1065
endobj
243 0 obj<</Type/Page/Parent 182 0 R/Contents 244 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
244 0 obj<</Length 245 0 R/Filter/FlateDecode>>stream
xÚ…TaoÚ0üίxʧNI4|ÛªV­ÔiLÍ4Më4ǯŽÍl§UþýÞKhÓRʈ èîüîÝñwÄ Å‹Á<ƒÉ D=úTŒ’‹XŲù$f0O¡(O>À–N™ |Â6&(³yWüAÀ#À¸GŒ'Ù<ÎTTʃ¨ø–P¥ô©•ô* gß–7 íÖJK÷D¨ü!>%ªYò¸Sþ^I'!X¸P¦ì°×» ØKù3ë…å@ñƺškÝ‚ÖÉ”é¨z†tÇp’Üs—ˆfëDïÑŸ@©œocøaÜÐpfƒ§£AW-ÈR-Dý’ÏÆ&½)ƒ†°fÝÝ•1ÝîËÑwjÓ8”5Ý(Çl¢‘¹ÒûßzçÏQ{ö& ûÇ aÐÊ’‹
.b NzÛ8A“ó8|GcÑr+g<îݺnÙÉÕr B+iB çHD:ÏlÑÊH"Ú-ÆÛ±À}!atfë
è¶N[ 4;¥š›¶C¡{éðzvrk]¿
kµ_<N›“ØšÒþ$üxF•õ6Î6[ÒÀÐò ÇAÕno£Z†Ê–Ã줈«Á_0U<4Чò‰ðÅÃb¤xaGðú™¥ÉgÞ&,ÏóËYºÈrxŸâëDË/7$¼¬•I:ϳ¦)–öMÒZÝÉC¼ö?Þ,M{Þgu&—^Gfö˜ òêuX¤Æ
(­‡ÆYƒo+L§«%ð²D=4FÓGEªø½Ü5©<ZKT4¼–×ÖÞam÷S!ÆåpÁßnÛS¿P/›
ÚºËÆá©¹~à­§Ú®Œ‡hí
{:Œ’ÍŽÿ›NçS¬vÚ-6§/΋Ñ×Ñ?d2 §endstream
endobj
245 0 obj
651
endobj
246 0 obj<</Type/Page/Parent 182 0 R/Contents 247 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
247 0 obj<</Length 248 0 R/Filter/FlateDecode>>stream
xÚ¥VmSã6þίØÉ`JÛ¤¹$ßh7M+f:íÑé(öTl)'ÉäÒ_»VlòäÚIˆ¼oϳ«GúrAHœöø?%.D$SzÒëwƒ>$ÙQò€pœüC{ˇG¥Eã—jû#˜JÌ3Ù‹’>•“©p˜›+Q èiõÔà—­“ê¾zÀÕ”~6*ƒ™°v®MÑ–³Y.1ã”!´£Ó æÂ¦Ú¬†ãÿ}ƒ¯%ÕÊ ©,´Ú­`é÷‚î  2ªµíd¯"c«ª@¶ÜRÁ{ƒ¨æ2}€1
‰à1üyûËíÝqåNá$W‹Û 
ᆾ†¼:å5µCÄ?>FñÇ_;Ðkxy9‡77ðCH¯¿Öq´9Æé 轿@÷ ³W±_&É5x;nVFÀZïÏ“Ö ´®oý×ÇþF—wÇoSnÐêÒ¤¯3>•9î˜J_»ïÑÜ'4Vjõ6<;ÃTNypÉ–nídQ™¥4ŠÊpAã÷óíõÍrÁúÑ›Ë<‘ÏÅÂÂd³¹-Nщ‚hŸy´N¸Òí¦nâ¢Ì
ª¸µ¥ÈóHÇ`[qR—&¥Mff‰¼É·Rqª3´ ÂL[+'9zàøU³O F5­Rñ¾×FþKl‰4Ek[uE~Øk?ý´Oß& ‡ûp ÊbB@wåQ§kàšy8ëïõß’mP´™Z³˜©öÕõ5‹… Q±n0EùDÌL.V'Ég@ô# .k/ïÓ†4F›¿s}´ÖË wmé°®½ñÜÆD-È%ÓPP“Ä=•ÝTeÓÌÊœ ÝùöæÂ(’k[oí½õ)Ç'Ì¡‘Ö:ÝšÍÚ±Xt¢Á`0ŒèÝÆý¥¤Á=¡3‹ZX‘´1Gh? ;äÝyXÈG< ÞˆGÃ0^ÿÏxñ0î®Ç› ©P)æ¹×•Hû+rÅݳï³J—Ü.{“.]â>µ¥ÙbwqïÝæ˜œoæhÙòc:MKc0 Öƒ®Œÿ®ˆ¿oGd|t¾“ VìT–€Ó0CÃgXÍ'ʲû}É®¶“])ŒR,‘×¼|_ÔÑvÔNÊû{¾µ¬Fl{‚_é㋵^n]/æþRCúK YL
Ÿ|3#ߟ‚ŠWÖ‹~sû‘›R.3#Ë™u·³LñÚýG­854y•IcöøAØÊiŸ¹¤OˆíjR~uåV_ûKß(îÞ^<à„£ßÎ.j]uNßè©›óQv–R‘úáHÝ`,…«zéÛïâ½ãOû,ra]ÿ3âFÏ“ƒO߈‘H\endstream
endobj
248 0 obj
1010
endobj
249 0 obj<</Type/Page/Parent 182 0 R/Contents 250 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
250 0 obj<</Length 251 0 R/Filter/FlateDecode>>stream
xÚ•UQo›@ ~ϯðž–j…I“’·nm¤VªÔ­ìi¦ Éu—»”;†òïks švY"ˆ}öçÏŸÍó „¿!L#M ]>'ƒ³y á¹I޶ÉtêO ɆɊÆ-ù/©—0’Ÿ$Oè;†0tžÞ(Þ{:cЇíÁî™!ä¤0ÖgéªNvÅ,†+ VƒM!”å…×ä$…âje™P½9äZJ] µ¡r]¬™ZÍZ ±Q6,Ð GtŸ
É„ˆ F6l¢CiðçI/<‘AÆ,÷¬X»š=U®hÄ‹—êঠópÅÍï[n¡ÐÚB?¢àìŽmÏÂ8Žga<‹ÂYpŸüüDâƒ.#|ÍãdÇ£ƒúšF.³.%Š!v×÷m5±î!s¬Í‡›¶º$º3ä è©dÆœ¶56Ú6È¥­„”mî÷SWÌÆKÕäÇ\~8šøã7Ц¾ügÅu+‡t{sßWcÁŸKn,êÅ#G0k ±(-<qàM¹X ‹ÌfB
W/>¢,§´#
£Ž4lY¥1Yp|ÓNnw^HrÁ¡à†×ãBµâŠÿ©»À{è¿|¿ÀÎd¥‘³¬Àh§`4dZ}´ñ
éBSkÑ¡Áár—J ‘þ]ênšŽ¨–|aÊzú°`B¿¯ºA¸'’zÐÐ;zv¦W¬Èp£ˆ”I¢Å„ÉÞÙÈ»'&–¦Ü˜·–Û:økÁ¼!ÒÐó¦D'ÌAŒ¦3ˆ5aMÇ(Ô^Dn‰u%äØc¶GšÛóVÛí,§LÒ´NtV¦¼Xë„ LR©ÓC¿ß-&+¶%túÎí¢q £1¢ᆬټúv9OÀƒZÅ)ÿ2[ …YÃpÇTÉ$ÅñÜqoo¾ÑÆÓ1¾új{Ò×ÉàëàÐÝ*Fendstream
endobj
251 0 obj
709
endobj
252 0 obj<</Type/Page/Parent 182 0 R/Contents 253 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
253 0 obj<</Length 254 0 R/Filter/FlateDecode>>stream
xÚ-= „w~Å: …µcý`3Qû:biÅТãßWÔÜ-÷\žÈ>Èç©—Ž­ˆMÕB€9›H,dªG›c©ëÓ¾B囸ÒÁ ¬;ÛÛ!}°ÓýS»1ÝÿÉüoK™`^øNºÜukÎηPÖ™ôn‰ØÚ®'lendstream
endobj
254 0 obj
133
endobj
255 0 obj<</Type/Page/Parent 182 0 R/Contents 256 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 123 0 R>>endobj
256 0 obj<</Length 257 0 R/Filter/FlateDecode>>stream
xÚÕ[KsÛ8¾ûWð8{ˆB¼ø8:Îzj«&³™ØS{æÈ´ÃQÌP”]þ÷Ó
4D@ æ²b*•P
|¾ºèößW,Ëá?ËJž‰"ÛöWïî¯ÞÞÖ«³ûÇŒbó¢TðyÿðÓ}óǮ͆ÇìfØOí~:üëþÏ«ß_å›PðƒáǧŸ±‘¢‚a}&ÔFRc—Ýágýǧìí­ÊÃ)q\m¦û8¶Í¶ÅIæ9b# 3tÛ¬þ ò$
$Š+øì³’m5"DI"
ÔUð ¸{=LmŸ'qp{,7ÊŸ…äë¿ÏíøÜµ/ß&]²M½"ÒS¼2¶©`É•ÜÔòŠl2=`mï‡í±‡ífÔAFy ¬xø$'¼§vû*8åÑã¬*<ÇÀ&ü\ó}ÑiVU]au,Bç Ø,á\{øFJ(oÂ(ÎÈ>S5ìi†Ä„óqìöS·
Ã9}V+84‰ .uñ°D™oJä„–Ø0êâÛEÄž*¹¶üJÁÁ0eM•‚<Íç6¢™4#Qî$Ö‰¤í €nÃmââ‘ü„7€ìN Uº†³œRìÞü¤ ݈YFUä •B¸,¯€ØÈ ¨Ý~Þ»áéõÛ4*æsM¾]&è”J{‚Bï݈Ò) ãn»ÝÔŽ‡o“^E­:ÀI‘"8hH©ÐØéF”èŠÓmÇðNsq§±sx’Üû±{r,ò•m´(­Ú ç…¶SÚ)êï˼p^óÅ^˜à³tñ”P’^˜`ŠÍ€ CbÂywìvQãì À¢s´!.‰ ®Ù?D–7Ƙí+INPÿÙ¦f·‹þ6 UyÒ],÷X»ùýã]à¬_tªøA–µÐFÔXæÍe-—Ré`ÃDO{‘XÃ5”y ª˜í>Œ‘›ˆm8ŽÛ6¦Üy8ž ͳ4Úûî0ÝÇ©öŸÆ/t_
kÐnY[ LF­ zKX0èB;¯OíßÇnl{ûðõ’‹|Ea\ ÇœiE(JãZn†þK—23&þ5îcwÛÁBFLÄ¥¯ÞE‚F%Ì톸HÝŠÒ¨äf±}pAq¯rˆ¼)lœb¡ª;6Æú>u °»áqziÆÐCTu©û{J!pÍÔŽ‰apdZQ…HfüÔ§ã~ŸÐÆŒh|iåãÛ׆3À zSg`ÔÀÚ¨/öšR&Ü(/±xXòêûœ§…×>Î…'qµÈy
ãû0F®aÞuûf|étŽ'L ]0Û¡Zì</cüÊh0.ó\Ûu´æû¢`\æÌX{Æ-¼Ž™=|#%”T0naÀœýL³…/@ï3壑˜Ð~;¶Ç6ºÛÔ¼@YŸÿ4’؇fß<éP#i°K¿¡ÖñÃ/`=Ò>¸˜Æ²ZT•qBéÇ;G-áþëÍAbBÚ}iún}+OhøX©|8DA=\¼Bo•pò/¦tSJízJŒÄL#f˜…͆]?į®(8‰Õ‚««3Ø(„ûP$'¨ÃC÷ø†½Üxˆ¶ƒrQï(—JÅÕñH€YÈéȶb(ôb?ĹsÐPèš<lè`¡î&Ðk3>Ä41GM(0x>uà‹L´ Ðg<¯¾‚£|ÉÛØÿËç²<qBe9'òL#zBee¯¨ýðfD ”qœ‡OrÂKƒµ$GY"3*„œßfM#J¨Pßó6kÑÍÛ¬Or‚»Ù5‡CûüÍ&Y…»<ºÌ¢Æ«QV9§ûe;Å3T bÃ|tóW_g°yð8û¡$'¨÷ícsÜMñçù—1¥]š‹g;p'ëÚŽŽú¢
hc}^›ú ½Í÷E±>¯õN—ñHß‚ë€ÜC7ÒEq¾Ñ™i„ÄÅw$¾-˜NL{`$.§½OSå9w$_ã_.Æ U^™ZR/±Š–šxñ=¯¨Hä×vzÆ¿"áä /`õiVO9ÁÝ ûÇîé86áKu_>ÁáU‡p¼¨´+©ñ
Ã4b/jrTÃØF¬XK¹Íwñ ¨¥Æ£Tâm•+ª$ù¥ƒº&˜WÆD’IEC-ÓŠÒ ©hãÝ8¼Úð¦õZ¨`2A§
‰±•iE)ùLÜXÇöÊÖT7,QRÀÕY`i±‹³Â‹Ûa«Eg9/žäw×nc7ŠW†P+:VÉ•S%Ã2Pӊ*+~ï"ª5Õç¦H`Umìk Š6L¿¸`¥Þø gåêêwX"ÊJSÊ ½ŒiDY(©°áz·^~'“"¡6ò­¨%¡ «Ò>`tweñA¾¢\nA­( ŠŠ®Óçû×/ä¸ãr-T$)”³gødZQ
¥ð‘ý°ä úa8à”"—øÖoZQ8eÌ‘ƒŸÇáøåצì…ò²…²¬L,Q>Z—˜Vté̦§õ•X/>xíZEd‰lu]ÎÂu*W]ÛjÖTŠŠPkv†j„eû&TQ$Ôºb«E[©ôg"Â6b©’Æ’ö]ßn&0¥‡à•e%ñUjý%%y9>ö”yÂŽ–”òÕëßûçC¨$`«gU¼B@žªu¥\Z¬+)ë¦år.ÕuÁµL-+Ô% “º—geºÒÏþ¥
èçä•]·W`“¦ÛípÔµ®ëÏúX*wlmp?dæû¬¾æâŸÛ±^J™ Ä‰;šêª!òhx‡šÁTÄH¹1Þ±´3Ԥɔ‡Câµ^óPû†éá17·ËXvŠ%cù9 >-k2 <¿\ f¶ÕÛÛŠ¶Ä+*Sõéúö>{“a-hf«Ý²k¬ÙÀB©fÆCö¡Ù¢½ü7%×k鈳߮þr öendstream
endobj
257 0 obj
2239
endobj
258 0 obj<</Type/Page/Parent 182 0 R/Contents 259 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 133 0 R>>endobj
259 0 obj<</Length 260 0 R/Filter/FlateDecode>>stream
xÚÍ”MSƒ0@ïüŠ=ê¡i6”@޵Š'g´Å³ƒmZqøPÀñï»ÁU¡3-½Y`v&³Ù·IÞ„wAÒ‹àk÷­ ï*ñ¦±4lµ/è0 ˜l.’ô9·PmaQ•­-Ûæ2yõnO
IÐ…å-±„íGTW@ÃV®Ã^A½ƒi<Dד–¡}Ã
_,ìÑÀR Ø„óŒJ×kÛ4Oyµ;LìC©|1"&03Îrë`$ÉÛÁ€N•fˆ~ÐŒ(RÅEÝà "'Féµ0× ¹œî8¶®«ú¸’€Œ áÇy=¢C“°³"„’#JEô«¤U‚Šfœ&…É&Ú'sšIoéÎŽX‰z8gEyœgÞQ/ÑÙxA·Æiñ(¢Ë2ü¾é×ËyœÀ÷+XUÛö3­-Ì7EVfM[§mU7p—–iî(T3*œ„ªÛ\–ñI>x_ÏÞ#wendstream
endobj
260 0 obj
357
endobj
261 0 obj<</Count 7/First 262 0 R/Last 303 0 R>>endobj
262 0 obj<</Parent 261 0 R/Title(Table of Contents)/Dest[255 0 R/XYZ null 756 null]/Next 263 0 R>>endobj
263 0 obj<</Parent 261 0 R/Count -2/First 264 0 R/Last 265 0 R/Title(Preface)/Dest[189 0 R/XYZ null 743 null]/Prev 262 0 R/Next 266 0 R>>endobj
264 0 obj<</Parent 263 0 R/Title(System Overview)/Dest[189 0 R/XYZ null 371 null]/Next 265 0 R>>endobj
265 0 obj<</Parent 263 0 R/Title(Document Overview)/Dest[192 0 R/XYZ null 736 null]/Prev 264 0 R>>endobj
266 0 obj<</Parent 261 0 R/Count -4/First 267 0 R/Last 270 0 R/Title(1 - Printing System Overview)/Dest[195 0 R/XYZ null 743 null]/Prev 263 0 R/Next 271 0 R>>endobj
267 0 obj<</Parent 266 0 R/Title(The Printing Problem)/Dest[195 0 R/XYZ null 371 null]/Next 268 0 R>>endobj
268 0 obj<</Parent 266 0 R/Title(The Technology)/Dest[198 0 R/XYZ null 736 null]/Prev 267 0 R/Next 269 0 R>>endobj
269 0 obj<</Parent 266 0 R/Title(Filters)/Dest[198 0 R/XYZ null 478 null]/Prev 268 0 R/Next 270 0 R>>endobj
270 0 obj<</Parent 266 0 R/Title(Printer Drivers)/Dest[198 0 R/XYZ null 267 null]/Prev 269 0 R>>endobj
271 0 obj<</Parent 261 0 R/Count -2/First 272 0 R/Last 277 0 R/Title(2 - Building and Installing CUPS)/Dest[201 0 R/XYZ null 743 null]/Prev 266 0 R/Next 278 0 R>>endobj
272 0 obj<</Parent 271 0 R/Count -4/First 273 0 R/Last 276 0 R/Title(Installing a Source Distribution)/Dest[201 0 R/XYZ null 358 null]/Next 277 0 R>>endobj
273 0 obj<</Parent 272 0 R/Title(Requirements)/Dest[201 0 R/XYZ null 296 null]/Next 274 0 R>>endobj
274 0 obj<</Parent 272 0 R/Title(Compiling CUPS)/Dest[204 0 R/XYZ null 641 null]/Prev 273 0 R/Next 275 0 R>>endobj
275 0 obj<</Parent 272 0 R/Title(Installing the Software)/Dest[204 0 R/XYZ null 226 null]/Prev 274 0 R/Next 276 0 R>>endobj
276 0 obj<</Parent 272 0 R/Title(Running the Software)/Dest[207 0 R/XYZ null 729 null]/Prev 275 0 R>>endobj
277 0 obj<</Parent 271 0 R/Title(Installing a Binary Distribution)/Dest[207 0 R/XYZ null 668 null]/Prev 272 0 R>>endobj
278 0 obj<</Parent 261 0 R/Count -5/First 279 0 R/Last 284 0 R/Title(3 - Printer Queue Management)/Dest[213 0 R/XYZ null 743 null]/Prev 271 0 R/Next 285 0 R>>endobj
279 0 obj<</Parent 278 0 R/Title(The lpadmin Command)/Dest[213 0 R/XYZ null 371 null]/Next 280 0 R>>endobj
280 0 obj<</Parent 278 0 R/Count -1/First 281 0 R/Last 281 0 R/Title(Adding and Modifying Printers)/Dest[213 0 R/XYZ null 266 null]/Prev 279 0 R/Next 282 0 R>>endobj
281 0 obj<</Parent 280 0 R/Title(Using Standard Printer Drivers)/Dest[216 0 R/XYZ null 214 null]>>endobj
282 0 obj<</Parent 278 0 R/Title(Removing Printers)/Dest[219 0 R/XYZ null 698 null]/Prev 280 0 R/Next 283 0 R>>endobj
283 0 obj<</Parent 278 0 R/Title(Printer Classes)/Dest[219 0 R/XYZ null 595 null]/Prev 282 0 R/Next 284 0 R>>endobj
284 0 obj<</Parent 278 0 R/Title(Setting the Default Printer)/Dest[219 0 R/XYZ null 388 null]/Prev 283 0 R>>endobj
285 0 obj<</Parent 261 0 R/Count -3/First 286 0 R/Last 300 0 R/Title(4 - Printing System Management)/Dest[225 0 R/XYZ null 743 null]/Prev 278 0 R/Next 303 0 R>>endobj
286 0 obj<</Parent 285 0 R/Count -4/First 287 0 R/Last 290 0 R/Title(Network Configuration)/Dest[225 0 R/XYZ null 371 null]/Next 291 0 R>>endobj
287 0 obj<</Parent 286 0 R/Title(Port)/Dest[225 0 R/XYZ null 233 null]/Next 288 0 R>>endobj
288 0 obj<</Parent 286 0 R/Title(Listen)/Dest[225 0 R/XYZ null 134 null]/Prev 287 0 R/Next 289 0 R>>endobj
289 0 obj<</Parent 286 0 R/Title(BrowsePort)/Dest[228 0 R/XYZ null 613 null]/Prev 288 0 R/Next 290 0 R>>endobj
290 0 obj<</Parent 286 0 R/Title(BrowseAddress)/Dest[228 0 R/XYZ null 474 null]/Prev 289 0 R>>endobj
291 0 obj<</Parent 285 0 R/Count -8/First 292 0 R/Last 299 0 R/Title(Printer Security)/Dest[228 0 R/XYZ null 316 null]/Prev 286 0 R/Next 300 0 R>>endobj
292 0 obj<</Parent 291 0 R/Title(Location)/Dest[228 0 R/XYZ null 231 null]/Next 293 0 R>>endobj
293 0 obj<</Parent 291 0 R/Title(Order)/Dest[231 0 R/XYZ null 575 null]/Prev 292 0 R/Next 294 0 R>>endobj
294 0 obj<</Parent 291 0 R/Title(Allow)/Dest[231 0 R/XYZ null 411 null]/Prev 293 0 R/Next 295 0 R>>endobj
295 0 obj<</Parent 291 0 R/Title(Deny)/Dest[234 0 R/XYZ null 729 null]/Prev 294 0 R/Next 296 0 R>>endobj
296 0 obj<</Parent 291 0 R/Title(AuthType)/Dest[234 0 R/XYZ null 459 null]/Prev 295 0 R/Next 297 0 R>>endobj
297 0 obj<</Parent 291 0 R/Title(AuthClass)/Dest[234 0 R/XYZ null 308 null]/Prev 296 0 R/Next 298 0 R>>endobj
298 0 obj<</Parent 291 0 R/Title(AuthGroupName)/Dest[237 0 R/XYZ null 729 null]/Prev 297 0 R/Next 299 0 R>>endobj
299 0 obj<</Parent 291 0 R/Title(SystemGroup)/Dest[237 0 R/XYZ null 646 null]/Prev 298 0 R>>endobj
300 0 obj<</Parent 285 0 R/Count -2/First 301 0 R/Last 302 0 R/Title(File Formats)/Dest[237 0 R/XYZ null 567 null]/Prev 291 0 R>>endobj
301 0 obj<</Parent 300 0 R/Title(mime.types)/Dest[237 0 R/XYZ null 456 null]/Next 302 0 R>>endobj
302 0 obj<</Parent 300 0 R/Title(mime.convs)/Dest[240 0 R/XYZ null 650 null]/Prev 301 0 R>>endobj
303 0 obj<</Parent 261 0 R/Count -4/First 304 0 R/Last 307 0 R/Title(5 - Printer Accounting)/Dest[243 0 R/XYZ null 743 null]/Prev 285 0 R>>endobj
304 0 obj<</Parent 303 0 R/Title(Where to Find the Log Files)/Dest[243 0 R/XYZ null 384 null]/Next 305 0 R>>endobj
305 0 obj<</Parent 303 0 R/Title(The access_log File)/Dest[243 0 R/XYZ null 292 null]/Prev 304 0 R/Next 306 0 R>>endobj
306 0 obj<</Parent 303 0 R/Title(The error_log File)/Dest[246 0 R/XYZ null 461 null]/Prev 305 0 R/Next 307 0 R>>endobj
307 0 obj<</Parent 303 0 R/Title(The page_log File)/Dest[249 0 R/XYZ null 736 null]/Prev 306 0 R>>endobj
308 0 obj<</Type/Catalog/Pages 182 0 R/Names 134 0 R/ViewerPreferences<</PageLayout/TwoColumnRight>>/Outlines 261 0 R/PageMode/UseOutlines/OpenAction[189 0 R/XYZ null null null]>>endobj
xref
0 309
0000000000 65535 f
0000000015 00000 n
0000000227 00000 n
0000000288 00000 n
0000000362 00000 n
0000000444 00000 n
0000000522 00000 n
0000000599 00000 n
0000000678 00000 n
0000000754 00000 n
0000000835 00000 n
0000000894 00000 n
0000000999 00000 n
0000001104 00000 n
0000001209 00000 n
0000001314 00000 n
0000001379 00000 n
0000001464 00000 n
0000001516 00000 n
0000001574 00000 n
0000001658 00000 n
0000001718 00000 n
0000001802 00000 n
0000001833 00000 n
0000001937 00000 n
0000002042 00000 n
0000002147 00000 n
0000002252 00000 n
0000002357 00000 n
0000002460 00000 n
0000002563 00000 n
0000002667 00000 n
0000002772 00000 n
0000002877 00000 n
0000002982 00000 n
0000003087 00000 n
0000003192 00000 n
0000003297 00000 n
0000003402 00000 n
0000003507 00000 n
0000003612 00000 n
0000003717 00000 n
0000003820 00000 n
0000003923 00000 n
0000004027 00000 n
0000004132 00000 n
0000004237 00000 n
0000004342 00000 n
0000004447 00000 n
0000004552 00000 n
0000004657 00000 n
0000004762 00000 n
0000004867 00000 n
0000004972 00000 n
0000005077 00000 n
0000005182 00000 n
0000005287 00000 n
0000005392 00000 n
0000005497 00000 n
0000005602 00000 n
0000005707 00000 n
0000005812 00000 n
0000005917 00000 n
0000006022 00000 n
0000006127 00000 n
0000006230 00000 n
0000006333 00000 n
0000006437 00000 n
0000006542 00000 n
0000006647 00000 n
0000006752 00000 n
0000006857 00000 n
0000006962 00000 n
0000007067 00000 n
0000007172 00000 n
0000007277 00000 n
0000007382 00000 n
0000007487 00000 n
0000007592 00000 n
0000007697 00000 n
0000007802 00000 n
0000007907 00000 n
0000008012 00000 n
0000008117 00000 n
0000008222 00000 n
0000008327 00000 n
0000008432 00000 n
0000008537 00000 n
0000008642 00000 n
0000008745 00000 n
0000008848 00000 n
0000008952 00000 n
0000009057 00000 n
0000009162 00000 n
0000009267 00000 n
0000009372 00000 n
0000009477 00000 n
0000009582 00000 n
0000009687 00000 n
0000009792 00000 n
0000009897 00000 n
0000010003 00000 n
0000010109 00000 n
0000010215 00000 n
0000010321 00000 n
0000010427 00000 n
0000010533 00000 n
0000010639 00000 n
0000010745 00000 n
0000010851 00000 n
0000010957 00000 n
0000011063 00000 n
0000011169 00000 n
0000011275 00000 n
0000011377 00000 n
0000011479 00000 n
0000011582 00000 n
0000011686 00000 n
0000011790 00000 n
0000011894 00000 n
0000011998 00000 n
0000012102 00000 n
0000012206 00000 n
0000012310 00000 n
0000013051 00000 n
0000013155 00000 n
0000013260 00000 n
0000013366 00000 n
0000013470 00000 n
0000013575 00000 n
0000013681 00000 n
0000013785 00000 n
0000013890 00000 n
0000013996 00000 n
0000014086 00000 n
0000014120 00000 n
0000014154 00000 n
0000014771 00000 n
0000014820 00000 n
0000014869 00000 n
0000014918 00000 n
0000014967 00000 n
0000015016 00000 n
0000015065 00000 n
0000015114 00000 n
0000015163 00000 n
0000015212 00000 n
0000015261 00000 n
0000015310 00000 n
0000015359 00000 n
0000015408 00000 n
0000015457 00000 n
0000015506 00000 n
0000015555 00000 n
0000015604 00000 n
0000015653 00000 n
0000015702 00000 n
0000015751 00000 n
0000015800 00000 n
0000015849 00000 n
0000015898 00000 n
0000015947 00000 n
0000015996 00000 n
0000016045 00000 n
0000016094 00000 n
0000016143 00000 n
0000016192 00000 n
0000016241 00000 n
0000016290 00000 n
0000016339 00000 n
0000016388 00000 n
0000016437 00000 n
0000016486 00000 n
0000016535 00000 n
0000016584 00000 n
0000016633 00000 n
0000016682 00000 n
0000016731 00000 n
0000016780 00000 n
0000016829 00000 n
0000016878 00000 n
0000016927 00000 n
0000016976 00000 n
0000017253 00000 n
0000017405 00000 n
0000023797 00000 n
0000023819 00000 n
0000023932 00000 n
0000024034 00000 n
0000024054 00000 n
0000024185 00000 n
0000024954 00000 n
0000024975 00000 n
0000025116 00000 n
0000025494 00000 n
0000025515 00000 n
0000025655 00000 n
0000026569 00000 n
0000026590 00000 n
0000026730 00000 n
0000028121 00000 n
0000028143 00000 n
0000028297 00000 n
0000029199 00000 n
0000029220 00000 n
0000029374 00000 n
0000030301 00000 n
0000030322 00000 n
0000030471 00000 n
0000031182 00000 n
0000031203 00000 n
0000031316 00000 n
0000031518 00000 n
0000031539 00000 n
0000031697 00000 n
0000032447 00000 n
0000032468 00000 n
0000032626 00000 n
0000033678 00000 n
0000033699 00000 n
0000033857 00000 n
0000034654 00000 n
0000034675 00000 n
0000034788 00000 n
0000035000 00000 n
0000035021 00000 n
-852
Ver Arquivo
@@ -1,852 +0,0 @@
<HTML>
<HEAD>
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.0">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>DRAFT - CUPS Software Administrators Manual</TITLE>
</HEAD>
<BODY>
<H1 ALIGN=RIGHT>Preface</H1>
This software administrators manual provides printer administration
information for the Common UNIX Printing System ("CUPS") Version 1.0.0.
<H2>System Overview</H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
and users. CUPS provides the System V and Berkeley command-line interfaces.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis
for managing print jobs and queues. The Line Printer Daemon (LPD,
RFC1179), Server Message Block (SMB), and AppSocket protocols are also
supported with reduced functionality.
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real
world applications under UNIX.
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers.
<H2>Document Overview</H2>
<P>This software administrators manual is organized into the following sections:</P>
<UL>
<LI>1 - Printing System Overview</LI>
<LI>2 - Building and Installing CUPS</LI>
<LI>3 - Printer Queue Management</LI>
<LI>4 - Printing System Management</LI>
<LI>5 - Printer Accounting</LI>
</UL>
<H1 ALIGN=RIGHT>1 - Printing System Overview</H1>
<P>This chapter provides an overview of how the Common UNIX Printing System
works.
<H2>The Printing Problem</H2>
<P>For years <I>the printing problem</I> has plagued UNIX&reg;. Unlike
Microsoft&reg; Windows&reg; or MacOS, UNIX has no standard interface or
system in place for supporting printers. Among the solutions previously
available, the Berkeley and System V printing systems are the most
prevalent.
<P>These printing systems support line printers (text only) or
PostScript printers (text and graphics), and with some coaxing they can
be made to support a full range of printers and file formats. However,
because each varient of the UNIX operating system uses a different
printing system than the next, developing printer drivers for a wide
range of printers is extremely difficult. That combined with the
limited volume of customers for each UNIX varient has forced most
printer vendors to give up supporting UNIX entirely.
<P>The Common UNIX Printing System, or CUPS, is designed to eliminate
<I>the printing problem</I>. One common printing system can be used by
all UNIX varients to support the printing needs of users. Printer
vendors can use its modular filter interface to develop a single driver
program that supports a wide range of file formats with little or no
effort. Since CUPS provides both the System V and Berkeley printing
commands, users (and applications) can reap the benefits of this new
technology with no changes.
<H2>The Technology</H2>
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
and printer server manufacturers, and will be supported by the next
Microsoft Windows operating system.
<P>IPP defines a standard protocol for printing as well as managing print
jobs and printer options like media size, resolution, and so forth. Like all
IP-based protocols, IPP can be used locally or over the Internet to printers
hundreds or thousands of miles away. Unlike other protocols, however, IPP
also supports access control, authentication, and encryption, making it a
much more secure printing solution than older ones.
<P>IPP is layered on top of the Hyper-Text Transport Protocol, or HTTP,
which is the basis of web servers on the Internet. This allows the user to
view documentation and status information on a printer or server using their
web browser.
<P>CUPS provides a complete IPP/1.0-based printing system that provides Basic
authentication and domain or IP-based access control. Digest authentication
and TLS encryption will be available in future versions of CUPS.
<H2>Filters</H2>
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
different formats that the printer can understand. Others perform page
selection and ordering tasks. <I>Backend</I> filters perform the most
important task of all - they send the filtered print data to the
printer.
<P>CUPS provides filters for printing many types of image files,
HP-GL/2 files, PDF files, and text files. CUPS also supplies
PostScript and image file Raster Image Processors, or RIPs, that
convert PostScript or image files into bitmaps that can be sent to a
raster printer.
<P>CUPS provides backends for printing over parallel and serial ports,
and over the network via the JetDirect (AppSocket), Server Message
Block, and Line Printer Daemon protocols.
<H2>Printer Drivers</H2>
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes a sample printer driver for Hewlett-Packard
LaserJet and DeskJet printers. While this driver does not generate
optimal output for different printer models, it does demonstrate how
you can write your own printer drivers and incorporate them into CUPS.
<H1 ALIGN=RIGHT>2 - Building and Installing CUPS</H1>
<P>This chapter shows how to build and install the Common UNIX Printing System.
If you are installing a binary distribution from the CUPS web site, proceed to
the section titled, <A HREF="#binary">Installing a Binary Distribution</A>.
<H2>Installing a Source Distribution</H2>
<H3>Requirements</H3>
<P>You'll need an ANSI C compiler to build CUPS on your system. As its name
implies, CUPS is designed to run on the UNIX operating system, however
the CUPS interface library and most of the filters and backends supplied
with CUPS should also run under Microsoft&reg; Windows&reg;.
<P>For the image file filters and PostScript RIP, you'll need the JPEG,
PNG, TIFF, and ZLIB libraries. CUPS will build without these, but with
reduced functionality. Easy Software Products maintains a mirror of the
current versions of these libraries at:
<UL><PRE>
<A HREF="ftp://ftp.easysw.com/pub/libraries">ftp://ftp.easysw.com/pub/libraries</A>
</PRE></UL>
<P>If you make changes to the man pages you'll need GNU groff or another
nroff-like package. GNU groff is available from:
<UL><PRE>
<A HREF="ftp://ftp.gnu.org/pub/groff">ftp://ftp.gnu.org/pub/groff</A>
</PRE></UL>
<P>The documentation is formatted using the HTMLDOC software. If you need to
make changes you can get the HTMLDOC software from:
<UL><PRE>
<A HREF="http://www.easysw.com/htmldoc">http://www.easysw.com/htmldoc</A>
</PRE></UL>
<H3>Compiling CUPS</H3>
<P>CUPS uses GNU autoconf to configure the makefiles and source code
for your system. To configure CUPS for your system type:
<UL><PRE>
% ./configure ENTER
</PRE></UL>
<P>The default installation will put the CUPS software in the
<CODE>/usr</CODE> and <CODE>/var</CODE> directories on your system,
which will overwrite any existing printing commands on your system. To
install the CUPS software in another location use the
<CODE>--prefix</CODE> option:
<UL><PRE>
% ./configure --prefix=/usr/local ENTER
</PRE></UL>
<P>If the PNG, JPEG, TIFF, and ZLIB libraries are not installed in a
system default location (typically <CODE>/usr/include</CODE> and
<CODE>/usr/lib</CODE>) you'll need to set the <CODE>CFLAGS</CODE> and
<CODE>LDFLAGS</CODE> environment variables prior to running configure:
<UL><PRE>
% setenv CFLAGS "-I/some/directory"
% setenv LDFLAGS "-L/some/directory"
% ./configure ... ENTER
</PRE></UL>
<P>Once you have configured things, just type:
<UL><PRE>
% make ENTER
</PRE></UL>
<P>to build the software.
<H3>Installing the Software</H3>
<P>To install the software type:
<UL><PRE>
% make install ENTER
</PRE></UL>
<H3>Running the Software</A></H3>
Once you have installed the software you can start the CUPS daemon by
typing:
<UL><PRE>
% /usr/sbin/cupsd &amp; ENTER
</PRE></UL>
<H2><A NAME="binary">Installing a Binary Distribution</A></H2>
<P>We are currently distributing CUPS binary distributions in TAR format
with installation and removal scripts.
<UL>
<B>WARNING:</B>
<P>Installing CUPS will overwrite your existing printing
system. If you experience difficulties with the CUPS software
and need to go back to your old printing system, you will need
to remove the CUPS software with the provided script and
reinstall the printing system from your operating system CDs.
</UL>
<P>To install the CUPS software you will need to be logged in as root
(doing an "su" is good enough). Once you are the root user, run the
installation script with:
<UL><PRE>
./cups.install ENTER
</PRE></UL>
<P>After asking you a few yes/no questions the CUPS software will be
installed and the scheduler will be started automatically.
<H1 ALIGN=RIGHT>3 - Printer Queue Management</H1>
<P>This chapter discusses how to add, modify, and delete print queues
on your system.
<H2>The lpadmin Command</H2>
<P>The <CODE>lpadmin</CODE> command allows you to perform most printer
administration tasks from the command-line. Since <CODE>lpadmin</CODE>
is also a System V printing system command, it is located in the
<CODE>/usr/lib</CODE> directory instead of a more common one like
<CODE>/usr/bin</CODE> or <CODE>/usr/sbin</CODE>.
<H2>Adding and Modifying Printers</H2>
<P>To add a printer to CUPS you simply run the <CODE>lpadmin</CODE> command
with the "-p" option:
<UL><PRE>
% /usr/lib/lpadmin -p<I>printer</I> -v<I>device</I> -P<I>ppd</I> ENTER
</PRE></UL>
<P>Spaces between the option letter and value are optional.
<P>The <I>printer</I> name can be up to 127 letters, digits, hyphens,
and underscores. Unlike other printing systems, the printer name in
CUPS is <I>not</I> case-sensitive, so you can't add two printers named
<CODE>LaserJet</CODE> and <CODE>laserjet</CODE>.
<P>The <I>device</I> argument specifies the device URI or filename for the
printer. The following devices are supported in a basic installation of
CUPS:
<DL>
<DT>file:/dev/filename
<DT>/dev/filename
<DD>Sends all output to the specified file.
<DT>ipp://hostname[:port]/resource
<DD>Sends all output to the specified IPP printer or server.
The <I>port</I> parameters defaults to 631.
<DT>lpd://hostname/queue
<DD>Sends all output to the specified LPD printer queue.
<DT>parallel:/dev/filename
<DD>Sends all output to the specified parallel port device.
<DT>serial:/dev/filename[?options]
<DD>Sends all output to the specified serial port device. The
<I>options</I> can be any of the following separated by the
plus (+) character:
<UL>
<LI><CODE>baud=<I>rate</I></CODE> - Sets the baud rate
for the device.
<LI><CODE>bits=<I>7 or 8</I></CODE> - Sets the number
of data bits.
<LI><CODE>parity=<I>even</I></CODE> - Sets even parity
checking.
<LI><CODE>parity=<I>odd</I></CODE> - Sets odd parity
checking.
<LI><CODE>parity=<I>none</I></CODE> - Turns parity
checking off.
</UL>
<DT>socket://hostname[:port]
<DD>Sends all output to the specified printer using the
AppSocket protocol. The <I>port</I> parameter defaults to 9100.
</DL>
<P>The <I>ppd</I> argument specifies the PostScript Printer Description file
to use for this printer. Many options (such as media size, etc.) will not
be available if you omit this part of the <CODE>lpadmin</CODE> command.
<H3>Using Standard Printer Drivers</H2>
<P>The <CODE>lpadmin</CODE> command allows you to use "standard" PPD files
and interface scripts located in the <CODE>/usr/share/cups/model</CODE>
directory with the "-m" option:
<UL><PRE>
% /usr/lib/lpadmin -p<I>printer</I> -v<I>device</I> -m<I>model</I> ENTER
</PRE></UL>
<P>The <I>model</I> argument specifies the name of the PPD file or interface
script. For example, to add a printer using the sample HP DeskJet series
driver connected to parallel port 1 under Linux you would use:
<UL><PRE>
% /usr/lib/lpadmin -pDeskJet -vparallel:/dev/par1 -mdeskjet.ppd ENTER
</PRE></UL>
<H2>Removing Printers</H2>
<P>To remove a printer to CUPS you simply run the <CODE>lpadmin</CODE> command
with the "-x" option:
<UL><PRE>
% /usr/lib/lpadmin -x<I>printer</I> ENTER
</PRE></UL>
<H2>Printer Classes</H2>
<P>CUPS allows you to group similar printers in a <I>printer class</I>. When
a user sends a print job to a class, the job will be processed by the first
available printer in that class.
<P>To add a printer to a class you simply run the <CODE>lpadmin</CODE> command
with the "-p" and "-c" options:
<UL><PRE>
% /usr/lib/lpadmin -p<I>printer</I> -c<I>class</I> ENTER
</PRE></UL>
<P>The <I>class</I> is created automatically if it doesn't exist. To remove a
class just use the "-x" option:
<UL><PRE>
% /usr/lib/lpadmin -x<I>class</I> ENTER
</PRE></UL>
<H2>Setting the Default Printer</H2>
<P>To set the default printer or class simply run the <CODE>lpadmin</CODE>
command with the "-d" option:
<UL><PRE>
% /usr/lib/lpadmin -d<I>destination</I> ENTER
</PRE></UL>
<P>The <I>destination</I> argument is the name of the printer or class.
<H1 ALIGN=RIGHT>4 - Printing System Management</H1>
<P>This chapter shows how you can configure the CUPS server.
<H2>Network Configuration</H2>
<P>The default configuration of the CUPS server listens for connections from
all network interfaces on port 631 (the standard IPP port). Administration
functions are limited to local connections with the appropriate username and
password.
<P>If you'd like to limit access to your system you'll need to edit the
<CODE>/var/cups/conf/cupsd.conf</CODE> file.
<H3>Port</H3>
<P>The <CODE>Port</CODE> directive specifies a port to listen on for
all interfaces. Besides the standard IPP port (631) you can also setup
your server to listen on the HTTP port (80) to use your CUPS server as
a standard web server as well.
<H3>Listen</H3>
<P>The <CODE>Listen</CODE> directive specifies a listening address and port,
extending the functionality of the <CODE>Port</CODE> directive. If you want
to allow connections only from the local machine you can use:
<UL><PRE>
Listen 127.0.0.1:631
</PRE></UL>
<P>instead of the <CODE>Port</CODE> directive.
<P>If you want to limit access to a specific network/subnet, make sure you
specify only the network address and not your system's network address!
<H3>BrowsePort</H3>
<P>The <CODE>BrowsePort</CODE> directive controls which port is monitored for
remote printers. By default it is set to the IPP port (631), however you can
change it as needed.
<UL>
<B>NOTE:</B>
<P>You must set the <CODE>BrowsePort</CODE> to the same value
on all of the systems that you want to see.
</UL>
<H3>BrowseAddress</H3>
<P>The <CODE>BrowseAddress</CODE> directive specifies a broadcast address to
use when sending printer status updates over the network. The default
browse address is <CODE>255.255.255.255</CODE> which will send printer
information to all subnets.
<UL>
<B>NOTE:</B>
<P>If you are using HP-UX 10.20 and a subnet that is not 24,
16, or 8 bits, printer browsing (and in fact all broadcast
reception) will not work. This problem appears to be fixed in
HP-UX 11.0.
</UL>
<H2>Printer Security</H2>
<P>CUPS provides IP and domain-name based access control and Basic
authentication for authentication.
<H3>Location</H3>
<P>The <CODE>Location</CODE> directive defines access control for a
specific HTTP directory. The following pseudo directories are provided
by the CUPS server:
<UL>
<LI><CODE>/admin</CODE> - This is the URI that must be referenced to
do printer administation commands.
<LI><CODE>/classes</CODE> - This is the URI that must be referenced to
access printer classes.
<LI><CODE>/jobs</CODE> - This is the URI that must be referenced to
access jobs.
<LI><CODE>/printers</CODE> - This is the URI that must be referenced to
access printers.
</UL>
<P>All other directories are taken from the
<CODE>/usr/share/cups/doc</CODE> directory.
<P>The <CODE>Location</CODE> directive surrounds the other access control
directives described below. The default server configuration uses:
<UL><PRE>
&lt;Location /admin&gt;
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
&lt;/Location&gt;
</PRE></UL>
<H3>Order</H3>
<P>The <CODE>Order</CODE> directive defines the default access control.
The following values are supported:
<UL>
<LI><CODE>Order Allow,Deny</CODE> - Allow requests from all
systems <I>except</I> for those listed in a <CODE>Deny</CODE>
directive.
<LI><CODE>Order Deny,Allow</CODE> - Allow requests only from
those listed in an <CODE>Allow</CODE> directive.
</UL>
<P>The <CODE>Order</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>Allow</H3>
<P>The <CODE>Allow</CODE> directive specifies a hostname, IP address, or
network that is allowed access to the server:
<UL><PRE>
Allow from All
Allow from None
Allow from *.domain.com
Allow from .domain.com
Allow from host.domain.com
Allow from nnn.*
Allow from nnn.nnn.*
Allow from nnn.nnn.nnn.*
Allow from nnn.nnn.nnn.nnn
Allow from nnn.nnn.nnn.nnn/mm
Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE></UL>
<P><CODE>Allow</CODE> directives are cummulative, so multiple <CODE>Allow</CODE>
directives can be used to allow access for multiple hosts or networks.
<P>The <CODE>Allow</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>Deny</H3>
<P>The <CODE>Deny</CODE> directive specifies a hostname, IP address, or
network that is allowed access to the server:
<UL><PRE>
Deny from All
Deny from None
Deny from *.domain.com
Deny from .domain.com
Deny from host.domain.com
Deny from nnn.*
Deny from nnn.nnn.*
Deny from nnn.nnn.nnn.*
Deny from nnn.nnn.nnn.nnn
Deny from nnn.nnn.nnn.nnn/mm
Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</PRE></UL>
<P><CODE>Deny</CODE> directives are cummulative, so multiple <CODE>Deny</CODE>
directives can be used to allow access for multiple hosts or networks.
<P>The <CODE>Deny</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>AuthType</H3>
<P>The <CODE>AuthType</CODE> directive defines the type of authentication to
perform:
<UL>
<LI><CODE>None</CODE> - No authentication should be performed
(default.)
<LI><CODE>Basic</CODE> - Basic authentication should be
performed using the UNIX password and group files.
</UL>
<P>The <CODE>AuthType</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>AuthClass</H3>
<P>The <CODE>AuthClass</CODE> directive defines what level of <CODE>Basic</CODE>
access is required:
<UL>
<LI><CODE>Anonymous</CODE> - No authentication should be performed
(default.)
<LI><CODE>User</CODE> - A valid username and password is required.
<LI><CODE>System</CODE> - A valid username and password is
required, and the username must belong to the "sys" group (this
can be changed using the <CODE>SystemGroup</CODE> directive,
below.
<LI><CODE>Group</CODE> - A valid username and password is
required, and the username must belong to the group named by
the <CODE>AuthGroupName</CODE> directive.
</UL>
<P>The <CODE>AuthClass</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>AuthGroupName</H3>
<P>The <CODE>AuthGroupName</CODE> directive sets the group to use for
<CODE>Group</CODE> authentication.
<P>The <CODE>AuthGroupName</CODE> directive must appear inside a
<CODE>Location</CODE> directive.
<H3>SystemGroup</H3>
<P>The <CODE>SystemGroup</CODE> directive sets the administration group used
when authenticating the <CODE>System</CODE> type. It defaults to the "sys"
group.
<H2>File Formats</H2>
<P>CUPS provides a MIME-based file typing and filtering mechanism to
convert files to a printable format for each printer. The
<CODE>mime.types</CODE> and <CODE>mime.convs</CODE> files define the
file type and filters that are available on the system.
<H3>mime.types</H3>
<P>The <CODE>mime.types</CODE> defines the known file types. Each line
of the file starts with the MIME type and may be followed by one or
more file type recognition rules. For example, the
<CODE>text/html</CODE> file type is defined as:
<UL><PRE>
text/html html htm \
printable(0,1024) + (string(0,"&lt;HTML&gt;") string(0,"&lt;!DOCTYPE"))
</PRE></UL>
<P>The first two rules say that any file with an extension of ".html" or
".htm" is a HTML file. The third rules says that any file whose first
1024 characters are printable text and starts with the strings "&lt;HTML&gt;"
or "&lt;!DOCTYPE" is a HTML file as well.
<P>The first two rules deal solely with the name of the file being
typed. This is useful when the original filename is known, however for
print files the server doesn't always have a filename to work with. The
third rule takes care of this possibility and automatically figures out
the file type based upon the contents of the file instead.
<P>The available tests are:
<UL>
<LI><CODE>( expr )</CODE> - Parenthesis for expression grouping
<LI><CODE>+</CODE> - Logical AND
<LI><CODE>,</CODE> or whitespace - Logical OR
<LI><CODE>!</CODE> - Logical NOT
<LI><CODE>match("pattern")</CODE> - Pattern match on filename
<LI><CODE>extension</CODE> - Pattern match on "*.extension"
<LI><CODE>ascii(offset,length)</CODE> - True if bytes are valid
printable ASCII (CR, NL, TAB, BS, 32-126)
<LI><CODE>printable(offset,length)</CODE> - True if bytes are
printable 8-bit chars (CR, NL, TAB, BS, 32-126, 160-254)
<LI><CODE>string(offset,"string")</CODE> - True if bytes are
identical to string
<LI><CODE>char(offset,value)</CODE> - True if byte is identical
<LI><CODE>short(offset,value)</CODE> - True if 16-bit integer
is identical (network or "big-endian" byte order)
<LI><CODE>int(offset,value)</CODE> - True if 32-bit integer is
identical (network or "big-endian" byte order)
<LI><CODE>locale("string")</CODE> - True if current locale
matches string
</UL>
<H3>mime.convs</H3>
<P>The <CODE>mime.convs</CODE> file defines all of the filter programs that
are known to the system. Each line consists of:
<UL><PRE>
source destination cost program
text/plain application/postscript 50 texttops
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
image/* application/vnd.cups-postscript 50 imagetops
image/* application/vnd.cups-raster 50 imagetoraster
</PRE></UL>
<P>The <I>source</I> field is a MIME type, optionally using a wildcard for
the super-type or sub-type (e.g. "text/plain", "image/*", "*/postscript").
<P>The <I>destination</I> field is a MIME type defined in the
<CODE>mime.types</CODE> file.
<P>The <I>cost</I> field defines a relative cost for the filtering
operation from 1 to 100. The cost is used to choose between two
different sets of filters when converting a file. For example, to convert
from <CODE>image/jpeg</CODE> to <CODE>application/vnd.cups-raster</CODE>,
you could use the <CODE>imagetops</CODE> and <CODE>pstoraster</CODE>
filters for a total cost of 100, or the <CODE>imagetoraster</CODE> filter
for a total cost of 50.
<P>The <I>program</I> field defines the filter program to run; the
special program "-" can be used to make two file types equivalent. The
program must accept the standard filter arguments and environment
variables described in the CUPS Interface Design Document:
<UL><PRE>
program job user title options [filename]
</PRE></UL>
<P>If specified, the <I>filename</I> argument defines a file to read
when filtering, otherwise the filter must read from the standard input.
All filtered output must go to the standard output.
<H1 ALIGN=RIGHT>5 - Printer Accounting</H1>
This chapter describes the CUPS log files.
<H2>Where to Find the Log Files</H2>
<P>The log files are normally stored in the <CODE>/var/cups/logs</CODE>
directory. You can change this by editing the
<CODE>/var/cups/conf/cupsd.conf</CODE> configuration file.
<H2>The access_log File</H2>
<P>The <CODE>access_log</CODE> file lists each HTTP resource that is accessed
by a web browser or CUPS/IPP client. Each line is in the so-called "Common
Log Format" used by many web servers and web reporting tools:
<UL><PRE>
host group user date-time \"method resource version\" status bytes
127.0.0.1 - - [20/May/1999:19:20:29 +0000] "POST /admin/ HTTP/1.1" 401 0
127.0.0.1 - mike [20/May/1999:19:20:31 +0000] "POST /admin/ HTTP/1.1" 200 0
</PRE></UL>
<P>The <I>host</I> field will normally only be an IP address unless you
have changed the <CODE>HostnameLookups</CODE> directive on in the
<CODE>cupsd.conf</CODE> file.
<P>The <I>group</I> field always contains "-".
<P>The <I>user</I> field is the authenticated username of the requesting user.
If no username and password is supplied for the request then this field
contains "-".
<P>The <I>date-time</I> field is the date and time of the request in Greenwich
Mean Time (a.k.a. ZULU) and is in the format:
<UL><PRE>
[DD/MON/YYYY:HH:MM:SS +0000]
</PRE></UL>
<P>The <I>method</I> field is the HTTP method used ("GET", "PUT", "POST", etc.)
<P>The <I>resource</I> field is the filename of the requested resource.
<P>The <I>version</I> field is the HTTP specification version used by the
client. For CUPS clients this will always be "HTTP/1.1".
<P>The <I>status</I> field contains the HTTP result status of the
request. Usually it is "200", but other HTTP status codes are possible.
For example, 401 is the "unauthorized access" status in the example
above.
<P>The <I>bytes</I> field contains the number of bytes in the request.
For POST requests the <I>bytes</I> field contains the number of bytes
of non-IPP data that is received from the client.
<H2>The error_log File</H2>
<P>The <CODE>error_log</CODE> file lists messages from the scheduler (errors,
warnings, etc.):
<UL><PRE>
level date-time message
I [20/May/1999:19:18:28 +0000] Job 1 queued on 'DeskJet' by 'mike'.
I [20/May/1999:19:21:02 +0000] Job 2 queued on 'DeskJet' by 'mike'.
I [20/May/1999:19:22:24 +0000] Job 2 was cancelled by 'mike'.
</PRE></UL>
<P>The <I>level</I> field contains the type of message:
<UL>
<LI><CODE>E</CODE> - An error occurred.
<LI><CODE>W</CODE> - The server was unable to perform some action.
<LI><CODE>I</CODE> - Informational message.
<LI><CODE>D</CODE> - Debugging message.
</UL>
<P>The <I>date-time</I> field contains the date and time of when the page
started printing. The format of this field is identical to the <I>data-time</I>
field in the <CODE>access_log</CODE> file.
<P>The <I>message</I> fields contains a free-form textual message.
<H2>The page_log File</H2>
<P>The <CODE>page_log</CODE> file lists each page that is sent to a printer.
Each line contains the following information:
<UL><PRE>
printer user job-id date-time page-number num-copies
DeskJet root 2 [20/May/1999:19:21:05 +0000] 1 0
</PRE></UL>
<P>The <I>printer</I> field contains the name of the printer that
printed the page. If you send a job to a printer class, this field will
contain the name of the printer that was assigned the job.
<P>The <I>user</I> field contains the name of the user (the IPP
<CODE>requesting-user-name</CODE> attribute) that submitted this file for
printing.
<P>The <I>job-id</I> field contains the job number of the page being printed.
Job numbers are reset to 1 whenever the CUPS server is started, so don't depend
on this number being unique!
<P>The <I>date-time</I> field contains the date and time of when the page
started printing. The format of this field is identical to the <I>data-time</I>
field in the <CODE>access_log</CODE> file.
<P>The <I>page-number</I> and <I>num-pages</I> fields contain the page number
and number of copies being printed of that page. For printer that can not
produce copies on their own, the <I>num-pages</I> field will always be 1.
</BODY>
</HTML>
-473
Ver Arquivo
@@ -1,473 +0,0 @@
<HTML>
<HEAD>
<TITLE>DRAFT - CUPS Software Design Description</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SDD-1.0">
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>DRAFT - CUPS Software Design Description</H1></A><BR>
CUPS-SDD-1.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 References</A></B>
<UL>
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
</UL>
<B><A HREF=#3>3 Design Overview</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Backends</A></LI>
<UL>
<LI><A HREF=#3_1_1>3.1.1 ipp</A></LI>
<LI><A HREF=#3_1_2>3.1.2 lpd</A></LI>
<LI><A HREF=#3_1_3>3.1.3 parallel</A></LI>
<LI><A HREF=#3_1_4>3.1.4 serial</A></LI>
<LI><A HREF=#3_1_5>3.1.5 smb</A></LI>
<LI><A HREF=#3_1_6>3.1.6 socket</A></LI>
</UL>
<LI><A HREF=#3_2>3.2 Berkeley Commands</A></LI>
<UL>
<LI><A HREF=#3_2_1>3.2.1 lpc</A></LI>
<LI><A HREF=#3_2_2>3.2.2 lpr</A></LI>
<LI><A HREF=#3_2_3>3.2.3 lprm</A></LI>
</UL>
<LI><A HREF=#3_3>3.3 CGI</A></LI>
<UL>
<LI><A HREF=#3_3_1>3.3.1 classes</A></LI>
<LI><A HREF=#3_3_2>3.3.2 jobs</A></LI>
<LI><A HREF=#3_3_3>3.3.3 printers</A></LI>
</UL>
<LI><A HREF=#3_4>3.4 CUPS Interface Library</A></LI>
<UL>
<LI><A HREF=#3_4_1>3.4.1 Convenience Functions</A></LI>
<LI><A HREF=#3_4_2>3.4.2 HTTP Functions</A></LI>
<LI><A HREF=#3_4_3>3.4.3 IPP Functions</A></LI>
<LI><A HREF=#3_4_4>3.4.4 Language Functions</A></LI>
<LI><A HREF=#3_4_5>3.4.5 MIME Functions</A></LI>
<LI><A HREF=#3_4_6>3.4.6 PPD Functions</A></LI>
<LI><A HREF=#3_4_7>3.4.7 Raster Functions</A></LI>
</UL>
<LI><A HREF=#3_5>3.5 Filters</A></LI>
<UL>
<LI><A HREF=#3_5_1>3.5.1 hpgltops</A></LI>
<LI><A HREF=#3_5_2>3.5.2 imagetops</A></LI>
<LI><A HREF=#3_5_3>3.5.3 pstops</A></LI>
<LI><A HREF=#3_5_4>3.5.4 texttops</A></LI>
</UL>
<LI><A HREF=#3_6>3.6 Scheduler</A></LI>
<UL>
<LI><A HREF=#3_6_1>3.6.1 Authorization</A></LI>
<LI><A HREF=#3_6_2>3.6.2 Classes</A></LI>
<LI><A HREF=#3_6_3>3.6.3 Client</A></LI>
<LI><A HREF=#3_6_4>3.6.4 Configuration</A></LI>
<LI><A HREF=#3_6_5>3.6.5 Directory Services</A></LI>
<LI><A HREF=#3_6_6>3.6.6 IPP</A></LI>
<LI><A HREF=#3_6_7>3.6.7 Jobs</A></LI>
<LI><A HREF=#3_6_8>3.6.8 Main</A></LI>
<LI><A HREF=#3_6_9>3.6.9 Printers</A></LI>
</UL>
<LI><A HREF=#3_7>3.7 System V Commands</A></LI>
<UL>
<LI><A HREF=#3_7_1>3.7.1 accept</A></LI>
<LI><A HREF=#3_7_2>3.7.2 cancel</A></LI>
<LI><A HREF=#3_7_3>3.7.3 disable</A></LI>
<LI><A HREF=#3_7_4>3.7.4 enable</A></LI>
<LI><A HREF=#3_7_5>3.7.5 lp</A></LI>
<LI><A HREF=#3_7_6>3.7.6 lpadmin</A></LI>
<LI><A HREF=#3_7_7>3.7.7 lpstat</A></LI>
<LI><A HREF=#3_7_8>3.7.8 reject</A></LI>
</UL>
</UL>
<B><A HREF=#4>4 Detailed Design</A></B>
<BR>
<BR><B><A HREF=#5>A Glossary</A></B>
<UL>
<LI><A HREF=#5_1>A.1 Terms</A></LI>
<LI><A HREF=#5_2>A.2 Acronyms</A></LI>
</UL>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
This software design description document provides detailed
information on the architecture and coding of the Common UNIX Printing
System (&quot;CUPS&quot;) Version 1.0.
<H2><A NAME=1_2>1.2 System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
and users. CUPS provides the System V and Berkeley command-line
interfaces.
<P>CUPS uses the Internet Printing Protocol (IETF-IPP) as the basis for
managing print jobs and queues. The Line Printer Daemon (LPD, RFC1179),
Server Message Block (SMB), and AppSocket protocols are also supported
with reduced functionality. </P>
<P>CUPS adds network printer browsing and PostScript Printer
Description (&quot;PPD&quot;)-based printing options to support real world
applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
This software design description document is organized into the
following sections:
<UL>
<LI>1 - Scope </LI>
<LI>2 - References </LI>
<LI>3 - Design Overview </LI>
<LI>4 - Detailed Design </LI>
<LI>A - Glossary </LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
The following CUPS documentation is referenced by this document:
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.0: CUPS System Interface Design Description </LI>
<LI>CUPS-SAM-1.0.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.0: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.0: CUPS Software Programming Manual </LI>
<LI>CUPS-SSR-1.0: CUPS Software Security Report </LI>
<LI>CUPS-STP-1.0: CUPS Software Test Plan </LI>
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
The following non-CUPS documents are referenced by this document:
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
<LI>IPP/1.0: Additional Optional Operations - Set 1 </LI>
<LI>IPP/1.0: Encoding and Transport </LI>
<LI>IPP/1.0: Implementers Guide </LI>
<LI>IPP/1.0: Model and Semantics </LI>
<LI>RFC 1179, Line Printer Daemon Protocol </LI>
</UL>
<H1><A NAME=3>3 Design Overview</A></H1>
CUPS is composed of 7 software sub-systems that operate together to
perform common printing tasks:
<UL>
<LI>Backends </LI>
<LI>Berkeley Commands </LI>
<LI>CGI </LI>
<LI>CUPS Interface Library </LI>
<LI>Filters </LI>
<LI>Scheduler </LI>
<LI>System V Commands </LI>
</UL>
<H2><A NAME=3_1>3.1 Backends</A></H2>
The backends implement communications over a number of different
interfaces. All backends are called with a common set of arguments:
<UL>
<LI>Device URI - the Uniform Resource Identifier for the output device
(e.g. <CODE>parallel:/dev/plp</CODE>, <CODE>ipp://hostname/resource</CODE>
). </LI>
<LI>Job Identifier - the job identifier for this job (integer). </LI>
<LI>User Name - the user associated with this job (name string). </LI>
<LI>Title - the title/job-name associated with this job (name string). </LI>
<LI>Copies - the number of copies required (integer). </LI>
<LI>Options - the options associated with this job (space separated
option strings). </LI>
<LI>Filename (optional) - the file to print; if this option is not
specified, the backend must read the print file from the standard
input. </LI>
</UL>
Backends are named using the method of the URI, so a URI of
&quot;ipp://hostname/resource&quot; would be processed by the &quot;ipp&quot; backend.
<H3><A NAME=3_1_1>3.1.1 ipp</A></H3>
The ipp backend sends the specified job to a network printer or host
using the Internet Printing Protocol. The URI is as specified by the <CODE>
printer-uri-supported</CODE> attribute from the printer or host.
<H3><A NAME=3_1_2>3.1.2 lpd</A></H3>
The lpd backend sends the specified job to a network printer or host
using the Line Printer Daemon protocol. The URI is of the form:
<UL>
<PRE>lpd://hostname/queue
</PRE>
</UL>
<H3><A NAME=3_1_3>3.1.3 parallel</A></H3>
The parallel backend sends the specified job to a local printer
connected via the specified parallel port device. The URI is of the
form:
<UL>
<PRE>parallel:/dev/file
</PRE>
</UL>
<H3><A NAME=3_1_4>3.1.4 serial</A></H3>
The serial backend sends the specified job to a local printer
connected via the specified serial port device. The URI is of the
form:
<UL>
<PRE>serial:/dev/file?option[+option+...]
</PRE>
</UL>
The options can be any combination of the following:
<UL>
<LI><CODE>baud=<I>rate</I></CODE> - Sets the baud rate for the device. </LI>
<LI><CODE>bits=<I>7 or 8</I></CODE> - Sets the number of data bits. </LI>
<LI><CODE>parity=<I>even</I></CODE> - Sets even parity checking. </LI>
<LI><CODE>parity=<I>odd</I></CODE> - Sets odd parity checking. </LI>
<LI><CODE>parity=<I>none</I></CODE> - Turns parity checking off. </LI>
</UL>
<H3><A NAME=3_1_5>3.1.5 smb</A></H3>
The smb backend sends the specified job to a network host using the
Server Message Block protocol, which is used by most machines running
Microsoft&reg; Windows&reg;. The URI is of the form:
<UL>
<PRE>smb://hostname/queue
</PRE>
</UL>
Usernames and passwords required to access the printer are stored in
an external file.
<H3><A NAME=3_1_6>3.1.6 socket</A></H3>
The socket backend sends the specified job to a network host using the
AppSocket protocol commonly used by Hewlett-Packard and Tektronix
printers. The URI is of the form:
<UL>
<PRE>socket://hostname[:port]
</PRE>
</UL>
The default port number is 9100.
<H2><A NAME=3_2>3.2 Berkeley Commands</A></H2>
The Berkeley commands provide a simple command-line interface to CUPS
to submit and control print jobs. It is provided for compatibility with
existing software that is hard coded to use the Berkeley commands,
however since printer options cannot be specified using the Berkeley
commands their use it not encouraged.
<H3><A NAME=3_2_1>3.2.1 lpc</A></H3>
The lpc command allows users and administrators to check the status
and control print queues. The version provided with CUPS supports the
following commands:
<UL>
<LI>abort - Stops a printer or all printers and any active print jobs. </LI>
<LI>disable - Prevents new jobs from being submitted to the specified
printer or all printers. </LI>
<LI>down - Stops a printer or all printers after completing the current
print jobs. </LI>
<LI>enable - Allows new jobs to be submitted. </LI>
<LI>start - Starts a printer or all printers. </LI>
<LI>status - Shows the status of printers and jobs in the queue. </LI>
<LI>up - Starts a printer or all printers. </LI>
</UL>
<H3><A NAME=3_2_2>3.2.2 lpr</A></H3>
The lpr command submits a job for printing. The CUPS version of lpr
silently ignores the &quot;i&quot;, &quot;p&quot;, &quot;t&quot;, &quot;m&quot;, &quot;h&quot;, and &quot;s&quot; options.
<H3><A NAME=3_2_3>3.2.3 lprm</A></H3>
The lprm removes one or more print jobs.
<H2><A NAME=3_3>3.3 CGI</A></H2>
The Common Gateway Interface (CGI) programs provide a web-based status
interface to monitor the status of printers, classes, and jobs.
<H3><A NAME=3_3_1>3.3.1 classes</A></H3>
The classes CGI lists the available printer classes and any pending
jobs for the class. The user can click on individual classes to limit
the display and click on jobs to see the job status.
<H3><A NAME=3_3_2>3.3.2 jobs</A></H3>
The jobs CGI lists the queued print jobs in order of priority. The
list can be limited by printer or job. When the user displays the
status of an individual print job all job options are displayed.
<H3><A NAME=3_3_3>3.3.3 printers</A></H3>
The printers CGI lists the available printer queues and any pending
jobs for the printer. The user can click on individual printers to
limit the display and click on jobs to see the job status.
<H2><A NAME=3_4>3.4 CUPS Interface Library</A></H2>
The CUPS interface library provides common convenience, HTTP, IPP,
language, MIME, PPD, and raster functions used by the CUPS software.
<H3><A NAME=3_4_1>3.4.1 Convenience Functions</A></H3>
Convenience functions are provided to submit an IPP request, send a
print file, cancel a job, get a list of available printers, and get a
list of available classes.
<H3><A NAME=3_4_2>3.4.2 HTTP Functions</A></H3>
The HTTP functions provide functions to connect to HTTP servers, issue
requests, read data from a server, and write data to a server.
<H3><A NAME=3_4_3>3.4.3 IPP Functions</A></H3>
The IPP function provide functions to manage IPP request data and
attributes, read IPP responses from a server, and write IPP requests to
a server.
<H3><A NAME=3_4_4>3.4.4 Language Functions</A></H3>
The language functions provide a standard interface for retrieving
common textual messages for a particular locale and determining the
correct encoding (e.g. US ASCII, ISO-8859-1, etc.)
<H3><A NAME=3_4_5>3.4.5 MIME Functions</A></H3>
The Multimedia Internet Mail Exchange functions manage a MIME type and
conversion database that supports file typing by extension and content,
and least-cost file filtering from a source to a destination file type.
<H3><A NAME=3_4_6>3.4.6 PPD Functions</A></H3>
The PostScript Printer Description functions manage PPD files, select
options, check for option conflicts, and emit selected options in the
correct order.
<H3><A NAME=3_4_7>3.4.7 Raster Functions</A></H3>
The raster functions manage streams of CUPS raster data (described in
the Interface Design Document) used by non-PostScript printer drivers.
<H2><A NAME=3_5>3.5 Filters</A></H2>
The filters implement file conversion services for CUPS. All filters
are called with a common set of arguments:
<UL>
<LI>Printer name - the name of the destination printer (name string). </LI>
<LI>Job Identifier - the job identifier for this job (integer). </LI>
<LI>User Name - the user associated with this job (name string). </LI>
<LI>Title - the title/job-name associated with this job (name string). </LI>
<LI>Copies - the number of copies required (integer). </LI>
<LI>Options - the options associated with this job (space separated
option strings). </LI>
<LI>Filename (optional) - the file to print; if this option is not
specified, the filter must read the input file from the standard
input. </LI>
</UL>
Filters are added to the MIME conversion data file and implement all
necessary conversions from one file type to another.
<H3><A NAME=3_5_1>3.5.1 hpgltops</A></H3>
The hpgltops filter converts HP-GL/2 files into PostScript.
<H3><A NAME=3_5_2>3.5.2 imagetops</A></H3>
The imagetops filter converts image files into PostScript.
<H3><A NAME=3_5_3>3.5.3 pstops</A></H3>
The pstops filter inserts printer-specific commands from PPD files and
performs page filtering as requested by the user.
<H3><A NAME=3_5_4>3.5.4 texttops</A></H3>
The texttops filter converts text files into PostScript.
<H2><A NAME=3_6>3.6 Scheduler</A></H2>
The scheduler is a fully-functional HTTP/1.1 server that manages the
printers, classes, and jobs in the system. It also handles a simple
broadcast-based directory service so that remote print queues and
classes can be accessed transparently from the local system.
<H3><A NAME=3_6_1>3.6.1 Authorization</A></H3>
The authorization module is responsible for performing access control
and authentication for all HTTP and IPP requests entering the system.
<H3><A NAME=3_6_2>3.6.2 Classes</A></H3>
The classes module is responsible for managing printer classes in the
system. Each class is a collection of local and/or remote printers.
The classes module also reads and writes the classes configuration
file.
<H3><A NAME=3_6_3>3.6.3 Client</A></H3>
The client module is responsible for all HTTP client communications.
It handles listening on selected interfaces, accepting connections
from prospective clients, processing incoming HTTP requests, and
sending HTTP responses to those requests. The client module also is
responsible for executing the external CGI programs as needed to
support web-based printer, class, and job status monitoring.
<P>Once authorized, all IPP requests are sent to the IPP module. </P>
<H3><A NAME=3_6_4>3.6.4 Configuration</A></H3>
The configuration module is responsible for reading the CUPS
configuration file and initializing the appropriate data structures and
values. The configuration module also stops CUPS services before
reading the configuration file and restarts them after the
configuration file has been read.
<H3><A NAME=3_6_5>3.6.5 Directory Services</A></H3>
The directory services module sends and recieves printer state
information over a broadcast socket. Remote printers and classes are
automatically added to or removed from the local printer and class
lists as needed.
<P>The directory services module can only recieve printer state
information over a single UDP port, however it can broadcast to
multiple addresses and ports as needed. </P>
<H3><A NAME=3_6_6>3.6.6 IPP</A></H3>
The IPP module handles IPP requests and acts accordingly. URI
validation is also performed here, as a client can post IPP data to any
URI on the server (which might sidestep the access control or
authentication of the HTTP server.)
<H3><A NAME=3_6_7>3.6.7 Jobs</A></H3>
The jobs module manages print jobs, starts filter and backend
processes for jobs to be printed, and monitors status messages from
those filters and backends.
<H3><A NAME=3_6_8>3.6.8 Main</A></H3>
The main module is responsible for timing out and dispatching input
and output for client connections. It also watches for incoming <CODE>
SIGHUP</CODE> signals and reloads the server configuration files as
needed.
<H3><A NAME=3_6_9>3.6.9 Printers</A></H3>
The printers module is responsible for managing printers and PPD files
in the system. The printers module also reads and writes the printers
configuration file.
<H2><A NAME=3_7>3.7 System V Commands</A></H2>
The System V commands provide a robust command-line interface to CUPS
to submit and control print jobs.
<H3><A NAME=3_7_1>3.7.1 accept</A></H3>
The accept command tells the scheduler to accept new jobs for specific
printers.
<H3><A NAME=3_7_2>3.7.2 cancel</A></H3>
The cancel command tells the scheduler to cancel one or more jobs that
are queued for printing.
<H3><A NAME=3_7_3>3.7.3 disable</A></H3>
The disable command tells the scheduler to stop printing jobs on the
specified printers.
<H3><A NAME=3_7_4>3.7.4 enable</A></H3>
The enable command tells the scheduler to start printing jobs on the
specified printers.
<H3><A NAME=3_7_5>3.7.5 lp</A></H3>
The lp command submits submits files for printing. Unlike the
standard System V lp command, a single CUPS lp command will generate a
separate job ID for each file that is printed. Also, the Solaris &quot;f&quot;,
&quot;H&quot;, &quot;P&quot;, &quot;S&quot;, and &quot;y&quot; options are silently ignored.
<H3><A NAME=3_7_6>3.7.6 lpadmin</A></H3>
The lpadmin command manages printer queues and classes. The Solaris
&quot;A&quot;, &quot;F&quot;, &quot;I&quot;, &quot;M&quot;, &quot;P&quot;, &quot;Q&quot;, &quot;S&quot;, &quot;T&quot;, &quot;U&quot;, &quot;W&quot;, &quot;f&quot;, &quot;l&quot;, &quot;m&quot;, &quot;o&quot;,
&quot;s&quot;, &quot;t&quot;, and &quot;u&quot; options are not supported, and new options &quot;P&quot; (PPD
file) and &quot;F&quot; (filter) are provided to configure CUPS-specific features
such as PPD file and conversion filters.
<H3><A NAME=3_7_7>3.7.7 lpstat</A></H3>
The lpstat command lists printers, classes, and jobs as requested by
the user.
<H3><A NAME=3_7_8>3.7.8 reject</A></H3>
The reject command tells the scheduler not to accept new jobs for
specific printers.
<H1><A NAME=4>4 Detailed Design</A></H1>
<H1 TYPE=A VALUE=1><A NAME=5>A Glossary</A></H1>
<H2><A NAME=5_1>A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
<DT>parallel </DT>
<DD>Sending or receiving data more than 1 bit at a time. </DD>
<DT>pipe </DT>
<DD>A one-way communications channel between two programs. </DD>
<DT>serial </DT>
<DD>Sending or receiving data 1 bit at a time. </DD>
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME=5_2>A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
<DT>CUPS </DT>
<DD>Common UNIX Printing System </DD>
<DT>ESC/P </DT>
<DD>EPSON Standard Code for Printers </DD>
<DT>FTP </DT>
<DD>File Transfer Protocol </DD>
<DT>HP-GL </DT>
<DD>Hewlett-Packard Graphics Language </DD>
<DT>HP-PCL </DT>
<DD>Hewlett-Packard Printer Control Language </DD>
<DT>HP-PJL </DT>
<DD>Hewlett-Packard Printer Job Language </DD>
<DT>IETF </DT>
<DD>Internet Engineering Task Force </DD>
<DT>IPP </DT>
<DD>Internet Printing Protocol </DD>
<DT>ISO </DT>
<DD>International Standards Organization </DD>
<DT>LPD </DT>
<DD>Line Printer Daemon </DD>
<DT>MIME </DT>
<DD>Multimedia Internet Mail Exchange </DD>
<DT>PCL </DT>
<DD>Page Control Language </DD>
<DT>PPD </DT>
<DD>PostScript Printer Description </DD>
<DT>SMB </DT>
<DD>Server Message Block </DD>
<DT>TFTP </DT>
<DD>Trivial File Transfer Protocol </DD>
</DL>
</BODY>
</HTML>
-989
Ver Arquivo
@@ -1,989 +0,0 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990521210321Z)/Title(DRAFT - CUPS Software Design Description)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Oblique/Encoding 2 0 R>>endobj
5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj
8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
10 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
11 0 obj<</Subtype/Link/Rect[72.0 673.2 80.2 686.2]/Border[0 0 0]/Dest[219 0 R/XYZ null 818 0]>>endobj
12 0 obj<</Subtype/Link/Rect[80.2 673.2 107.8 686.2]/Border[0 0 0]/Dest[219 0 R/XYZ null 818 0]>>endobj
13 0 obj<</Subtype/Link/Rect[108.0 660.0 124.5 673.0]/Border[0 0 0]/Dest[219 0 R/XYZ null 737 0]>>endobj
14 0 obj<</Subtype/Link/Rect[124.5 660.0 183.8 673.0]/Border[0 0 0]/Dest[219 0 R/XYZ null 737 0]>>endobj
15 0 obj<</Subtype/Link/Rect[108.0 646.8 124.5 659.8]/Border[0 0 0]/Dest[219 0 R/XYZ null 658 0]>>endobj
16 0 obj<</Subtype/Link/Rect[124.5 646.8 159.6 659.8]/Border[0 0 0]/Dest[219 0 R/XYZ null 658 0]>>endobj
17 0 obj<</Subtype/Link/Rect[159.6 646.8 203.0 659.8]/Border[0 0 0]/Dest[219 0 R/XYZ null 658 0]>>endobj
18 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 434 0]>>endobj
19 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 434 0]>>endobj
20 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[219 0 R/XYZ null 434 0]>>endobj
21 0 obj<</Subtype/Link/Rect[72.0 607.2 80.2 620.2]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
22 0 obj<</Subtype/Link/Rect[80.2 607.2 131.6 620.2]/Border[0 0 0]/Dest[225 0 R/XYZ null 818 0]>>endobj
23 0 obj<</Subtype/Link/Rect[108.0 594.0 124.5 607.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 737 0]>>endobj
24 0 obj<</Subtype/Link/Rect[124.5 594.0 154.8 607.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 737 0]>>endobj
25 0 obj<</Subtype/Link/Rect[154.8 594.0 222.6 607.0]/Border[0 0 0]/Dest[225 0 R/XYZ null 737 0]>>endobj
26 0 obj<</Subtype/Link/Rect[108.0 580.8 124.5 593.8]/Border[0 0 0]/Dest[225 0 R/XYZ null 540 0]>>endobj
27 0 obj<</Subtype/Link/Rect[124.5 580.8 152.3 593.8]/Border[0 0 0]/Dest[225 0 R/XYZ null 540 0]>>endobj
28 0 obj<</Subtype/Link/Rect[152.3 580.8 202.4 593.8]/Border[0 0 0]/Dest[225 0 R/XYZ null 540 0]>>endobj
29 0 obj<</Subtype/Link/Rect[72.0 554.4 80.2 567.4]/Border[0 0 0]/Dest[231 0 R/XYZ null 818 0]>>endobj
30 0 obj<</Subtype/Link/Rect[80.2 554.4 114.8 567.4]/Border[0 0 0]/Dest[231 0 R/XYZ null 818 0]>>endobj
31 0 obj<</Subtype/Link/Rect[114.8 554.4 160.0 567.4]/Border[0 0 0]/Dest[231 0 R/XYZ null 818 0]>>endobj
32 0 obj<</Subtype/Link/Rect[108.0 541.2 124.5 554.2]/Border[0 0 0]/Dest[231 0 R/XYZ null 624 0]>>endobj
33 0 obj<</Subtype/Link/Rect[124.5 541.2 167.3 554.2]/Border[0 0 0]/Dest[231 0 R/XYZ null 624 0]>>endobj
34 0 obj<</Subtype/Link/Rect[144.0 528.0 168.8 541.0]/Border[0 0 0]/Dest[231 0 R/XYZ null 359 0]>>endobj
35 0 obj<</Subtype/Link/Rect[168.8 528.0 182.8 541.0]/Border[0 0 0]/Dest[231 0 R/XYZ null 359 0]>>endobj
36 0 obj<</Subtype/Link/Rect[144.0 514.8 168.8 527.8]/Border[0 0 0]/Dest[231 0 R/XYZ null 287 0]>>endobj
37 0 obj<</Subtype/Link/Rect[168.8 514.8 182.8 527.8]/Border[0 0 0]/Dest[231 0 R/XYZ null 287 0]>>endobj
38 0 obj<</Subtype/Link/Rect[144.0 501.6 168.8 514.6]/Border[0 0 0]/Dest[231 0 R/XYZ null 201 0]>>endobj
39 0 obj<</Subtype/Link/Rect[168.8 501.6 201.7 514.6]/Border[0 0 0]/Dest[231 0 R/XYZ null 201 0]>>endobj
40 0 obj<</Subtype/Link/Rect[144.0 488.4 168.8 501.4]/Border[0 0 0]/Dest[234 0 R/XYZ null 782 0]>>endobj
41 0 obj<</Subtype/Link/Rect[168.8 488.4 192.6 501.4]/Border[0 0 0]/Dest[234 0 R/XYZ null 782 0]>>endobj
42 0 obj<</Subtype/Link/Rect[144.0 475.2 168.8 488.2]/Border[0 0 0]/Dest[234 0 R/XYZ null 590 0]>>endobj
43 0 obj<</Subtype/Link/Rect[168.8 475.2 187.1 488.2]/Border[0 0 0]/Dest[234 0 R/XYZ null 590 0]>>endobj
44 0 obj<</Subtype/Link/Rect[144.0 462.0 168.8 475.0]/Border[0 0 0]/Dest[234 0 R/XYZ null 479 0]>>endobj
45 0 obj<</Subtype/Link/Rect[168.8 462.0 196.9 475.0]/Border[0 0 0]/Dest[234 0 R/XYZ null 479 0]>>endobj
46 0 obj<</Subtype/Link/Rect[108.0 448.8 124.5 461.8]/Border[0 0 0]/Dest[234 0 R/XYZ null 382 0]>>endobj
47 0 obj<</Subtype/Link/Rect[124.5 448.8 167.0 461.8]/Border[0 0 0]/Dest[234 0 R/XYZ null 382 0]>>endobj
48 0 obj<</Subtype/Link/Rect[167.0 448.8 217.1 461.8]/Border[0 0 0]/Dest[234 0 R/XYZ null 382 0]>>endobj
49 0 obj<</Subtype/Link/Rect[144.0 435.6 168.8 448.6]/Border[0 0 0]/Dest[234 0 R/XYZ null 275 0]>>endobj
50 0 obj<</Subtype/Link/Rect[168.8 435.6 182.2 448.6]/Border[0 0 0]/Dest[234 0 R/XYZ null 275 0]>>endobj
51 0 obj<</Subtype/Link/Rect[144.0 422.4 168.8 435.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 782 0]>>endobj
52 0 obj<</Subtype/Link/Rect[168.8 422.4 181.0 435.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 782 0]>>endobj
53 0 obj<</Subtype/Link/Rect[144.0 409.2 168.8 422.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 709 0]>>endobj
54 0 obj<</Subtype/Link/Rect[168.8 409.2 189.5 422.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 709 0]>>endobj
55 0 obj<</Subtype/Link/Rect[108.0 396.0 124.5 409.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 665 0]>>endobj
56 0 obj<</Subtype/Link/Rect[124.5 396.0 143.4 409.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 665 0]>>endobj
57 0 obj<</Subtype/Link/Rect[144.0 382.8 168.8 395.8]/Border[0 0 0]/Dest[237 0 R/XYZ null 571 0]>>endobj
58 0 obj<</Subtype/Link/Rect[168.8 382.8 199.3 395.8]/Border[0 0 0]/Dest[237 0 R/XYZ null 571 0]>>endobj
59 0 obj<</Subtype/Link/Rect[144.0 369.6 168.8 382.6]/Border[0 0 0]/Dest[237 0 R/XYZ null 499 0]>>endobj
60 0 obj<</Subtype/Link/Rect[168.8 369.6 187.1 382.6]/Border[0 0 0]/Dest[237 0 R/XYZ null 499 0]>>endobj
61 0 obj<</Subtype/Link/Rect[144.0 356.4 168.8 369.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 427 0]>>endobj
62 0 obj<</Subtype/Link/Rect[168.8 356.4 202.4 369.4]/Border[0 0 0]/Dest[237 0 R/XYZ null 427 0]>>endobj
63 0 obj<</Subtype/Link/Rect[108.0 343.2 124.5 356.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 369 0]>>endobj
64 0 obj<</Subtype/Link/Rect[124.5 343.2 154.8 356.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 369 0]>>endobj
65 0 obj<</Subtype/Link/Rect[154.8 343.2 196.6 356.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 369 0]>>endobj
66 0 obj<</Subtype/Link/Rect[196.6 343.2 229.6 356.2]/Border[0 0 0]/Dest[237 0 R/XYZ null 369 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 330.0 168.8 343.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 275 0]>>endobj
68 0 obj<</Subtype/Link/Rect[168.8 330.0 228.9 343.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 275 0]>>endobj
69 0 obj<</Subtype/Link/Rect[228.9 330.0 272.3 343.0]/Border[0 0 0]/Dest[237 0 R/XYZ null 275 0]>>endobj
70 0 obj<</Subtype/Link/Rect[144.0 316.8 168.8 329.8]/Border[0 0 0]/Dest[237 0 R/XYZ null 203 0]>>endobj
71 0 obj<</Subtype/Link/Rect[168.8 316.8 199.0 329.8]/Border[0 0 0]/Dest[237 0 R/XYZ null 203 0]>>endobj
72 0 obj<</Subtype/Link/Rect[199.0 316.8 242.4 329.8]/Border[0 0 0]/Dest[237 0 R/XYZ null 203 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 303.6 168.8 316.6]/Border[0 0 0]/Dest[240 0 R/XYZ null 782 0]>>endobj
74 0 obj<</Subtype/Link/Rect[168.8 303.6 187.4 316.6]/Border[0 0 0]/Dest[240 0 R/XYZ null 782 0]>>endobj
75 0 obj<</Subtype/Link/Rect[187.4 303.6 230.8 316.6]/Border[0 0 0]/Dest[240 0 R/XYZ null 782 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 290.4 168.8 303.4]/Border[0 0 0]/Dest[240 0 R/XYZ null 709 0]>>endobj
77 0 obj<</Subtype/Link/Rect[168.8 290.4 214.9 303.4]/Border[0 0 0]/Dest[240 0 R/XYZ null 709 0]>>endobj
78 0 obj<</Subtype/Link/Rect[214.9 290.4 258.3 303.4]/Border[0 0 0]/Dest[240 0 R/XYZ null 709 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 277.2 168.8 290.2]/Border[0 0 0]/Dest[240 0 R/XYZ null 637 0]>>endobj
80 0 obj<</Subtype/Link/Rect[168.8 277.2 201.4 290.2]/Border[0 0 0]/Dest[240 0 R/XYZ null 637 0]>>endobj
81 0 obj<</Subtype/Link/Rect[201.4 277.2 244.8 290.2]/Border[0 0 0]/Dest[240 0 R/XYZ null 637 0]>>endobj
82 0 obj<</Subtype/Link/Rect[144.0 264.0 168.8 277.0]/Border[0 0 0]/Dest[240 0 R/XYZ null 552 0]>>endobj
83 0 obj<</Subtype/Link/Rect[168.8 264.0 191.7 277.0]/Border[0 0 0]/Dest[240 0 R/XYZ null 552 0]>>endobj
84 0 obj<</Subtype/Link/Rect[191.7 264.0 235.1 277.0]/Border[0 0 0]/Dest[240 0 R/XYZ null 552 0]>>endobj
85 0 obj<</Subtype/Link/Rect[144.0 250.8 168.8 263.8]/Border[0 0 0]/Dest[240 0 R/XYZ null 479 0]>>endobj
86 0 obj<</Subtype/Link/Rect[168.8 250.8 199.6 263.8]/Border[0 0 0]/Dest[240 0 R/XYZ null 479 0]>>endobj
87 0 obj<</Subtype/Link/Rect[199.6 250.8 243.0 263.8]/Border[0 0 0]/Dest[240 0 R/XYZ null 479 0]>>endobj
88 0 obj<</Subtype/Link/Rect[108.0 237.6 124.5 250.6]/Border[0 0 0]/Dest[240 0 R/XYZ null 422 0]>>endobj
89 0 obj<</Subtype/Link/Rect[124.5 237.6 152.6 250.6]/Border[0 0 0]/Dest[240 0 R/XYZ null 422 0]>>endobj
90 0 obj<</Subtype/Link/Rect[144.0 224.4 168.8 237.4]/Border[0 0 0]/Dest[240 0 R/XYZ null 170 0]>>endobj
91 0 obj<</Subtype/Link/Rect[168.8 224.4 206.6 237.4]/Border[0 0 0]/Dest[240 0 R/XYZ null 170 0]>>endobj
92 0 obj<</Subtype/Link/Rect[144.0 211.2 168.8 224.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 782 0]>>endobj
93 0 obj<</Subtype/Link/Rect[168.8 211.2 214.0 224.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 782 0]>>endobj
94 0 obj<</Subtype/Link/Rect[144.0 198.0 168.8 211.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 722 0]>>endobj
95 0 obj<</Subtype/Link/Rect[168.8 198.0 196.9 211.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 722 0]>>endobj
96 0 obj<</Subtype/Link/Rect[144.0 184.8 168.8 197.8]/Border[0 0 0]/Dest[243 0 R/XYZ null 650 0]>>endobj
97 0 obj<</Subtype/Link/Rect[168.8 184.8 203.6 197.8]/Border[0 0 0]/Dest[243 0 R/XYZ null 650 0]>>endobj
98 0 obj<</Subtype/Link/Rect[108.0 171.6 124.5 184.6]/Border[0 0 0]/Dest[243 0 R/XYZ null 606 0]>>endobj
99 0 obj<</Subtype/Link/Rect[124.5 171.6 168.5 184.6]/Border[0 0 0]/Dest[243 0 R/XYZ null 606 0]>>endobj
100 0 obj<</Subtype/Link/Rect[144.0 158.4 168.8 171.4]/Border[0 0 0]/Dest[243 0 R/XYZ null 499 0]>>endobj
101 0 obj<</Subtype/Link/Rect[168.8 158.4 229.9 171.4]/Border[0 0 0]/Dest[243 0 R/XYZ null 499 0]>>endobj
102 0 obj<</Subtype/Link/Rect[144.0 145.2 168.8 158.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 427 0]>>endobj
103 0 obj<</Subtype/Link/Rect[168.8 145.2 201.8 158.2]/Border[0 0 0]/Dest[243 0 R/XYZ null 427 0]>>endobj
104 0 obj<</Subtype/Link/Rect[144.0 132.0 168.8 145.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 354 0]>>endobj
105 0 obj<</Subtype/Link/Rect[168.8 132.0 195.6 145.0]/Border[0 0 0]/Dest[243 0 R/XYZ null 354 0]>>endobj
106 0 obj<</Subtype/Link/Rect[144.0 118.8 168.8 131.8]/Border[0 0 0]/Dest[243 0 R/XYZ null 229 0]>>endobj
107 0 obj<</Subtype/Link/Rect[168.8 118.8 230.5 131.8]/Border[0 0 0]/Dest[243 0 R/XYZ null 229 0]>>endobj
108 0 obj<</Subtype/Link/Rect[144.0 105.6 168.8 118.6]/Border[0 0 0]/Dest[246 0 R/XYZ null 782 0]>>endobj
109 0 obj<</Subtype/Link/Rect[168.8 105.6 213.7 118.6]/Border[0 0 0]/Dest[246 0 R/XYZ null 782 0]>>endobj
110 0 obj<</Subtype/Link/Rect[213.7 105.6 250.9 118.6]/Border[0 0 0]/Dest[246 0 R/XYZ null 782 0]>>endobj
111 0 obj<</Subtype/Link/Rect[144.0 92.4 168.8 105.4]/Border[0 0 0]/Dest[246 0 R/XYZ null 670 0]>>endobj
112 0 obj<</Subtype/Link/Rect[168.8 92.4 184.6 105.4]/Border[0 0 0]/Dest[246 0 R/XYZ null 670 0]>>endobj
113 0 obj<</Subtype/Link/Rect[144.0 79.2 168.8 92.2]/Border[0 0 0]/Dest[246 0 R/XYZ null 584 0]>>endobj
114 0 obj<</Subtype/Link/Rect[168.8 79.2 188.3 92.2]/Border[0 0 0]/Dest[246 0 R/XYZ null 584 0]>>endobj
115 0 obj<</Subtype/Link/Rect[144.0 66.0 168.8 79.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 512 0]>>endobj
116 0 obj<</Subtype/Link/Rect[168.8 66.0 192.0 79.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 512 0]>>endobj
117 0 obj[11 0 R
12 0 R
13 0 R
14 0 R
15 0 R
16 0 R
17 0 R
18 0 R
19 0 R
20 0 R
21 0 R
22 0 R
23 0 R
24 0 R
25 0 R
26 0 R
27 0 R
28 0 R
29 0 R
30 0 R
31 0 R
32 0 R
33 0 R
34 0 R
35 0 R
36 0 R
37 0 R
38 0 R
39 0 R
40 0 R
41 0 R
42 0 R
43 0 R
44 0 R
45 0 R
46 0 R
47 0 R
48 0 R
49 0 R
50 0 R
51 0 R
52 0 R
53 0 R
54 0 R
55 0 R
56 0 R
57 0 R
58 0 R
59 0 R
60 0 R
61 0 R
62 0 R
63 0 R
64 0 R
65 0 R
66 0 R
67 0 R
68 0 R
69 0 R
70 0 R
71 0 R
72 0 R
73 0 R
74 0 R
75 0 R
76 0 R
77 0 R
78 0 R
79 0 R
80 0 R
81 0 R
82 0 R
83 0 R
84 0 R
85 0 R
86 0 R
87 0 R
88 0 R
89 0 R
90 0 R
91 0 R
92 0 R
93 0 R
94 0 R
95 0 R
96 0 R
97 0 R
98 0 R
99 0 R
100 0 R
101 0 R
102 0 R
103 0 R
104 0 R
105 0 R
106 0 R
107 0 R
108 0 R
109 0 R
110 0 R
111 0 R
112 0 R
113 0 R
114 0 R
115 0 R
116 0 R
]endobj
118 0 obj<</Subtype/Link/Rect[108.0 673.2 132.8 686.2]/Border[0 0 0]/Dest[246 0 R/XYZ null 440 0]>>endobj
119 0 obj<</Subtype/Link/Rect[132.8 673.2 167.0 686.2]/Border[0 0 0]/Dest[246 0 R/XYZ null 440 0]>>endobj
120 0 obj<</Subtype/Link/Rect[72.0 660.0 88.5 673.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 382 0]>>endobj
121 0 obj<</Subtype/Link/Rect[88.5 660.0 123.6 673.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 382 0]>>endobj
122 0 obj<</Subtype/Link/Rect[123.6 660.0 134.3 673.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 382 0]>>endobj
123 0 obj<</Subtype/Link/Rect[134.3 660.0 184.5 673.0]/Border[0 0 0]/Dest[246 0 R/XYZ null 382 0]>>endobj
124 0 obj<</Subtype/Link/Rect[108.0 646.8 132.8 659.8]/Border[0 0 0]/Dest[246 0 R/XYZ null 302 0]>>endobj
125 0 obj<</Subtype/Link/Rect[132.8 646.8 160.8 659.8]/Border[0 0 0]/Dest[246 0 R/XYZ null 302 0]>>endobj
126 0 obj<</Subtype/Link/Rect[108.0 633.6 132.8 646.6]/Border[0 0 0]/Dest[246 0 R/XYZ null 243 0]>>endobj
127 0 obj<</Subtype/Link/Rect[132.8 633.6 160.8 646.6]/Border[0 0 0]/Dest[246 0 R/XYZ null 243 0]>>endobj
128 0 obj<</Subtype/Link/Rect[108.0 620.4 132.8 633.4]/Border[0 0 0]/Dest[246 0 R/XYZ null 184 0]>>endobj
129 0 obj<</Subtype/Link/Rect[132.8 620.4 163.9 633.4]/Border[0 0 0]/Dest[246 0 R/XYZ null 184 0]>>endobj
130 0 obj<</Subtype/Link/Rect[108.0 607.2 132.8 620.2]/Border[0 0 0]/Dest[249 0 R/XYZ null 782 0]>>endobj
131 0 obj<</Subtype/Link/Rect[132.8 607.2 161.5 620.2]/Border[0 0 0]/Dest[249 0 R/XYZ null 782 0]>>endobj
132 0 obj<</Subtype/Link/Rect[108.0 594.0 132.8 607.0]/Border[0 0 0]/Dest[249 0 R/XYZ null 722 0]>>endobj
133 0 obj<</Subtype/Link/Rect[132.8 594.0 141.3 607.0]/Border[0 0 0]/Dest[249 0 R/XYZ null 722 0]>>endobj
134 0 obj<</Subtype/Link/Rect[108.0 580.8 132.8 593.8]/Border[0 0 0]/Dest[249 0 R/XYZ null 637 0]>>endobj
135 0 obj<</Subtype/Link/Rect[132.8 580.8 168.8 593.8]/Border[0 0 0]/Dest[249 0 R/XYZ null 637 0]>>endobj
136 0 obj<</Subtype/Link/Rect[108.0 567.6 132.8 580.6]/Border[0 0 0]/Dest[249 0 R/XYZ null 552 0]>>endobj
137 0 obj<</Subtype/Link/Rect[132.8 567.6 156.6 580.6]/Border[0 0 0]/Dest[249 0 R/XYZ null 552 0]>>endobj
138 0 obj<</Subtype/Link/Rect[108.0 554.4 132.8 567.4]/Border[0 0 0]/Dest[249 0 R/XYZ null 493 0]>>endobj
139 0 obj<</Subtype/Link/Rect[132.8 554.4 157.2 567.4]/Border[0 0 0]/Dest[249 0 R/XYZ null 493 0]>>endobj
140 0 obj<</Subtype/Link/Rect[36.0 528.0 44.2 541.0]/Border[0 0 0]/Dest[255 0 R/XYZ null 818 0]>>endobj
141 0 obj<</Subtype/Link/Rect[44.2 528.0 86.1 541.0]/Border[0 0 0]/Dest[255 0 R/XYZ null 818 0]>>endobj
142 0 obj<</Subtype/Link/Rect[86.1 528.0 117.9 541.0]/Border[0 0 0]/Dest[255 0 R/XYZ null 818 0]>>endobj
143 0 obj<</Subtype/Link/Rect[36.0 501.6 46.7 514.6]/Border[0 0 0]/Dest[261 0 R/XYZ null 818 0]>>endobj
144 0 obj<</Subtype/Link/Rect[46.7 501.6 88.2 514.6]/Border[0 0 0]/Dest[261 0 R/XYZ null 818 0]>>endobj
145 0 obj<</Subtype/Link/Rect[72.0 488.4 90.9 501.4]/Border[0 0 0]/Dest[261 0 R/XYZ null 737 0]>>endobj
146 0 obj<</Subtype/Link/Rect[90.9 488.4 119.0 501.4]/Border[0 0 0]/Dest[261 0 R/XYZ null 737 0]>>endobj
147 0 obj<</Subtype/Link/Rect[72.0 475.2 90.9 488.2]/Border[0 0 0]/Dest[261 0 R/XYZ null 434 0]>>endobj
148 0 obj<</Subtype/Link/Rect[90.9 475.2 136.8 488.2]/Border[0 0 0]/Dest[261 0 R/XYZ null 434 0]>>endobj
149 0 obj[118 0 R
119 0 R
120 0 R
121 0 R
122 0 R
123 0 R
124 0 R
125 0 R
126 0 R
127 0 R
128 0 R
129 0 R
130 0 R
131 0 R
132 0 R
133 0 R
134 0 R
135 0 R
136 0 R
137 0 R
138 0 R
139 0 R
140 0 R
141 0 R
142 0 R
143 0 R
144 0 R
145 0 R
146 0 R
147 0 R
148 0 R
]endobj
150 0 obj<</Dests 151 0 R>>endobj
151 0 obj<</Kids[152 0 R]>>endobj
152 0 obj<</Limits[(1)(5_2)]/Names[(1)153 0 R(1_1)154 0 R(1_2)155 0 R(1_3)156 0 R(2)157 0 R(2_1)158 0 R(2_2)159 0 R(3)160 0 R(3_1)161 0 R(3_1_1)162 0 R(3_1_2)163 0 R(3_1_3)164 0 R(3_1_4)165 0 R(3_1_5)166 0 R(3_1_6)167 0 R(3_2)168 0 R(3_2_1)169 0 R(3_2_2)170 0 R(3_2_3)171 0 R(3_3)172 0 R(3_3_1)173 0 R(3_3_2)174 0 R(3_3_3)175 0 R(3_4)176 0 R(3_4_1)177 0 R(3_4_2)178 0 R(3_4_3)179 0 R(3_4_4)180 0 R(3_4_5)181 0 R(3_4_6)182 0 R(3_4_7)183 0 R(3_5)184 0 R(3_5_1)185 0 R(3_5_2)186 0 R(3_5_3)187 0 R(3_5_4)188 0 R(3_6)189 0 R(3_6_1)190 0 R(3_6_2)191 0 R(3_6_3)192 0 R(3_6_4)193 0 R(3_6_5)194 0 R(3_6_6)195 0 R(3_6_7)196 0 R(3_6_8)197 0 R(3_6_9)198 0 R(3_7)199 0 R(3_7_1)200 0 R(3_7_2)201 0 R(3_7_3)202 0 R(3_7_4)203 0 R(3_7_5)204 0 R(3_7_6)205 0 R(3_7_7)206 0 R(3_7_8)207 0 R(4)208 0 R(5)209 0 R(5_1)210 0 R(5_2)211 0 R]>>endobj
153 0 obj<</D[219 0 R/XYZ null 818 null]>>endobj
154 0 obj<</D[219 0 R/XYZ null 737 null]>>endobj
155 0 obj<</D[219 0 R/XYZ null 658 null]>>endobj
156 0 obj<</D[219 0 R/XYZ null 434 null]>>endobj
157 0 obj<</D[225 0 R/XYZ null 818 null]>>endobj
158 0 obj<</D[225 0 R/XYZ null 737 null]>>endobj
159 0 obj<</D[225 0 R/XYZ null 540 null]>>endobj
160 0 obj<</D[231 0 R/XYZ null 818 null]>>endobj
161 0 obj<</D[231 0 R/XYZ null 624 null]>>endobj
162 0 obj<</D[231 0 R/XYZ null 359 null]>>endobj
163 0 obj<</D[231 0 R/XYZ null 287 null]>>endobj
164 0 obj<</D[231 0 R/XYZ null 201 null]>>endobj
165 0 obj<</D[234 0 R/XYZ null 782 null]>>endobj
166 0 obj<</D[234 0 R/XYZ null 590 null]>>endobj
167 0 obj<</D[234 0 R/XYZ null 479 null]>>endobj
168 0 obj<</D[234 0 R/XYZ null 382 null]>>endobj
169 0 obj<</D[234 0 R/XYZ null 275 null]>>endobj
170 0 obj<</D[237 0 R/XYZ null 782 null]>>endobj
171 0 obj<</D[237 0 R/XYZ null 709 null]>>endobj
172 0 obj<</D[237 0 R/XYZ null 665 null]>>endobj
173 0 obj<</D[237 0 R/XYZ null 571 null]>>endobj
174 0 obj<</D[237 0 R/XYZ null 499 null]>>endobj
175 0 obj<</D[237 0 R/XYZ null 427 null]>>endobj
176 0 obj<</D[237 0 R/XYZ null 369 null]>>endobj
177 0 obj<</D[237 0 R/XYZ null 275 null]>>endobj
178 0 obj<</D[237 0 R/XYZ null 203 null]>>endobj
179 0 obj<</D[240 0 R/XYZ null 782 null]>>endobj
180 0 obj<</D[240 0 R/XYZ null 709 null]>>endobj
181 0 obj<</D[240 0 R/XYZ null 637 null]>>endobj
182 0 obj<</D[240 0 R/XYZ null 552 null]>>endobj
183 0 obj<</D[240 0 R/XYZ null 479 null]>>endobj
184 0 obj<</D[240 0 R/XYZ null 422 null]>>endobj
185 0 obj<</D[240 0 R/XYZ null 170 null]>>endobj
186 0 obj<</D[243 0 R/XYZ null 782 null]>>endobj
187 0 obj<</D[243 0 R/XYZ null 722 null]>>endobj
188 0 obj<</D[243 0 R/XYZ null 650 null]>>endobj
189 0 obj<</D[243 0 R/XYZ null 606 null]>>endobj
190 0 obj<</D[243 0 R/XYZ null 499 null]>>endobj
191 0 obj<</D[243 0 R/XYZ null 427 null]>>endobj
192 0 obj<</D[243 0 R/XYZ null 354 null]>>endobj
193 0 obj<</D[243 0 R/XYZ null 229 null]>>endobj
194 0 obj<</D[246 0 R/XYZ null 782 null]>>endobj
195 0 obj<</D[246 0 R/XYZ null 670 null]>>endobj
196 0 obj<</D[246 0 R/XYZ null 584 null]>>endobj
197 0 obj<</D[246 0 R/XYZ null 512 null]>>endobj
198 0 obj<</D[246 0 R/XYZ null 440 null]>>endobj
199 0 obj<</D[246 0 R/XYZ null 382 null]>>endobj
200 0 obj<</D[246 0 R/XYZ null 302 null]>>endobj
201 0 obj<</D[246 0 R/XYZ null 243 null]>>endobj
202 0 obj<</D[246 0 R/XYZ null 184 null]>>endobj
203 0 obj<</D[249 0 R/XYZ null 782 null]>>endobj
204 0 obj<</D[249 0 R/XYZ null 722 null]>>endobj
205 0 obj<</D[249 0 R/XYZ null 637 null]>>endobj
206 0 obj<</D[249 0 R/XYZ null 552 null]>>endobj
207 0 obj<</D[249 0 R/XYZ null 493 null]>>endobj
208 0 obj<</D[255 0 R/XYZ null 818 null]>>endobj
209 0 obj<</D[261 0 R/XYZ null 818 null]>>endobj
210 0 obj<</D[261 0 R/XYZ null 737 null]>>endobj
211 0 obj<</D[261 0 R/XYZ null 434 null]>>endobj
212 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 20/Kids[213 0 R
216 0 R
267 0 R
270 0 R
219 0 R
222 0 R
225 0 R
228 0 R
231 0 R
234 0 R
237 0 R
240 0 R
243 0 R
246 0 R
249 0 R
252 0 R
255 0 R
258 0 R
261 0 R
264 0 R
]>>endobj
213 0 obj<</Type/Page/Parent 212 0 R/Contents 214 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
214 0 obj<</Length 215 0 R/Filter/FlateDecode>>stream
xÚíßoä8rÇ%µúeždïö;Ýž 3Óö¸go€ h“y+Iòäá°;wÙàr{73w‡ûïãþáný ¥ª"%Q>sݵMµø‹ß*’EõŸ_]‰õã?Wâ‡kñþƒøéÿ^ÝÉW‰|õgñ~ý›·?ìþøþÇ·kñ›o¯ÅõõÕÛ›]­Oïîóÿz÷é]öïwbó¯ë]y¿+våã®ÜïÊ»òoÿýî“øöå/Ÿßý§¸yõî?ÄæêêÝÜ‹ñéáUñ< ¼p™ùp½\./ζåñ–7Sç’÷˳ÈS•³óˇirÉë 5R ny31.yÝÅôTÎ/“©pá¡h7S຿ðÈÅ_&ŽsÝE¯œoæºæRÙ4Gp¦¯ìö™e®{á™—ïǸò ÏJñ/âºö¬•`ã žÍré—±^Øí2K\ò³^ü×£så‘×Gùnd®;¯§$cr]y½3—e´nc=–×£pÉÈó\'…°Z¾œk,LSÀb€Ó’Á˜–ç­âêÝo™9h6×ÀX\koð ÀuëPf½seÞ(åûž¹òh.‚(‚û
ÏÒ˜‚Ô!FçʽQ˦/®h\.äƒ 8dŽƒix.²Ø¹äøXžß—p€Ë ­sežec™KFnp–¹Öž#ea•+óœ)‰E.W¬åÄ\±çPÙXãÊ]Âꔘžh ¢˜ h`¢˜T¤×z,WêVG‡Áô4Õa0AÇ8g—t«5®‡)j<b„Áô\2j„ÁpÝuv¾\¾~Ø–»íÁ‡~; é.ÿüusoÏAôÖaÐwù-Iÿòþ¢Ÿƒ¾»ë¼sªtg€¶2àZ÷ÓUå^[Zë¡Çî"¤Knnð†ÍÅ5héâL²—‹jÐÓssÖ”!ar1»‹•NÍé²ÉÅ
ä¹ÙŒ.óy\i?Ún±ËV,®h(<z³ÈŠÔƒýU “´wN²Á†Á%Zü̫Ε€Eóé\d‘÷íÆÊÑÎ5lFåJG0BŽ)&D.1lAãÊ­xH.XdäÂÀÞÄëûÂjÉŒ ¬Eò–±H§¯®ÔB8cTÖ7Kªá'ö¹-Hð\Ò<H3-9ßõ\0êàÚ—[¶!‚•JPôT×Á†Ìö2¸hƒaåŠÇrÈ<Q°\=Á3D07Ãþ¬¢‰+×Ú +$´$Äq9 …4éðQ\ÙÈ™¡` ^ â÷‚“°9†+rC4(Z ¸2~`6^‡%Ý\±+¢Aé°U7WäˆÆ“Úvrenu²Ã‚N®Ø±îBú°¤‹+r¬»OzÑÁ•;ã’iM
;¸Rçº %\±х–²¤•K:Ø]¸1¿jåÊì.Ü2RØÊ…TyP,”­\C!Q9Ú¸°*?0jxlZ¸*ÍUl¸*¿œ aˆ³.ÖÖØ†è¹2E-h‰– \Zi¹„£ª3¥¹ŽKºª¸¡?Óqe´Ð°êÉN?ÕŒýé÷px¦iE•3¬Ÿ_㬠jâZh¹dåáÆm ­Dךh¸-Öhåši¹·)ëÆqHüÎð
q\žž Jê•ãÃM¶$à ¯’k¥åÊKϰfˆ%¡š ˆÎ«+Ôrím/8uB`Ié5— :¯v®@ÏuÒ
I™õ Ÿ90‚Öëɸ\'mÏðfˆQúDÅ•Sc¨®…–ë$1e­$Å>t Ï½B<×?=¢ˆ2ùα‚ä¹v%”ïàòô\Ùá³rŠ"J¨âŠˆfØÉµÒríï5ßÿ
¿d×)l3—¤ša'W¨çZïDsÕh¹ÍWpeT3ìäòõ\û›=§Rì•,×ìX[ɵ7Ž3êÊ12BªW
,×<z'%WI¤(³T³' ÊÆÏ?=5WÊš¥v†ˆóWN6Ãv®¬‚Óà’¬Å’§k@” ÀsÉ'³PsMŠ´X’ãZĹrHàÚ5<Ôs¥¬5;œÐQ6V.8ÜFÃ%Ykv­lp1ÒÛ¹òƒ(h¸M$®ÙŨ&M6‚‚ÂU”^Çœ §eR@“9ë ô:®˜Ó_ÊM6V4®ƒÒë¸"Îø’¨gÜ A×Aé5\o#ÂH6¢€ÈuPz WÌ[ìïzþ³*—d ¯N®½Òk¸"ÞæLŒyø@’•k¯ôj®œ¹‹‘b3Ö6
*×^éÕ\ 7³HªÊ3†W7×NéÕ\‚™¹#1Ž(QTHçÚYw¬ŸW.†Ø%p
kS¹[)¸v­*®½ÝKFÈ!ÍJ•¨]R6¿ÊujDKì5YÐ q8€•EPåZ•M 4\OEØMÁ.ÃÌË\ˆ5›™Æ$eE j\¹†+=ðätCL29\hLbÖü¡¾þÙäZ?=ôn%ÚÓV¸G6*[òä‹J\±’K[°&¢DØ¢C­I„%€U+Sr¥ÇÊ)=öEèà£Ã@ïû·¯´¹*kfÃOÕ¹ÖG‘ô|«Ï•s¼òéþY^WT¹JŸ(ȱ¯è.0¾dÞäJ\åT”˜lˆëîx9Ü`´)irå
®²ÞdäIà¹Ö,ÙhØÄ¬hrlµÂ,y&ÚK‰K°d£>0§÷óâ2W5#jÝCF#ÐSÅjåVåáëe®¸bØi©€–Cíäïô^“×…’K6¸¢Šåå=¤j:êÕÛI¾{ñ©R*Wʔ粬îquGó~1©X™&É%xQ”ó\/ŠrKšÈ¡Ã\¹¡ºÊ•q£CǹÒç&‡®˜ºÍµæG‡Ns‰ç&ó®è¹Éዳ4?.ùìd~Ï•=;™ÇrMBæË“@À¹e÷£y¹ÿ¶’óM‰+fË|¹ÎùFõ[ïì²²ìwZímçSFÛ]iYç–W®ÓºM}p&J®‡k¡æ*¤ï\‚í¾ÔøÕ©5qÆáš)¹rõþrÄv_jךèq¸<%—Pï;ðmÔöªËM­5qÅáZ)¸Ò¦ÊÊ-X®™&|Y©¸BW¨àŠšÑ2×Þ`u¹sµ&® Éõ$þYt´{@¹å͵Rsù*®úq> àQηþä>:˜ ŽkÞʵû¿{áUZ0¯:–DŵPº¢j<Џ¨ìdž6Ûn,º¹/Ÿ5vn½Êñ€rg®ÆEYÅn¨Eì‚«”–RíâSnO½‰‡«qQuÓéǨ0jƒá:¥)²äçÊ&®8\õ‹D50ßÑ„P϶sI W¬ç
9\õ‹j#eg– Â¨ÃuúA‘ý¯æò9\µ‹êO%žËïƒKqœ¯›KqQVw°ËÇr ˜ð00çjê†â8_7—î `¨š/{v¸¤†k­ÖyÅq>Wó¢Xé`F……‰FÇœÛj›Çù\Í‹„Ò¡¸æ(®Lí¿2M¥8·àj^¤åÊ,qÅÊxãþ†ÔšØ<·àj^)Šká’^C‘[ç)Šã|®ÆEZ®”F•ÚpøŠÆz^©8·áj\T®~º#ŠkSοÊ&6Žóa¸i¹€FêŽÑ¬ª6šxmWý"®Íª~ë'š&Öó¡¸êi¹b\u/&ê&Öó¡¸êi¹Öüð°Pœfy¿ÑÄúq>Wý¢¨–¦zäÖ¸üDÃU
U+M¬çÃqÕ.âsH.UúíÁ/–=ê&ÖŽóá¸j‰’bW¸";\¥üÃr¼±_öÕM¬çÃqÕ.jÄQ)–+,pó”BÅUz?”¢‰;ѦrU/Z×#¢øÀåõË•µqUó!¹gËM\c¹æF\¹.ž?•‚ÈU½(­•hÏ%{æ’šSŠã|H®êEYM²¥‡åZq­\Àáª\$k¡yêWÎáª^U˜8puç®zäªçÃrU/ŠÉø\Ù¸\1‡«rQzÚU>-òŽÎ•q¸*Ér+³c¼a2­´À%9\Õ‹ÄiÿëÎ#p%}r•󡹪¥ýJ¸RWõ¢Z$(v\&ÓeWÔΕs¸ªUgÆáÚ ®Òq><Wí¢J‡%ñ€\}cWõ¢jì¸:—7|C.á•—hçꀟÊU»è¶<YL‡á:¾ @ÓDÉáª_tWZаÀåN¹ßå~wzÿ|'×Tr`eùÌ t/³M.·wÏ%^¸^¸¦À5{¦\á4¹¢®®®®.×ü…ë…«.Ïœëqæƒ>WJ©;.×Ýîfþ%¦¹”º#s]Ô¯U_6TzÜ¢®z7@½Så)Ji[gÌ%éÕ<ýòöT³.ƒkS] í‰ë¶9£©¾Ì+?mvÜbNTur­ª´.©ØQª¾Ð0=.ñKÔÉ£N®Å\ šZ‹ò«¥oÔê2¸æEehöé¶Ê <¢JšL½.ƒ+¬ZJ/\ùÓÆÓY¹nùÕµ§Ýze]WP¹u?\éq£P^•nZ’ÀSv…².Ÿ+ë“+.íX¯OÞ¥ä²NÉ皺ªe~õ]«Û;iŸ\¢$ò4ªNXz!³¦.Ë?nŸ>â 7®¨¼ 'jJ2ž¤¥.+8>ޏ‹Ë$ž¯üNjq`Y5I[U—Ä5;>ŽÇ'Õž~:¦À@5I[U—ÄÝÜŒ«#ýðøçüì±,Jb•”ÎHéë’¸¶ç¿ŽiÑ+W ûÖ§”TܶÔç‡Aº«޸"]:ÎaO9/ÁD-©;x®õá󶟼ék n4qcPFÚº$®ø C[KOzã:ìužoÔÖ.“âIεuI\pÊ~õ‹Þ¸Ž!z£µû/~ˆJ¾X_WÉÕLìÜQ¤‡ñºu_ýq•òAj­Ÿ¼ÍÑëëR¸²ƒ¬·lÆÕ¶¯W®Wy/qÚÌ¢ÕÖ¥p凷nÙ«m6Vžã¨LŽ“Îº_ˆ>oç2Ú_–ÚÌRÑÈjÑ×%pǼûm\µ,Z?iôdˆ¨KáÚ;æ[î“«ô¢­*…êKætu)\{Çœí||Ÿ\Oa¹TªdÓÖº8®½cÎvõ͸:ó¾î"Õ¨ʇ¢®‹÷Ë;7˜lÿíwpÙÈg»¿hNjRÍ$GU—À•î,pç–ûç:µvV ¥6¨º®½cÞ¹å!¸žD!К¶º®½cÞ¹eC.ì»E³v1h«Kà’O^l>×)ñº›«V—ÀµwÌ{‘lå2ÉÇÞ¾JfUuÅZ®¶º®G òÓúi/\U÷
ºº®GÉð³½c4äJpë‡\mu)\ÛžN½ã‹êzã
*¶å·réêR¸`Öïâ29w#*­:ßV—•îOÖæ\«öé×¢<™i¹ÚêR¸²“Sï+-÷çºv›ZcÛêR¸òÓl •ËäâþZÿæ´©µÒrµÕíˆç+oÛ’Õ]A®Eç>ìiR?Yl«Ká*½¶?®¸e®Vçj©Kâ8.£sÙyKÕ:WK]WbÎ5Ç¥ÛÔCÿF¬¢¯K⊿é+×+Lƒ+ç®GU)àøTZ¹ŒÞ¿Q]‹ù¾håÒ×%qéÞÏj—«ÔØË¢ƒK[—Ä•}z;—ÑBöÖ]DÚ“ºFÅð½=‡Bùz½a¾ŠÏð=KÎÃ÷b½p ÏÕýºåirÅÿ°\É$¹º86“ä2™0¿p Ïe4±œ4×|–+œ$W÷löL¹‚irEÏ0ð5ü>Ž®¸ÖÏ0ðÅ}Ïj’\ðL¹Òg ~¯ÙX¥ëe¯ Ãï¡«t5y…ûÞ@ç©Ô—sT—Ô%†ßË9V‰Q\Ñ䎮Pû½·®¢Ë¾ßSìÚJ[Ô¥Èï•v-àðP\0µ€Cvú[ä÷›;pd8®É}}ÚÙ €‰¶œsÌÐ9lc®Î9æu§ÌF^œs`¢Ó-Æ8çÀ¢Î^¿k¬;씽:æÀòn5”¾86³ÌºÕPþÀ1–v7PÀ1w  Ö±غ;êTé˜Ý"8átKèmœ£sJès„m®gú ¡€S§„A:àª:%ô1¢©€ìZ—„^ L CÑ¥ˆ>êv_O\rBB/1Ò Vèç“‘ÃU‰KLGS̈dÈå Æ…ƒ+ôÞTäÐ/seÓD”aAzG"ÄñAúp"r8/s!„Þá”]AzG„cÒ@«§+Â!f_%®t"ì· À }8 Ùª\¡&!a• ±tãOB6æ5.1 áˆp*øáDÄ!ð†ë„pdH/ „+\ŽÙF(‚èÀbv§
Ìê\AtÀ3c—+  âÜýáµjpÅ`è³ @Xq ¤GŸµ†‚$c0ô;  ÇȬûÑÏ\Âù†O¼’ñŽ=ÀÖèM8Æ`øÈHÎaä–á§R@Š•G`„ÝG ©èÈ!"a
¢pŒ8À(t@ëçQç`”= ^8æ"GLhutÌEÊR;æˆJŸS {zD¥'­HõÒñ”^PšT%mµM4 ¨Cs4CDØÒL˵v×iË/PÐØÂQ3,ÇB@vé#bJ3$ ÏpF2Ä5íyÝŠG1DI ]ÇSâㆂ1ÀFˆqx@Á`¡‹fX™içÁ ?YI©
Î|Ö,¨jk€ œd™‘½¬ ‹ÉcX]>°rHz‹€5DV
œéöÐ1‡  à, sd Þ Tê׌ÌÇ3 ÔKÎcîç ÇÜa:\‡±†;peu°õfŽàB*ý@±ž1ð?j˜c† À©ÃtXÄ ë€í‡é°”éL/AƒÈ!Qà¸ÖX°•Ý5CreŽt˜Œ¸A8F†Xûª¥qB Õ,
3Cìuâ,ùV…™!öªõا»@sá ±GéÈ l
SCô“‘5^)^`&°}Zâ­Ç7C-—ôƶÄÜHº 06Äž4QùP0´=yg´ªWÆÀxÔöãsCkc_ßË“‘¡l'fƲ6}¤`aàÚ÷bw„T®”Ôa6µƒ¢Y!™Kz#ÉÈ|#· &……›‚%s°P‘Æõ‚ÁE»Ãcùn`)l uÀÂêBÉ*ÌUñÊŽ‰€ùªE0–> %w²K/U`+J;‚½H Û7ƒÁ¢6™ª«å4Øóü'ëàÙbQo²¹ŠˆVÿ¦sT¹¦ßfÃçJY\žCí,†Å·Å]\Ìó¼ó¤çÎjŸurÅ·à¿tþ^°†qaÂ%=~9GYc~Áûô•—A‡mÇÙe—9Þ3©:¦Ý\&¶G{ÐöuÄþÜ…!u¦4ÈˇF¿Éûedò¸
S®Ü³SÎΗËåë‡Çr¿\^D†Ÿ¶0æ²ÑaÖKWþ#†K:ȵ°Àe&‰£tŽË½[Yár®Ãº—¾p\rjÝ…ä"ìÚ Q zH®"r‰kc+Vw¡¹X+=i|b“+w†kQØärFëqÛx.MEãi\Ü%œDƒÆå„t`÷{)\r2VHãrÀÑ[‡$®Ñ-Ÿu@ãÊ'b…T®‘ã_Â6kTK¤ä¾P¹ÆôΔí'*׈=)iŽÌ5Ú£¥½Ð¹FbÄÄ2×8CŒ¸·ËàeˆQ³ 8\”ôÀ14ƒÍ5¸vÐSåx\k#É%…»RhÂ5¤(²R‡¹\Ãñ2ÉØ\Œ´ŸA—1×@“1扮!ü³Ï=HaÂÕ¿)ò³4¸ú3H>5ãêWM’… ¹útÐF9Ц\ý™%ãs‘s¨{š˜ØçêcÚb˜®n‡Ë¾,šŸ›°ÂUH»¶xiÞ";\¶h¯Ë‚MáW!/Üé,\–ºì|S¸ÆUÈkc|m«-6¹ø©ÕªK{-±Ëe^“‹Kf—ª.ÙùkÛm胋˜ï/{xÏE?\åïŸßôrûÞ¸v½Öagˇ¾îÝ'×®Û®—gê~º|èó¾}sí;n{Âayq¶-çËååÃCï·„k„ɧWé«;ùêÝÅÕG!'n®ÅÍúí?ÿÓCvû£oÄ}¹ÈýÝ·¿ýöËgñðùë/¿ÿãö??}ùåOß~ùõÿ,ÿ÷ñnÄÕÕö®>¼ûA¼¹zÿözû!Û‹ßäo®Þ®·ß\ݼýA¼¹þ°¿GòÛ¯?}6|ùõç¿üôíë®âMõs~ýÓß¿üòûÿùöØÎ?¼yü×Ç·øƒÈ¶¿ü*²Ï_?ùë矷—&ò‘êÿTMòšendstream
endobj
215 0 obj
6311
endobj
216 0 obj<</Type/Page/Parent 212 0 R/Contents 217 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
217 0 obj<</Length 218 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
ár á
äHendstream
endobj
218 0 obj
31
endobj
219 0 obj<</Type/Page/Parent 212 0 R/Contents 220 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
220 0 obj<</Length 221 0 R/Filter/FlateDecode>>stream
xÚ•U]OA}çWÜø¤IÙ²€}«¢†DíV°é/Ãì]˜:»w;3 ¡¿¾wfQJŒ$†¹_çœûÁïV þ‹á¢ ½ȼu9k}¾A<‚YÆ–ÁEféi SI%žÍ~ÕÖóhXÛÛçèöˆb˜¤X8•))œ¢¢vîC7®ÝAí:[) –2·!E«–…ÿ'*} ¤$«œSAih­ØÂV'”ÆT‘‘ÉC~à[!#WÊ¡tgE
’RU,2€ëƽ¨ëëzç+ÊsŽ{z˜ü„Ä(†ËžÓ­u˜Ãüôäê)™žÌÏàëKÄQ':Bº7Ú‘îî‚¿­Ñ¬nÞaý~õ®J2N,4ò[ã£Å;ÛaD0ÚÀF0q°ö€õÑ«»FÍ),¶p-ì¦;ýCi%GCNŽUëXIaÒ=
²{BëšÅ‹”ŒõºÔ­,kWtÏÍ· áû#ôêÍ3jÜrÓòœÚZÈ]vh2!ÑFMÖŠ!§®SM¼_n/&³q$Is3'׳›ö$I¸¢v_Ë“çñs)±ôþü¢E ¿+¬¸(p³èÜy\¡ 7b,Ð÷q~z—Œ?ÁãÍU_ŒægŸ`ÊCÀö{´V,.5Égv›Þ_z«¯ðµ,§üˆa¸T®ìW[:(i«ÒO7m£Ü
rŸøKVÒ7Bhå¶Gõij2¦…¡õ”=Š„¬›†}Ûszµ€¼ I2æEh³døj(Øý¬ÇÊ …®«Se©›S`¡*R¬‡÷8bfÏ]—ºª7@VÖQ®þpíu³Š”ÁíÃÜ®öÐç§²2†…ÞB ”²½úQ§7?;ÀëE¨Ü·)ãÓ“„‡D8ü¾@?d©ß‰³‚Šö+ÙYíûç¡ãÝ-ûÀøèYd?2KQ}…éÎHkÚ„UÅ0 öK]K6µºCæþRnÞ\À[0|æÛ¯½ÜƒÜév,Š“Â#fÈàý¯Ð‡Žk¦oõù`|?Ä7¿ u¢ÿŠÿÊñ·šx[Ͷ6 S»Q«3ðm}ó Øgö¯þûõ¬õ½õ'(Bendstream
endobj
221 0 obj
825
endobj
222 0 obj<</Type/Page/Parent 212 0 R/Contents 223 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
223 0 obj<</Length 224 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS046Ò3W072PIÑp rt QÐUp VÎO+)O,JUpI-ÎLÏQÉE™%™ùyš!Y\ººP­F 13=30ßP!89¿ ÂÈäÀ"wendstream
endobj
224 0 obj
121
endobj
225 0 obj<</Type/Page/Parent 212 0 R/Contents 226 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
226 0 obj<</Length 227 0 R/Filter/FlateDecode>>stream
xÚ­•OÚ0Åï|Š9²Ò&K 7
l…T´) {ââÆp•ØÔ6Úòíkc•V%]å@Æ¿7ö¼?ZÀ „nòªõ)k=½ÄÄæMЃŒ¶CX`yŽê!ûîJžýÈyÏ‘ïÊüÆË$…‰ÈwrM4Ü-èAËþ+Ï6…(KñÎøÚ-¤— )µ.…o{ÐóU]3tàü#?<³Wa×Êm«àç‰ø¡Ó ^°õN:½9ád– IIø5ß4tÄßà³Éäžî•Æ
f\£,HŽ0AÅÖÜÞrɶ糹G"Í­„ÿ³…~'aD+Æ™Òf/B*»—)ð¯·PÓ?¤õd~ H±–¤ª¬ w.n¡SÌw’é½±ïVHÝ€›%·¸ª¦I—˜ßRáÿŒímrûf¨ÖÛ¿Mîœ`ÏE§×)áUoPžb¬þ1Â\pï*Æ
l ™áÙt:…  üÞc° ç›Ý ¡×¶ŸU›JRèÕÃ]ç9K’§ÃÌG”2K$%¼nOèdxÆ^fì)ϵ=N!“„«» zbͪmyøÕ²ú¼c›qæ‚byh(ÅŠ˜#ÌÕ] ÅËØ<âGøÂ8º1X¬ŒM̵ÈÅÑÛÑqÑÑ{aßúŸéE?6²æU×~žf­¯­_Ð&Ùûendstream
endobj
227 0 obj
522
endobj
228 0 obj<</Type/Page/Parent 212 0 R/Contents 229 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
229 0 obj<</Length 230 0 R/Filter/FlateDecode>>stream
xÚ-‹Á‚0DïûÈ^U䬰~€©[S_«f&™ÌLÞ“ÅGŒ²N¶wÚ
­º5˜!\š¼Ac
ÈeÑö›Naw: F7¿ÎQÑêä¯!…þ1û1,åFÙÌþh•¶Êp^ãÛ zu5XÒµŸ"${endstream
endobj
230 0 obj
125
endobj
231 0 obj<</Type/Page/Parent 212 0 R/Contents 232 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
232 0 obj<</Length 233 0 R/Filter/FlateDecode>>stream
xÚµVMsÛ6½ëWìø$Ϙ”%9úpNµÝtÔÉ$®#÷¤ D.%Ä$ 5þ÷ÝH™bc§j’Ñöë=<ìê±7„sú a:‚ñ’¢wµì >Ìa8‡eF'“é,ÓþnÐÊM ŸŸÐ<IÜ.¿’Ý ‡Á.Mboy}û¤…DZYLAe0«2·ÁVëÈ>[‡…·”F#St[4´ÚÊ”)8F¡JÐF–N–pÂ>ØË:©Sfñè%ûj4™Âamý+<`™ÚC?*y8&×לÐ<`ŽÏpM5ˆc½¯ÿXgϤ-JG¸E‚ðQ®0ÏG…ø sr?®Ì/ÉÓ*Gsœ—¿>ø»C iæ]<c(ÜÉxîdáð¾!›åa],tŽ–Î+ *e"œT¥eU¬iAÊJe–¡aKÙ°gcø-Ï_‚±ê‘ç$Åt[® P4"³è8 0›Š3|tw÷w ˆHÚ´*¥WñZU:Z¤Xfo£*§+ið]õ1ÞÄuàó&°†ËÏ/d6йî$>;´ŸÒ%ìáI­/ƒ­²®L]J'Âê4>DùÚ?Õº' þJ›² ’zï¯ú|C4ÿJö¹Ý[
õ‰ª¯“Tü-¬U‰¤¾‚uÔ36ǦZJ—7i¯MÂk¥%Ú:㋪“°mð±’†2þoî>ëðnBU½Åjî?Ys|\jtöØôԓг³ê‡@"_ÖÅdtæ{=7÷÷ ³PFV¥r`5&¬¥ôÌûÔoŠÊ:bG¤~×GàÌ¢õñ3£
oc5*aRjôÞ<ŠˆæÝþA_µ»—œ’ÎüÈ!ç‚“òƒÌ?ë»ÅÍ3jCüÔióä•Gv;Uå)¬¹DE‰¦a§û¬Ÿ}HŽpÒ ‹÷íÔy’Ç£xR·Rj¦dýf¥ó=UÖ£ò4\ú«v  D·Sæ!0ÈÒ3À(ZÐýL"3¸mfð­QN%*Ruà0!’õÕJVCìö´1ªŒŒl¥µ2.ÓRG²[W®uJ¿ÇÕr¾Éÿ,®>ÊOt|#0üu©Ùê0µ Bb¶jYñ¨¸lXš4¬Ðƃ
m‹ì±Â
»è½¤ÛøÇÐ 7IhŒþ¹¢qºç!Qe‰ ÷Š'):.û¸|¿õûq&ç!¿ó`<k†ük\/fçñœH ówüýû²÷WïÌHCendstream
endobj
233 0 obj
942
endobj
234 0 obj<</Type/Page/Parent 212 0 R/Contents 235 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
235 0 obj<</Length 236 0 R/Filter/FlateDecode>>stream
xÚµWÛnÛ8}÷WÌcŠÖò-qâ‹EÒn±}(mìCÛŠE¬%R!)»ùûÎ’oIܤÛEØ¡†s9çÌŒr×Á~F0™ò¯¬z—óÞàý F“d óœžMÏFü5;š$£äZ%ÊWóodv £Q4ê§ôŒŒæ¶&
¹@ÑŸ:sàùA
3øfRð”Fim•öhA­Qz2X*±w¥õZë!Ã¥’˜EãL(~Ì7;ºùô“‡Û¹±ÕyÌu³X•¹¶Ž>Ïäo«ÿ4µWF~?_'Iòu·Ô>_ß.6Z:BCŠ ô=UQ¥J >ß$R–f¥ômÏ(‘µ¿/ãé)téFƒ£T4ÙñlÜYáq7­#èÃ5ú3_¶áúÃI‹×nì-Ô ¬¼Û|
äðì@hÝT)ñHUg `/Z «üý~\\¢~"*?x drA ÿŽ&ËžˆHOþ€ÚèGH7–ĵŽðÍÛ›NíG-MÆÉ´ëÖpUz¸U«ôy}ªÑ¯Œ]@aœ‡ÆqlyvI|DçÄ-Â%µó‚ºÙx#MùV…’Å^‡Rw6Ž\§÷P±³JÈBit`­ÙïG%­q&÷_Æ'SøWé̬ý/ìð*= 8k-*Ü5Øà޾¡‰À†Ž™YvŽª&T,Þ5ÊRÖ †”TnˆÞÍ-a 4oØ@iº
øÝ³£xª< j¸KÓÁ†þ0SÁä?‘uQ××ÑKǪÊèò>P²Gô7®Jô¾EQ…Í(s\xk´úÞUï~‰—È5ŸÏy²ÿlÚf˜‹¦ôq ´Ã†‚ÎFÃáå“ä¬Cy¯rÐK´ ÞRÍTˆ;÷ÚZ¶ÖŒÙRe4áÁ©ª.±{Ò/I½È…DfàíÍÕ5º&­”¨Ñf#ÔÚMÇLʏ÷Ï•´Q²0º)BMk$U%wÿJù‚„¥œgB¹AV¬;_ˆp³`‚¤É¢H‰ÏÀÃ:Þì…-Ì
¹…I%r#è­­¦çŶ‘ÙFPA¢SeCpª›o¢–¦±4²Ã]0NFPÖò 'ô¼‹‚÷i˜$6öªÈ*¥ Ú{†Ž‚0-c‹xá÷a´ú%ռϚ€~ Ö55ËÏí.ö5ÏÝðë)/R3-ojJrÃå*×]«¤× !½Zâ¾’~¶}Öá2åDJòíÕååI…h\G[SÙA_A»>ªiwÎ<‘à Ó0+ýœ¢óø^Èç;ÝÉÆZJü—!@Ý"pU´®ŸJe©w¥¿Ì+©¬åQ°:ÄïÁ©Õ.¹-8Õ-9Ó¤ÝÑF¨€Öa¿,PS??÷³öÒhxL/ÓÙ0™±ÛwŸ.ÞÏÉKh“ën@½C§n5H«Â\a'”Ë89…þéxÈW§|v<áü†ý³ñ×¼÷Oï)~×Çendstream
endobj
236 0 obj
1084
endobj
237 0 obj<</Type/Page/Parent 212 0 R/Contents 238 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
238 0 obj<</Length 239 0 R/Filter/FlateDecode>>stream
xÚ­V]oÚ0}çW\ñÔJ!k€}ÜèÇV‰­™öÒ'q¨»Ä¡¶Cſ߱J;ؤ )Îý:ç_ó܋迈¦CM(-{ŸãÞ‡›KŠFáâß&³È>fgXÁC±VçñEÞb0œ„ck?rûÒª,™ÌH×I)Œ&FOUBy¥h­„4B®B²¶óË{Úp¥E%©Ê¯—¦Ø’XÉJqM†}Ѩ¿¶c/e?°E µ¯3;ë?bÝæìë>Ukƒˆ:ô…†á¤3² ËShJR¼¬6¨¤’œ€¡DYˆ…µ—åc8k³\ú#ä˜ß.ަ˜ƒ,À¿e†¿°--¤á*g)§‡3¸>œ#UµR¬Ôöa#2:_x2H˜æ Ø0Sk—©P …Zæü÷²@µ«ÌLk®={¯½GÛ(ŒZ—£° Ÿ
¡o$Û0Q°¤àmÍÎä–Ö\fˆ«ÄIÆ´Á¼fjm˜ÄšH¡'ØÜÁRÍŠ.4()„èBeB¯ ðlóµ!|2˜‘•«gîCç{” ü5 Ï5¯Ñ¼ˆÐ@H+4ß›J ³õ€­—œpŽÉ¶ã !@H?ù!¦¥«Á¬÷aó æ[]1ÄŠÂÝ›mDLu´ñì!£NZGIiNêÃQuBí? ¤+âÿ(ä½ý?öCn·«¿ŠD1µ=>¬ËnKÞ¥ÝÿÚÍWÔ”VrÃ¥à2å}‰ãe@‹%.“«š­°x·¸»h¹¼ò»[1˜|äµL}Ÿkí¥eÚt•›tÿxÏǘó])tÓü#Æ}ë]zæÆªƒ˜9ªÝéaU
TÂP‚6:`¥ÐÈ5ÇiØn§¼ðÇL@+'¿mªüì}5sï•Ïž
rŠ€¡£ÿ/Ûî:ÓìvªïV€­•<5öÑ™CÓW¬Ðºæ-xWœe”1Ã(WU Þòðx´_0S¸·EØÖ²6kjkJ“\áwõýÓML/‡ûFtÅ5Ng{K•pCÂxßÁtxñæïÂxv^’[ŸÚ÷ë¸÷­÷{–žÊendstream
endobj
239 0 obj
808
endobj
240 0 obj<</Type/Page/Parent 212 0 R/Contents 241 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
241 0 obj<</Length 242 0 R/Filter/FlateDecode>>stream
xÚµVßsÚ8~ç¯ØG2ƒ ÞS. =nš+WÈ›_„$ƒZ[r%9iþûîJ68ôš¤í܄ɨòj÷û>í}é á þ a<¡/{®{§ó ŽÓ¬sü6™ éQôÇéY:†År óZs¯Œv'ëOh}Ãa´MF“ôŒl×;,óÆ*kî•ûÞ@É4ÛFC+¿ÔÒyÌ3`ZóÞªMí¥àG&+Wá^é ·¦Fñ1j+úNÚ{iaÿƒUþ‰ëA´I#ò.Ïd<J'-Ï3xÏô¶&t¯#[´æ‚-eŒé³”öÒæŒ£™± )Ê{¥·ÀMY¢J^~õ5+ ”Ρ3ÌTÌzÅë‚Ù#…ᬯèºTš¼yĵ’{šA‹Y_¦ÛîVp¹ºZ,°X}Hf³ó‹d8éyš¼ Ê9Ü.no^)Èm]xUJ¡,ˆµ–n™*àæ+ß¡X]¥š<`Ñ¿¬"%n4•£ô¡´Ø0'óǧ^W•±x¾¹B-p7±Ý<j)uØÝ8ÃW“£Ìù„L¸° ÿ!DÚó
œ©-žRÈÉ£4 iLÖGá îKé4åòú•Â-ÕŠ[UyXÚ0p-]XŽU#Ï ëÄÉ‚ŽÜK|ç;É?‡ŠK$B^(î]ለ,•o\HÑ:Á”}’NÆŠ—«g
Q_þ:Æ6ÇÌy,üÒÉáên¹jíB‹Èú"ˆ²‘¢…¸Øꥶ® ¯K<óìj'éb†h£“ŽÜU#·°ŠòîÀò<µ,/"ì1Ã<$ÍóÔbb¡ŠeUHÂó­“ÙÔoJh¦pYûÌ¢5+
¤ù üÓ±iëÉäGœ˜ÝÆîmDÅËF“)<…ÝoSM³RBô ¨==wk •)ë <%,œì$}²ƒê¿âým6°
}ňŸpQI¿S.¬g}Šº•ög#Ý¡ÂðÏVMïÌ9Ãó­¬0¿Aj­|цñô|Š.“àðÿ xe*…©ÓœW]nžË4ø”ň¿¬Ý‡¦ ÄmKx†‹«¨þœÄ‰Å]¤aç~6<V˜ êdýèˆLlö&fã ò£ ˆOÚ`7«$§\ƒv%nYcßw
ZTºªý¾±O±Ô÷˜Â0 ›ÎGã@"ÁëÒ¾¢æjeB qDFÃ@;šc:¡CWÀ
-9}ûØÙÐ\tŒ–?=aF!×ÝKmù<®ÚÞTÏ÷¬Ö¨•+¢Áùú×2y÷þt§ ÝeLgX5ÁgÏ!žÂd:%¯×/çk<·ÐÅW&÷$TÛ¥Ã-èw&ÓÑÚ:£µñ]S|½Y÷þí}rÌ[endstream
endobj
242 0 obj
1039
endobj
243 0 obj<</Type/Page/Parent 212 0 R/Contents 244 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
244 0 obj<</Length 245 0 R/Filter/FlateDecode>>stream
VËvÚ0Ýó³lÏ)N ”$Ë6é#«Ò†~€Ç [r¥qRúõ‘dB)käû˜«1?G%\ò§„« Lç ÛÑûåèâã ”ÓbËš×æ×¥\V¯¦Å[¾0­Z#¹.¼^þàÊ”eªOæÅLê–|®‚Ú4„´³è)¤¹‹|mÉÁÂzÐÞtT¤G“b>€O¡ g‘SÉklˆ¨g,ôãС6µŅ̃m•­¸Ð»‹»L‰ïA‡¾v¾å]™*ï4v *€ÇŸ=ÂJ80rbZ½Zm¼g´s*f@ø‹ÎêŠþ1PÎù÷¶¸oÒ#§LàAo°êô'ÃP†í€ºoší¸î­&ã¬jàór¹¸(X+3bÝŠ€½d¯B4!{Þ€nTÈâê·ÆRr`^ز£m÷ª 6\{Á´]ƒ°òNUZ¯TÀ
*ãQ“óÛÈÁh&í­£L¸U}nifZÙÃÎ!(­1ÈsÉ+:åÑR³MÉAÓ¬;³<ÙÝ9Ûò®§óæ·¿N:­ö+¡u⺘î1tγâŸÄ!1‚‘ª„¼k¢4y
6:=F6¨&µIÖäÞ/ ÍÉ•ÿ§o·Éʓʻ_Ö#Ð9-»-)!ø ô&­¥8j×4£®>ЖúÄš/`? ÆŽðŠió¨ª'o(gx—gk³î}ö–OÝ9ƒ¦lacÏø#%'ìÙu0WʸêmîqˆGe8%a§¬XÉ Š;ÿŒ§èA­t<‹¡Ž¤žÅÙäeƒw2 É<¹žoJædƒ±ÌC."µ!Féx´/çÂ(N¬•cêîömÙ·#våˆ'ø uOC\y
¢—ytûéþ¯½âùÍÛ"Vr²„¾ëœ'xÂU#9yNí¦RÔKH¬á!ÀEZøÅêçӋ՛خ¿NÏq„’bŒ‹IÞ¹üÌàv?s§côW:_N“D|ðíöûâáH¬£xÂjÌï\|à«êØY6Mñ¹ªñx&ßkê}²ªaõ¹¥Ç¨ÅΦ÷s¤‘§w€2MÜçyýaF&lAÕßGxLßF Ú’›pm-¹W0ŸMSî¾½û¸„qâøàjzvÞa0k+_ñe›{3N{ÇW“Ëþ#Í®/ˆ«7òûÃrôuôendstream
endobj
245 0 obj
911
endobj
246 0 obj<</Type/Page/Parent 212 0 R/Contents 247 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
247 0 obj<</Length 248 0 R/Filter/FlateDecode>>stream
xÚ•VÁ’Ú8½ó}$Uƒƒ!™c6l6³U[ÅÌžr²Œ•µ%G’¡øû}mÉLÂ&ÔLFju¿÷úµÌ—QNSüå4_ð¿lF¿mG¯?<P>Ïf´-±·¸Ïù±ϳEö–VÚ)¬;ÑF¹ƒ–Ê¿Ú~Æ‘7”çñÀd¶ÈÞðm¥¨8‡ûN-ºZá»)< S"´:`§uÚåÈiSZ׈ ­!{À² ³¢ÂòVþ«BFOª±A1Ž ‹qʳËZxäÂ)]°œQŠº>(
UP°d04¨QPélCÀk 3¢s"ªµHæÉ(…ãY*ýsœ¥ƒÒ‰òmÆ^›=>¯ÖÔZGÅ[:\æÜ/ú€UÓÕA·8 žNE @ƒÓ\ø¶ã“ù,[ _Ðãz}µÅØøU(P£/9õ¥S½V(*$?Hi]Á„N=?=ÒAÔºˆt5¶ko©UŽ5@'*åÔãP^+ó=¾­U.†,9 sê3##7‘õ‡VŸÆÇJËŠ½¯`]—jû`‚4$­ ÎÖìx¤B5x$ö¡ä¸‹Ú·ÛuJž}zuCÁ%ýiw×§ä3 aÄ~†~çŽíÁM+u=˜q'à2ö²Å<a78«¸ë£k4 é/h°ë:F‚¾d2¿õ*•ò_×ò·¬rOm0EËaËÖ¯wøÊøƒn`²]è Ú·"Ȋ״iÓ*vù‘ã£1¸{‡vùŒCï¤ ªGΓTÒFÚ¾N„:MPÇ›Ç?>>_x} »ì ¦›ªÆ€ù¯½…Ú¥Þw.º²©_®Z§«êªjçûìÇÊõ®aNßÜ}ëõ*AÒi Np~“Ñw²^ÖO£S"ÝÑG§ƒŠÄÏçþOý…ï[¸!ñ}ˆDæ„M_žþ¡÷¶ââ:ís´LÑìö¦W‚³»Î‡agRkÃ×'`•B*÷Ïë ún×èhœaÈ_&ëz–YÞßm¸
3† P(¨ºNãXY×ßL1ʨcœRnšoñ(µ<Kz ÏŒß RÕWñÄ[xR”…nlëÒ-*úw%nïŽ_ˆØíáÁ\·àÍybÅ.zéÊO‚>æ@l{®± ·z”M—ºÝ§‚9@-i±˜£(ºzz÷aK“h‰-Ñù­O6H§[¶0'™Ä³“ålÊGó)/ΗSðÞúôûvô÷è?¢÷†endstream
endobj
248 0 obj
920
endobj
249 0 obj<</Type/Page/Parent 212 0 R/Contents 250 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
250 0 obj<</Length 251 0 R/Filter/FlateDecode>>stream
xÚ…TQoÚ0~çWœòT$È À»1´>L¢#l/}1É…ºsìÔvZñïwgCDÙŠtI|ç»ï¾ïì×^·ôd0Áx
EÝû’÷>-?C6NGWä›Î3þ,oÆé,j±UØÏ_(lYƒ†£)ù((ÆC¦®….Á£R<9\ñŒe«Ð‚7༰+µ—z/fëÀè×`!+‰et£ui,xŠk8¥Ó#®;PÍELªéð¸v[Kïºw%“ÂF+ù#O›„-a½wkøu’kmˆ„Pɯ¼ùºY­Ok¾K¥`‡­ðÈ›°á“Ú†‡E¨Ž¢x`¨¬ð Ý¡û2…{åÌ  Y%,¹’*Í*œUOÖ´Îe“}¦ñÒhÂR/”]{µ¹ÓÆRæ+´QÖR_á6ÄtÍ’;<·ðÚbK¿ì*”p]
ùi/÷ÜÆ’͇® yd³þ·¿œ×7l~³ \(65ÃÆ±ñGÚ<hãIþ¦1–è!ß»*O7«Õ"ÈñÔ?+2.9„ÜÔàS?$m¬y“% - wat%w-­ò$ ]@…ÂÓ*‰-DvŒ~£a' 3_ûOê¯èÃ!<J:߉ãGM" á.‹¤Í{ Û}¼Ö¡½†fNÛ^°¸Œ&†\¼X"Q6>(`ñ!é˜<»æ‡bá™Áøn¥Zü¼_æ0 *мUþ•Z £À¯ÂÊ 9'ƽÃÙèö×Ýd6¡ƒ+Ëxá[Þ{ìýt_"endstream
endobj
251 0 obj
601
endobj
252 0 obj<</Type/Page/Parent 212 0 R/Contents 253 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
253 0 obj<</Length 254 0 R/Filter/FlateDecode>>stream
xÚ-‹A‚0D÷ÿ³ÔE+¿EêVEÖ*ß S£E‘ÄëkÕÌ$“¼É{#û„a‹ÔöF+¡YµœÉ §I¹_V…õa[£î»ñÕ ¥†sLÓá>†>NåBêgª¿Ê&ÁÜzŽ/°Úé>6Ç«O×FhGo³Ó#Ûendstream
endobj
254 0 obj
126
endobj
255 0 obj<</Type/Page/Parent 212 0 R/Contents 256 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R/F9 9 0 R>>>>>>endobj
256 0 obj<</Length 257 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCs#c3…ä\.§.}7KCK…4 Œ™¹‰BHІ‰‚KjIbfNj
Qœ™ž§Tg¡`hQ§‹O¡‰¹‰žPPÞÐÂÈe!endstream
endobj
257 0 obj
94
endobj
258 0 obj<</Type/Page/Parent 212 0 R/Contents 259 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
259 0 obj<</Length 260 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS046Ò3W072PIÑp rt QÐUp VÎO+)O,JUpI-ÎLÏQÉE™%™ùyš!Y\ººP­†& A=#°€ PCIbfNj
Ô¼kW ~ö&;endstream
endobj
260 0 obj
126
endobj
261 0 obj<</Type/Page/Parent 212 0 R/Contents 262 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
262 0 obj<</Length 263 0 R/Filter/FlateDecode>>stream
TÛn£0}ç+æqû-)¹=fQ’Fªº¬ Ò¾ºfBÝøBm§Qþ~Ç¡•öR,í
„€9œ9ÇsÌk’à 9Ì'p;®’¯Mr½YB¾„fO•Ù¼€¦ý²‚­4Î1{¾j^À4[ tºÈP–CƒV¹3ƒ<âM'³R¥â“Ò
¸QýÑ£Étwdf¿¥¿Â{f™”(Ç kÔ­Ð 9Š·ðÐ2Ï@‹àŸ™&ãO£¼Pñ†¢Ç˜z£1=±sp¡ŽZpæ…Ñ8µÑ(á ý Qƒ?è­é,S.ÖΡì¿Üýƒ'gøɽ¸Ò$ßØÃˆ»ìÏT¤”§ôvù‘‹ ¬¸5ú‹Æª.w»ˆE Âidµgºe¶…Ò´{ò¿ÓtUEtO
ª:Œø.«z¼UI‰êña÷*+´K[ŸGá\×åu5Nº®êoŸˆ¿4@ë"Ì›&»¡±L»=6ã 72ÂvW¥Ûûq¾;<Iô>­?¡[ËúgÁÜ¿oÊáÓÅut±  ÿõ—(æ…á&òix±n’ïÉOÇ^8Tendstream
endobj
263 0 obj
425
endobj
264 0 obj<</Type/Page/Parent 212 0 R/Contents 265 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R>>>>>>endobj
265 0 obj<</Length 266 0 R/Filter/FlateDecode>>stream
’ÝRÂ0…ïû­´@©—ü´# ¢C¨‘’h@}z“ª08ÓˆN{µgöÛœ³ûâ…Ð1_ÝØþtã°w•ņ€W¶¼¼¸A>Ï/ñ“Ñ{GÝâ ×èl_1­}D蚨% Å…f
ÆRh%+˜QnIÉ> ßü1ûLj™|8?MqÖŸZ”`RQrÁ˜a—€I½†L*êä"t¶y¬e"%µ¤²r‹ÅoD¢¹¤‚B±4aÔ°P%ü½ì9š´³çÆù!Ö a'*Ÿæi;+ßVšoØ’8„^AúJͶ\‘:/ ™5ÿå¬Ë1’µ.¨âÏúè›ÕMÁc‘Ú©S;CÊY]ÛÇŽ*I×ΰ㄰â;nVñŠVDÔ+Ã>=£ä«/îè'×Al;'wà ƒã{T@!WzO³þx)~ÚôÃndzýAÔ±­al‹½0 úІACª¤xÛÔVJ±wë}ûì'endstream
endobj
266 0 obj
380
endobj
267 0 obj<</Type/Page/Parent 212 0 R/Contents 268 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 117 0 R>>endobj
268 0 obj<</Length 269 0 R/Filter/FlateDecode>>stream
xÚÝ›ÛrÛ6†ïý¼l/Âgâ2±ãÔdâØêÈ2m3Ñ©”œÔ}úâ° ‰õUD7QYò£ø/°‹ÃêïRTæ?R(Z0Y,V'ïg'oÏuAt1»+ˆd%-¤æsvûÛl~³lŠÍ]qºYï›õ~÷ûìÛɇÙIUV†b?ˆý¸úh…dµ¹mUØOÿ÷²¸¶üƒË»ûâí¹(±O´·iÿ4RŒâäª`¢¬S¾·åz±Ù64P*x*æqæ’ròÿȨLZ¥©0Ÿ«BÐR@##5©¿%•Né2£u]™;‰U;~ØèâÖôŠö®]Ì÷ífý¼êB•jJºcÚº7ںƨ¶VQBÍNSŠi
äZ•2%ƒH×O»}³Ê †á~ã Fú/†ƒ·í˦ûÑ6?Ÿw'¥ž„s¯]›—¯øFÎ+Bëz:C¼Ȥ²£"AƒPg›ÅãÊt÷q^Œ0@ÎKžÃ@D\CM:²kH6à Eû€ïÿ~QÀŠùPMó?à…•+á{+P®š»¦kÖ‹f7¢£žVüyæC:¿Q ÷¾ñ²p/¤{oІûð„Úä Þì9§]^g\6Ük:¿¨¬Ób’·{RK™´!åq†ù„‹!MøF6 qéÃ1EÓD ו‰] Ì@ú²hºŒ;†Ûm–¨l,Ša`XpÈø¢“C,ˆ6¯ Éýý²€D­:æåÏ]OŽùÎ(gÍ®½_£¢ÛÍW­ûï ,o04GL3¶ dôTÒ‡v×£]ã…­R>ê3<¦Á3´°=~˜ô~¾øÞ¬ow£$:=…Çå5i²2Õ¹(¬íèöQyÍBk’æD`v]P¢ÁîPívû¼œ„•“Z„aB*íâ§7×È
YW>œZ))&%°AÊîí¶ÜÞþ?Ä”ÒMŒýÛ¹FVL©ü4ÙŠÉ01í%p°l;ïæËe³|^Q6•xŠI)˜ËþÝ\#+¥àe?Ä9&%° µS¸v€íš®Iízt*]S"bòÊ'
÷v®‘Ó¥S`babk;Àv«›‘A.'•€0-©Š2kdµ¤}¸”˜’@&”—:EƒÝ¡v“Í÷#R™82 )e~~ÄMhïW¾‘[]pÂCÞÁV¬Eÿ˜xVÔ“Þ7Ý÷fÙ<e¼"¢/J¸ëß1OG´ÓÍj5ŸcÕÇ÷ Ö¯«*Ê]®‘í× ¹‹âs*`Û‰Má`Ør»ÕÄ–ˆš¬VCúòœšÌ,’xP›V6©tÿ¤XͶÜv¯DM…¨©ø¿|#«f8ݱjbóªÀ&D™èÀÁ0£æjDN=1U>ì2I†6ßÈ…]&AGl9p•}%\0;ÎéÇ‹Ñ)À”O®°îÉÕ°†òl÷4ÙrCCg`—Ú¶XÎw»±bVMC]LHƇäY!™9ˆáQØ~žšÀÁ°o››Ý«˜¨bbR¥ ×ÈŠIiHA šÀö»® ìÛvízßt»ÑÅè4ÖPXÔ¬êa3Ï7²Q³Ò!ÿp,nÙ$d0ée—2eXÖ#wóE“9ç‹ö¨CÀüÔÞtóîiÔËüˆ^F† ÕbXÏùFn˜P ‡£¡;f=— Á.ýÊaý£Y·ö|/㈱*he6b¸À!Ï× {î4¾ãûKW#˜j2¤OßÈz ¦!}r4ê6q«év€ý1›]æÆƒŠ¾(Q6ê%0sÁÀBå?ÒhÀü ë!ûúFÖR—ýXÀF`ÛìËS8Øvq™sCt·Wõá  Ç<‚­w1äoßȺÃÜí€6áÔFv€}š¯ïç÷¹È! °–62ÅÀp§èÌœËOßÈz‚³>ý£Û§m·õy
;À>_|þ PÃí6@ÑÃo.ÚÄ2ÄË]Au”­©Æ²5«‚#°Ý×@&Äž¯$ho÷¨Ë˳\|î]¹RS’’àÂ|pÌÉ1æ"¢”M–²‰R¶Âlse
;À®æ»}®>$Ø1Aú/>$mw|Yڶޜؘp«ZÑ¡rÐ7r«·²: äÚnØ&d0é¼]Ž/ò¨šìÞÒËI­‡ ì¹^Nt(²)º8lâ6"¸·ØÃö~¹ßlÇVÐbâbJ*9dPßÈ*©úÛÎ3ªv€µ+3‘—’³ lFhDG•½øFVGÙ÷Gl‚Èþð1AƒÝïçìÆ¤j2Ûc˜Œ<*zñ¬Œ¢/zèÔ:°mÙºLáÞ`ûæŸ}f`OekLç“arH>¾‘K>„õ%/I>¬å!Ì@º^<4·Ë¦{MåmX¥Qõ‹od;(í«_$žy€mwõt
;ÀÞ=î6]ûo®„¹:ê¹6¦"‰Ê^|#«"éË^$žu€m×Uì4{.3ýQî”ÔQÍ‹ÆJ^tDÄ’Ž/6èÃzÏ9]¶Íz¬Ü…Ogj‰(X³!ãÔ I8u_ì"Ñ|&²·öå)ë»öþ±Ëe:ݱ¬¢ê§¨¾6E¢0&&O¨„ì­@:k»f±ßtO¹°ž`W›µ ®1ÌÀ»¶5ï£?èqk‚_î
Rå] ¢’U´ˆzÈHØÖ € ¡îgPù(../_C0¦"çq)&V‰)†Œ¤ÐBL¨c±q—–±ÒŸã§Û“©bÁ$ddÈFŒ ÙˆõÖØ¡6lT…g¤GÚnvÞ®Gë§RSåõ{{^ïJˆí ²ö?ƒºzw>+Þî@ùzs·ÿ9ïš~Ðcþ·èÚmÈLØßξQÔ½V ê}=ù41ž×endstream
endobj
269 0 obj
2170
endobj
270 0 obj<</Type/Page/Parent 212 0 R/Contents 271 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 149 0 R>>endobj
271 0 obj<</Length 272 0 R/Filter/FlateDecode>>stream
xÚÕ˜Ms›0†ïþ:¶‡(è8ºIkšÐÞ)&2`»ÀL'ÿ¾+i1à‰Dn¦q{gÑ+ô¬V+ñgÃHF„6ÿE³ù–mnw)a)É^Ó‚r¢c×lÿ%Ë×%9¾»ã¡/}÷5{Û|Ï6@Å\˜¹<=˜Óˆh@»†¤š&hÔäÙôpÑ }%·;I3}ÆÐ¡H]‡‚jšo/á†0ÁÎ}b7èG±Ç¶‚§níCZ>€à4p½æ‹¼£ÚŒ+¸6DqªÐð2…€j®ÇØOq"Õ$¦z®‹n«óüÞõeã—š´†°'TÌ¥Ðm¥~Â:6„°Êär¤è·2wǦÉ{OPe|å ÂéR„1˜¢CŠXÃN“ŒÃ. ”-%j3./ÅÑbyQ”§þc<†ä¹~Z,“T0+ô@Ò!’*Mé0Â0ÉAÛ‘œ‰£ÅŠüP”õÿN2QTžIZ#H2ÑpK$Qt.Ž~ÛW)6žµ:ZÈEŽp=—?g9Æb(z10XàˆÚ ÖE5G?Š•?FnⵊÉHªÔU;4kIêhਖ8¢2‹°˜I;¿“ªOLVï³¥k3‚¥k^âˆÚLðKqô£X}Ê÷Muðäµ™ÌW'ºÈÆ8Vk9
1Všx‰#j3Á÷Lý(VŸº>÷Õl¶Š­ì§X²tRk¬d Xε&Yb‰Ú xð¹¸óbmùV~–ÉúY‚Ad*Üë~[
[¦™e(8£ ;"ØvÎÔ×jÜ—}^Õå>pԛÃ2ØÌ´Ðb]õêY'x
-W´òŽ!áií²;‚u†7FæîØåúÖt¢dÏ„|.‹nÔy¨]—·ïžÅ7¥l•P§|Uøt,•°)¯¤™ZÖøÄ8'Kha§Ý6t¬šÈÂôç‡éëܨ”•mÓy7^ÉQ/â•‘ÝuºZ#ôòAJæ6¡ÛÐ k"f2#43iôRE{<¼ûÀJ¹’íÒÛ]2Ì5['n7tÿ´Ýeä†Üý||&ÏÇ—þoÞ–Ä-}æ«h«S_í2xÃì+ª›˜ÛVý±ùõÖñfendstream
endobj
272 0 obj
837
endobj
273 0 obj<</Count 6/First 274 0 R/Last 331 0 R>>endobj
274 0 obj<</Parent 273 0 R/Title(Table of Contents)/Dest[267 0 R/XYZ null 756 null]/Next 275 0 R>>endobj
275 0 obj<</Parent 273 0 R/Count -3/First 276 0 R/Last 278 0 R/Title(1 Scope)/Dest[219 0 R/XYZ null 743 null]/Prev 274 0 R/Next 279 0 R>>endobj
276 0 obj<</Parent 275 0 R/Title(1.1 Identification)/Dest[219 0 R/XYZ null 693 null]/Next 277 0 R>>endobj
277 0 obj<</Parent 275 0 R/Title(1.2 System Overview)/Dest[219 0 R/XYZ null 613 null]/Prev 276 0 R/Next 278 0 R>>endobj
278 0 obj<</Parent 275 0 R/Title(1.3 Document Overview)/Dest[219 0 R/XYZ null 389 null]/Prev 277 0 R>>endobj
279 0 obj<</Parent 273 0 R/Count -2/First 280 0 R/Last 281 0 R/Title(2 References)/Dest[225 0 R/XYZ null 743 null]/Prev 275 0 R/Next 282 0 R>>endobj
280 0 obj<</Parent 279 0 R/Title(2.1 CUPS Documentation)/Dest[225 0 R/XYZ null 693 null]/Next 281 0 R>>endobj
281 0 obj<</Parent 279 0 R/Title(2.2 Other Documents)/Dest[225 0 R/XYZ null 495 null]/Prev 280 0 R>>endobj
282 0 obj<</Parent 273 0 R/Count -7/First 283 0 R/Last 321 0 R/Title(3 Design Overview)/Dest[231 0 R/XYZ null 743 null]/Prev 279 0 R/Next 330 0 R>>endobj
283 0 obj<</Parent 282 0 R/Count -6/First 284 0 R/Last 289 0 R/Title(3.1 Backends)/Dest[231 0 R/XYZ null 580 null]/Next 290 0 R>>endobj
284 0 obj<</Parent 283 0 R/Title(3.1.1 ipp)/Dest[231 0 R/XYZ null 323 null]/Next 285 0 R>>endobj
285 0 obj<</Parent 283 0 R/Title(3.1.2 lpd)/Dest[231 0 R/XYZ null 250 null]/Prev 284 0 R/Next 286 0 R>>endobj
286 0 obj<</Parent 283 0 R/Title(3.1.3 parallel)/Dest[231 0 R/XYZ null 165 null]/Prev 285 0 R/Next 287 0 R>>endobj
287 0 obj<</Parent 283 0 R/Title(3.1.4 serial)/Dest[234 0 R/XYZ null 729 null]/Prev 286 0 R/Next 288 0 R>>endobj
288 0 obj<</Parent 283 0 R/Title(3.1.5 smb)/Dest[234 0 R/XYZ null 554 null]/Prev 287 0 R/Next 289 0 R>>endobj
289 0 obj<</Parent 283 0 R/Title(3.1.6 socket)/Dest[234 0 R/XYZ null 442 null]/Prev 288 0 R>>endobj
290 0 obj<</Parent 282 0 R/Count -3/First 291 0 R/Last 293 0 R/Title(3.2 Berkeley Commands)/Dest[234 0 R/XYZ null 337 null]/Prev 283 0 R/Next 294 0 R>>endobj
291 0 obj<</Parent 290 0 R/Title(3.2.1 lpc)/Dest[234 0 R/XYZ null 238 null]/Next 292 0 R>>endobj
292 0 obj<</Parent 290 0 R/Title(3.2.2 lpr)/Dest[237 0 R/XYZ null 729 null]/Prev 291 0 R/Next 293 0 R>>endobj
293 0 obj<</Parent 290 0 R/Title(3.2.3 lprm)/Dest[237 0 R/XYZ null 673 null]/Prev 292 0 R>>endobj
294 0 obj<</Parent 282 0 R/Count -3/First 295 0 R/Last 297 0 R/Title(3.3 CGI)/Dest[237 0 R/XYZ null 620 null]/Prev 290 0 R/Next 298 0 R>>endobj
295 0 obj<</Parent 294 0 R/Title(3.3.1 classes)/Dest[237 0 R/XYZ null 535 null]/Next 296 0 R>>endobj
296 0 obj<</Parent 294 0 R/Title(3.3.2 jobs)/Dest[237 0 R/XYZ null 462 null]/Prev 295 0 R/Next 297 0 R>>endobj
297 0 obj<</Parent 294 0 R/Title(3.3.3 printers)/Dest[237 0 R/XYZ null 390 null]/Prev 296 0 R>>endobj
298 0 obj<</Parent 282 0 R/Count -7/First 299 0 R/Last 305 0 R/Title(3.4 CUPS Interface Library)/Dest[237 0 R/XYZ null 324 null]/Prev 294 0 R/Next 306 0 R>>endobj
299 0 obj<</Parent 298 0 R/Title(3.4.1 Convenience Functions)/Dest[237 0 R/XYZ null 239 null]/Next 300 0 R>>endobj
300 0 obj<</Parent 298 0 R/Title(3.4.2 HTTP Functions)/Dest[237 0 R/XYZ null 167 null]/Prev 299 0 R/Next 301 0 R>>endobj
301 0 obj<</Parent 298 0 R/Title(3.4.3 IPP Functions)/Dest[240 0 R/XYZ null 729 null]/Prev 300 0 R/Next 302 0 R>>endobj
302 0 obj<</Parent 298 0 R/Title(3.4.4 Language Functions)/Dest[240 0 R/XYZ null 673 null]/Prev 301 0 R/Next 303 0 R>>endobj
303 0 obj<</Parent 298 0 R/Title(3.4.5 MIME Functions)/Dest[240 0 R/XYZ null 601 null]/Prev 302 0 R/Next 304 0 R>>endobj
304 0 obj<</Parent 298 0 R/Title(3.4.6 PPD Functions)/Dest[240 0 R/XYZ null 515 null]/Prev 303 0 R/Next 305 0 R>>endobj
305 0 obj<</Parent 298 0 R/Title(3.4.7 Raster Functions)/Dest[240 0 R/XYZ null 443 null]/Prev 304 0 R>>endobj
306 0 obj<</Parent 282 0 R/Count -4/First 307 0 R/Last 310 0 R/Title(3.5 Filters)/Dest[240 0 R/XYZ null 377 null]/Prev 298 0 R/Next 311 0 R>>endobj
307 0 obj<</Parent 306 0 R/Title(3.5.1 hpgltops)/Dest[240 0 R/XYZ null 133 null]/Next 308 0 R>>endobj
308 0 obj<</Parent 306 0 R/Title(3.5.2 imagetops)/Dest[243 0 R/XYZ null 729 null]/Prev 307 0 R/Next 309 0 R>>endobj
309 0 obj<</Parent 306 0 R/Title(3.5.3 pstops)/Dest[243 0 R/XYZ null 686 null]/Prev 308 0 R/Next 310 0 R>>endobj
310 0 obj<</Parent 306 0 R/Title(3.5.4 texttops)/Dest[243 0 R/XYZ null 614 null]/Prev 309 0 R>>endobj
311 0 obj<</Parent 282 0 R/Count -9/First 312 0 R/Last 320 0 R/Title(3.6 Scheduler)/Dest[243 0 R/XYZ null 561 null]/Prev 306 0 R/Next 321 0 R>>endobj
312 0 obj<</Parent 311 0 R/Title(3.6.1 Authorization)/Dest[243 0 R/XYZ null 462 null]/Next 313 0 R>>endobj
313 0 obj<</Parent 311 0 R/Title(3.6.2 Classes)/Dest[243 0 R/XYZ null 390 null]/Prev 312 0 R/Next 314 0 R>>endobj
314 0 obj<</Parent 311 0 R/Title(3.6.3 Client)/Dest[243 0 R/XYZ null 318 null]/Prev 313 0 R/Next 315 0 R>>endobj
315 0 obj<</Parent 311 0 R/Title(3.6.4 Configuration)/Dest[243 0 R/XYZ null 193 null]/Prev 314 0 R/Next 316 0 R>>endobj
316 0 obj<</Parent 311 0 R/Title(3.6.5 Directory Services)/Dest[246 0 R/XYZ null 729 null]/Prev 315 0 R/Next 317 0 R>>endobj
317 0 obj<</Parent 311 0 R/Title(3.6.6 IPP)/Dest[246 0 R/XYZ null 633 null]/Prev 316 0 R/Next 318 0 R>>endobj
318 0 obj<</Parent 311 0 R/Title(3.6.7 Jobs)/Dest[246 0 R/XYZ null 548 null]/Prev 317 0 R/Next 319 0 R>>endobj
319 0 obj<</Parent 311 0 R/Title(3.6.8 Main)/Dest[246 0 R/XYZ null 475 null]/Prev 318 0 R/Next 320 0 R>>endobj
320 0 obj<</Parent 311 0 R/Title(3.6.9 Printers)/Dest[246 0 R/XYZ null 403 null]/Prev 319 0 R>>endobj
321 0 obj<</Parent 282 0 R/Count -8/First 322 0 R/Last 329 0 R/Title(3.7 System V Commands)/Dest[246 0 R/XYZ null 337 null]/Prev 311 0 R>>endobj
322 0 obj<</Parent 321 0 R/Title(3.7.1 accept)/Dest[246 0 R/XYZ null 265 null]/Next 323 0 R>>endobj
323 0 obj<</Parent 321 0 R/Title(3.7.2 cancel)/Dest[246 0 R/XYZ null 206 null]/Prev 322 0 R/Next 324 0 R>>endobj
324 0 obj<</Parent 321 0 R/Title(3.7.3 disable)/Dest[246 0 R/XYZ null 147 null]/Prev 323 0 R/Next 325 0 R>>endobj
325 0 obj<</Parent 321 0 R/Title(3.7.4 enable)/Dest[249 0 R/XYZ null 729 null]/Prev 324 0 R/Next 326 0 R>>endobj
326 0 obj<</Parent 321 0 R/Title(3.7.5 lp)/Dest[249 0 R/XYZ null 686 null]/Prev 325 0 R/Next 327 0 R>>endobj
327 0 obj<</Parent 321 0 R/Title(3.7.6 lpadmin)/Dest[249 0 R/XYZ null 601 null]/Prev 326 0 R/Next 328 0 R>>endobj
328 0 obj<</Parent 321 0 R/Title(3.7.7 lpstat)/Dest[249 0 R/XYZ null 515 null]/Prev 327 0 R/Next 329 0 R>>endobj
329 0 obj<</Parent 321 0 R/Title(3.7.8 reject)/Dest[249 0 R/XYZ null 456 null]/Prev 328 0 R>>endobj
330 0 obj<</Parent 273 0 R/Title(4 Detailed Design)/Dest[255 0 R/XYZ null 743 null]/Prev 282 0 R/Next 331 0 R>>endobj
331 0 obj<</Parent 273 0 R/Count -2/First 332 0 R/Last 333 0 R/Title(A Glossary)/Dest[261 0 R/XYZ null 743 null]/Prev 330 0 R>>endobj
332 0 obj<</Parent 331 0 R/Title(A.1 Terms)/Dest[261 0 R/XYZ null 693 null]/Next 333 0 R>>endobj
333 0 obj<</Parent 331 0 R/Title(A.2 Acronyms)/Dest[261 0 R/XYZ null 389 null]/Prev 332 0 R>>endobj
334 0 obj<</Type/Catalog/Pages 212 0 R/Names 150 0 R/ViewerPreferences<</PageLayout/TwoColumnRight>>/Outlines 273 0 R/PageMode/UseOutlines/OpenAction[219 0 R/XYZ null null null]>>endobj
xref
0 335
0000000000 65535 f
0000000015 00000 n
0000000224 00000 n
0000000285 00000 n
0000000359 00000 n
0000000441 00000 n
0000000519 00000 n
0000000596 00000 n
0000000675 00000 n
0000000751 00000 n
0000000832 00000 n
0000000891 00000 n
0000000994 00000 n
0000001098 00000 n
0000001203 00000 n
0000001308 00000 n
0000001413 00000 n
0000001518 00000 n
0000001623 00000 n
0000001728 00000 n
0000001833 00000 n
0000001938 00000 n
0000002041 00000 n
0000002145 00000 n
0000002250 00000 n
0000002355 00000 n
0000002460 00000 n
0000002565 00000 n
0000002670 00000 n
0000002775 00000 n
0000002878 00000 n
0000002982 00000 n
0000003087 00000 n
0000003192 00000 n
0000003297 00000 n
0000003402 00000 n
0000003507 00000 n
0000003612 00000 n
0000003717 00000 n
0000003822 00000 n
0000003927 00000 n
0000004032 00000 n
0000004137 00000 n
0000004242 00000 n
0000004347 00000 n
0000004452 00000 n
0000004557 00000 n
0000004662 00000 n
0000004767 00000 n
0000004872 00000 n
0000004977 00000 n
0000005082 00000 n
0000005187 00000 n
0000005292 00000 n
0000005397 00000 n
0000005502 00000 n
0000005607 00000 n
0000005712 00000 n
0000005817 00000 n
0000005922 00000 n
0000006027 00000 n
0000006132 00000 n
0000006237 00000 n
0000006342 00000 n
0000006447 00000 n
0000006552 00000 n
0000006657 00000 n
0000006762 00000 n
0000006867 00000 n
0000006972 00000 n
0000007077 00000 n
0000007182 00000 n
0000007287 00000 n
0000007392 00000 n
0000007497 00000 n
0000007602 00000 n
0000007707 00000 n
0000007812 00000 n
0000007917 00000 n
0000008022 00000 n
0000008127 00000 n
0000008232 00000 n
0000008337 00000 n
0000008442 00000 n
0000008547 00000 n
0000008652 00000 n
0000008757 00000 n
0000008862 00000 n
0000008967 00000 n
0000009072 00000 n
0000009177 00000 n
0000009282 00000 n
0000009387 00000 n
0000009492 00000 n
0000009597 00000 n
0000009702 00000 n
0000009807 00000 n
0000009912 00000 n
0000010017 00000 n
0000010122 00000 n
0000010227 00000 n
0000010333 00000 n
0000010439 00000 n
0000010545 00000 n
0000010651 00000 n
0000010757 00000 n
0000010863 00000 n
0000010969 00000 n
0000011075 00000 n
0000011181 00000 n
0000011287 00000 n
0000011393 00000 n
0000011498 00000 n
0000011603 00000 n
0000011707 00000 n
0000011811 00000 n
0000011915 00000 n
0000012019 00000 n
0000012796 00000 n
0000012902 00000 n
0000013008 00000 n
0000013112 00000 n
0000013217 00000 n
0000013323 00000 n
0000013429 00000 n
0000013535 00000 n
0000013641 00000 n
0000013747 00000 n
0000013853 00000 n
0000013959 00000 n
0000014065 00000 n
0000014171 00000 n
0000014277 00000 n
0000014383 00000 n
0000014489 00000 n
0000014595 00000 n
0000014701 00000 n
0000014807 00000 n
0000014913 00000 n
0000015019 00000 n
0000015125 00000 n
0000015229 00000 n
0000015333 00000 n
0000015438 00000 n
0000015542 00000 n
0000015646 00000 n
0000015750 00000 n
0000015855 00000 n
0000015959 00000 n
0000016064 00000 n
0000016330 00000 n
0000016364 00000 n
0000016398 00000 n
0000017221 00000 n
0000017270 00000 n
0000017319 00000 n
0000017368 00000 n
0000017417 00000 n
0000017466 00000 n
0000017515 00000 n
0000017564 00000 n
0000017613 00000 n
0000017662 00000 n
0000017711 00000 n
0000017760 00000 n
0000017809 00000 n
0000017858 00000 n
0000017907 00000 n
0000017956 00000 n
0000018005 00000 n
0000018054 00000 n
0000018103 00000 n
0000018152 00000 n
0000018201 00000 n
0000018250 00000 n
0000018299 00000 n
0000018348 00000 n
0000018397 00000 n
0000018446 00000 n
0000018495 00000 n
0000018544 00000 n
0000018593 00000 n
0000018642 00000 n
0000018691 00000 n
0000018740 00000 n
0000018789 00000 n
0000018838 00000 n
0000018887 00000 n
0000018936 00000 n
0000018985 00000 n
0000019034 00000 n
0000019083 00000 n
0000019132 00000 n
0000019181 00000 n
0000019230 00000 n
0000019279 00000 n
0000019328 00000 n
0000019377 00000 n
0000019426 00000 n
0000019475 00000 n
0000019524 00000 n
0000019573 00000 n
0000019622 00000 n
0000019671 00000 n
0000019720 00000 n
0000019769 00000 n
0000019818 00000 n
0000019867 00000 n
0000019916 00000 n
0000019965 00000 n
0000020014 00000 n
0000020063 00000 n
0000020112 00000 n
0000020341 00000 n
0000020493 00000 n
0000026875 00000 n
0000026897 00000 n
0000027010 00000 n
0000027112 00000 n
0000027132 00000 n
0000027273 00000 n
0000028169 00000 n
0000028190 00000 n
0000028303 00000 n
0000028495 00000 n
0000028516 00000 n
0000028657 00000 n
0000029250 00000 n
0000029271 00000 n
0000029384 00000 n
0000029580 00000 n
0000029601 00000 n
0000029751 00000 n
0000030764 00000 n
0000030785 00000 n
0000030944 00000 n
0000032099 00000 n
0000032121 00000 n
0000032252 00000 n
0000033131 00000 n
0000033152 00000 n
0000033293 00000 n
0000034403 00000 n
0000034425 00000 n
0000034556 00000 n
0000035538 00000 n
0000035559 00000 n
0000035699 00000 n
0000036690 00000 n
0000036711 00000 n
0000036842 00000 n
0000037514 00000 n
0000037535 00000 n
0000037648 00000 n
0000037845 00000 n
0000037866 00000 n
0000037988 00000 n
0000038153 00000 n
0000038173 00000 n
0000038286 00000 n
0000038483 00000 n
0000038504 00000 n
0000038644 00000 n
0000039140 00000 n
0000039161 00000 n
0000039292 00000 n
0000039743 00000 n
0000039764 00000 n
0000039919 00000 n
0000042160 00000 n
0000042182 00000 n
0000042337 00000 n
0000043245 00000 n
0000043266 00000 n
0000043321 00000 n
0000043426 00000 n
0000043570 00000 n
0000043676 00000 n
0000043796 00000 n
0000043905 00000 n
0000044054 00000 n
0000044164 00000 n
0000044271 00000 n
0000044425 00000 n
0000044561 00000 n
0000044658 00000 n
0000044768 00000 n
0000044883 00000 n
0000044996 00000 n
0000045106 00000 n
0000045206 00000 n
0000045364 00000 n
0000045461 00000 n
0000045571 00000 n
0000045669 00000 n
0000045813 00000 n
0000045914 00000 n
0000046025 00000 n
0000046127 00000 n
0000046290 00000 n
0000046405 00000 n
0000046526 00000 n
0000046646 00000 n
0000046771 00000 n
0000046892 00000 n
0000047012 00000 n
0000047122 00000 n
0000047270 00000 n
0000047372 00000 n
0000047488 00000 n
0000047601 00000 n
0000047703 00000 n
0000047853 00000 n
0000047960 00000 n
0000048074 00000 n
0000048187 00000 n
0000048307 00000 n
0000048432 00000 n
0000048542 00000 n
0000048653 00000 n
0000048764 00000 n
0000048866 00000 n
0000049011 00000 n
0000049111 00000 n
0000049224 00000 n
0000049338 00000 n
0000049451 00000 n
0000049560 00000 n
0000049674 00000 n
0000049787 00000 n
0000049887 00000 n
0000050005 00000 n
0000050139 00000 n
0000050236 00000 n
0000050336 00000 n
trailer
<</Size 335/Root 334 0 R/Info 1 0 R>>
startxref
50522
%%EOF

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais