SGML Functions for AthenaMuse 2
by
James C. Gentry
SUBMITTED TO THE DEPARTMENT OF ELECTRICAL ENGINEERING
AND COMPUTER SCIENCE IN PARTIAL FULFILLMENT OF THE
REQUIREMENTS FOR THE DEGREE OF
MASTER OF SCIENCE IN COMPUTER SCIENCE AND ENGINEERING
AT THE
MASSACHUSETTS INSTITUTE OF TECHNOLOGY
JUNE 1996
© 1996 James C. Gentry. All Rights Reserved
The author hereby grants MIT permission to reproduce
and to distribute publicly paper and electronic copies of
this thesis document in whole or in part.
. .....
. ..................................................................................................
Signature of A uthor ......
" 1"epartment of Electrical Engineering and Computer Science
May 28, 1996
Certified by....-.
.............. .... ...............................
Si
Accepted by ............
..................................................................
Steven Lerman
Professor of Civil and Environmental Engineering
Director, Center for Educational Computing Initiatives
t
Thesis Supervisor
.. . .......
.... ...
.... ....
..............................................................................
NJFrederic
R. Morgenthaler
Graduate Officer, Depart ent of Electrical Engineering and Computer Science
OF TEC-HNOLOGY
JUN 1 1 1996
LIUBRARIES
Eng.
SGML Functions for AthenaMuse 2
by
James C. Gentry
Submitted to the Department of Electrical Engineering
and Computer Science on May 28, 1996 in partial
fulfillment of the requirements for the Degree of Master of
Science in Computer Science and Engineering
ABSTRACT
The Standard Generalized Markup Language provides a way to specify markup languages. With
these markup languages, diverse types of information can be organized. SGML makes the storage
and sharing of information easier, and it is being used by an increasingly large number of publishers.
AthenaMuse 2 is a tool used to create multimedia computer programs, which is currently being
developed at the Center for Educational Computing Initiatives of the Massachusetts Institute of
Technology. AM2 uses an object-oriented language called the Application Description Language
(ADL) to script multimedia programs.
This paper describes a group of classes, written for the ADL, which can parse and dissect SGML
documents. These classes, collectively called AM2SGML, will enable the AM2 application
developer to use SGML in his applications, and in the future will possibly provide the base for a
new set of ADL Hypertext Markup Language (HTML) classes.
Thesis Supervisor: Steven Lerman
Title: Professor of Civil and Environmental Engineering; Director, Center for Educational Computing Initiatives
Acknowledgments
There are many people I would like to acknowledge for helping me complete this paper.
First, I would like to thank everyone at the Center for Educational Computing Initiatives. I especially thank Professor Steven Lerman for his guidance through every stage in this project. I also
thank Ana Beatriz Chiquito for first introducing me to CECI.
I would like to thank my Brothers and friends at Pi Lambda Phi, Massachusetts Theta, for
giving me support at the times when I did not happen to be working on this or any other projects.
And finally, I would like to thank my family, for reasons which go without saying.
Table Of Contents
1 M otivation .....................................................................................................................
13
1.1
SGM L ....................................................................................................................
13
1.2
AM 2 .......................................................................................................................
14
1.2.1
1.2.2
14
15
1.3
Better HTML Functions ....................................................................................................
The Current State of HTML in AM2 ................................................................................
SGM L in AM 2 .......................................................................................................
2 Specifications ................................................................................................................
2.1
Purpose...................................................................................................................17
2.2
Class Specifications ...............................................................................................
2.2.1
2.2.2
17
17
The DTD Classes ..............................................................................................................
20
2.2.1.1 The MMdtd Class................................................................................................ 20
2.2.1.2 The MMdtdDocumentType Class................................................................... 22
2.2.1.3 The MMdtdElement Class ...............................................................................
26
2.2.1.4 The MMdtdContentModel Class................................................................... 29
2.2.1.5 The MMdtdAttribute Class ..........................................................................
32
2.2.1.6 The MMdtdEntity Class .................................................................................
36
2.2.1.7 The MMdtdNotation Class ............................................................................
38
2.2.1.8 The MMsgmlSectionMark Class................................................................... 40
2.2.1.9 The MMsgmlComment Class ............................................................................ 41
The Document Instance Classes........................................................................................ 42
2.2.2.1 The MMsgmlDocument Class .......................................................................... 42
2.2.2.2 The MMsgmlElement Class ............................................................................ 44
2.2.2.3 The MMsgmlPCData Class............................................................................... 45
2.2.2.4 The MMsgmlEmpty Class.................................................................................46
2.2.2.5 The MMsgmlAttribute Class........................................................................ 47
3 The AM 2SGM L C++ Classes .....................................................................................
3.1
16
49
YASP......................................................................................................................49
3.1.1
3.1.2
Why YASP? .......................................................................................................................
An Overview of YASP ......................................................................................................
49
50
3.2
Overview of the AM 2SGM L C++ Functions ........................................................
3.3
AM 2SGM L M odule Descriptions ......................................................................... 52
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
50
The Test Function..............................................................................................................
52
The parseSGMLFile Function .....................................................................................
52
The dispatch Function .................................................................................................
54
The SGMLObj ect Class and its Subclasses .................................................................... 56
3.3.4.1 The SGMLDocument Class............................................................................... 56
3.3.4.2 The SGMLElement Class ..............................................................................
57
The Service Functions.......................................................................................................58
3.3.5.1 The eltSt Function ..........................................................................................
58
3.3.5.2 The eltNd Function ..........................................................................................
59
3.3.5.3 The text Function ............................................................................................
59
3.3.5.4
3.3.5.5
3.3.5.6
3.3.5.7
3.3.5.8
3.3.5.9
3.3.5.10
3.3.5.11
3.3.5.12
3.3.5.13
3.3.5.14
3.3.5.15
3.3.5.16
60
The msg Function..............................................................................................
The sGet and sFre Functions..........................................................................61
61
The find Function ...........................................................................................
62
The xEnOp Function ..........................................................................................
The utOpR and utOpW Functions................................................................... 63
63
The utWrt Function ..........................................................................................
63
The utRd Function ...........................................................................................
The utCl and xEnCl Functions......................................................................... 64
64
The xEnRd Function ..........................................................................................
64
The proSt Function .......................................................................................
65
The docNd Function ..........................................................................................
65
The DTDSt Function .......................................................................................
The unimp 1 Fn Function.................................................................................. 65
3.3.6
The MessageHandler Object ......................................................................................
3.3.7
The File Class ........................................................
65
.................................................. 66
4 The Future of SGM L and AM 2 ..................................................................................
67
Appendix A -A Sam ple DTD .........................................................................................
69
Appendix B - Code for AM 2SGM L ..............................................................................
71
B.1
72
test.cc ........................................................
B.2
AM2YASP. h .........................................................................................................
B.3
B.4
72
parseSGMLFile h .................................................
73
parseSGMLFile.cc ...............................................
B.5
74
dispatch h ..........................................................
B.6
75
dispatch .cc ....................................................
B.7
SGMLObject. h .................................................................................................. 77
B.8
77
SGMLObject.cc ..................................................
B.9
78
SGMLDocument. h. .....................................................
B.10
78
SGMLDocument.cc .....................................................
B.11
78
SGMLElement.h ......................................................
B.12
B.13
80
SGMLElement.cc .................................................
81
DTD.h ...................................................................................................................
B.14
DTD.cc ................................................................................................................
81
B.15
eltSt.h ..............................................................................................................
81
B.16
eltSt.cc ...........................................................................................................
81
B.17
eltNd.h ..............................................................................................................
82
B.18
eltNd.cc ...........................................................................................................
82
B.19
re.h .....................................................................................................................
82
72
B.20
text.h ................................................................................................................
83
B.21
pi .h .....................................................................................................................
83
B.22
msg .h ...................................................................................................................
83
B.23
msg .cc ................................................................................................................
83
B.24
sGet.h ................................................................................................................
85
B.25
sGet.cc ..............................................................................................................
85
B.26
sFre .h ................................................................................................................
85
B.27
find .h ................................................................................................................
85
B.28
find . cc ..............................................................................................................
86
B.29
xEnOp . h ..............................................................................................................
88
B.30
xEnOp .cc ...........................................................................................................
88
B.31
utOpR . h ..............................................................................................................
88
B.32
utOpW .h ..............................................................................................................
89
B.33
utOpW .cc ...........................................................................................................
89
B.34
utWrt.h ..............................................................................................................
89
B.35
utWrt.cc ...........................................................................................................
89
B.36
utRd .h ................................................................................................................
90
B.37
utRd .cc ..............................................................................................................
90
B.38
utCl.h ................................................................................................................
90
B.39
xEnRd .h ..............................................................................................................
91
B.40
xEnRd .cc ...........................................................................................................
91
B.41
xEnCl. h ..............................................................................................................
92
B.42
xEnCl. cc ...........................................................................................................
92
B.43
proSt.h ..............................................................................................................
92
B.44
proSt.cc ...........................................................................................................
92
B.45
proNd .h ..............................................................................................................
92
B.46
docNd .h ..............................................................................................................
93
B.47
etySt.h ..............................................................................................................
93
B.48
etySt.cc ...........................................................................................................
93
B.49
etyNd .h ..............................................................................................................
93
B.50
skip .h .................................................................................................................
94
B.51
decSt. h ..............................................................................................................
94
B .52
DTDSt . h ..............................................................................................................
94
B .53
DTDSt .cc ...........................................................................................................
94
B .54
DTDNd . h ..............................................................................................................
94
B .55
dapNd . h ..............................................................................................................
95
95
B .56 unimp lFn .h ..........................................................
B .57
unimplFn .cc ....................................................................................................
95
95
B .58 MessageHandler .h ...................................................
96
B .59 MessageHandler .cc ...................................................
99
B .60
File .h ................................................................................................................
B .61
File .cc ............................................................................................................
101
B .62
notify .h .........................................................................................................
103
B .63
notify .cc .......................................................................................................
103
B .64
publDFileName h .........................................................................................
103
B .65
publDFileName .cc ......................................................................................
103
104
B .66 charsetID .h ........................................................
104
B .67 charsetID .cc ........................................................
B .68
random .h .........................................................................................................
104
B .69
random .cc .......................................................................................................
106
B .70
Makefile .........................................................................................................
107
A ppendix C - Sample Run ............................................................................................
109
List of Tables
TABLE
TABLE
TABLE
TABLE
1.
2.
3.
4.
The AM 2SGM L Classes............................................................................19
M embers of MMdtd...................................................................................22
Members of MMdtdDocumentType ...................................................... 26
Members of MMdtdE lement .................................................................. 29
TABLE 5.
Members of MMdtdContentModel ...................................................... 31
TABLE 6.
TABLE 7.
TABLE 8.
Possible Types of hDe f aul tVa l ............................................................ 34
Members of MMdtdContentModel ...................................................... 35
Members of MMdtdEntity.....................................................................38
TABLE 9.
Members of MMdtdNotation ................................................................ 39
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
Members of MMsgmlSectionMark ...................................................... 41
Members of MMsgmlComment................................................................42
Members of MMsgmlDocument ............................................................. 43
Members of MMsgmlElement ................................................................ 45
Members of MMsgmlPCData .................................................................. 46
Members of MMsgmlPCData .................................................................. 48
The Service Functions................................................................................54
10.
11.
12.
13.
14.
15.
16.
TABLE 17.
YASP M essage Severities ..........................................................................
TABLE 18.
YASP File Classes......................................................................................62
60
1 Motivation
AthenaMuse 2®is an authoring tool for creating multimedia computer programs currently
being developed at the Massachusetts Institute of Technology's Center for Educational Computing Initiatives.'1 This paper describes the design and partial implementation of a set of classes for
AM2 which can be used to manipulate Standard Generalized Markup Language (SGML) documents. This set of classes is collectively called AM2SGML.
1.1 SGML
SGML is an international standard introduced in 1986, described by International Organization for Standardization standard ISO 8879. Because of SGML's many benefits, it is becoming
increasingly popular. Today, it is used by such various organizations as the Department of
Defense, the Association of American Publishers, and the American Trucking Association. It is
gaining widespread acceptance both in the United States and abroad.2
SGML can be used to define the formats of certain types of data using a Document Type
Definition (DTD), by specifying which types of elements the data can contain. The data can then
be marked up, so that the location and arrangements of the elements in the data are made explicit.
SGML allows for more efficient storage of information, it increases the ease of sharing information, and it allows for the easy storage and maintenance of information in databases. 3 In addition,
1. AthenaMuse is a registered trademark of MIT.
2. "Getting Started with SGML: A Guide to the Standard Generalized Markup Language and Its Role in Information
Management," ArborText, 1995.
3. "Getting Started."
SGML is used to define the Hypertext Markup Language (HTML), which is in wide use in the
World Wide Web.
1.2 AM2
AM2 is designed to make the implementation of multimedia applications simpler. One way
in which it does this is through its use of the Application Description Language. The ADL has
classes to display and manipulate a variety of media types, including images, sounds, movies, and
HTML pages.
Currently, the ADL has no functionality for manipulating SGML documents besides classes
which can display HTML pages. While AM2 would be greatly improved with the addition of
classes to handle SGML in general, the original reason for creating these classes was so that
AM2's ability to manipulate HTML pages would be improved.
1.2.1 Better HTML Functions
While AM2 provides basic functions for displaying HTML pages, following links, and so
forth; but it is missing more advanced functions which would be quite useful when writing applications involving HTML. A major problem with the current implementation of the HTML functions is that it is based on software written by a third party. Therefore, the types of functions
dealing with HTML which are available to the application programmer are largely limited to
those that are provided in thee third party library. It is difficult if not impossible to add to or modify these functions. To change this, the implementation of HTML functions for AM2 needs to be
redesigned and re-implemented.
1.2.2 The CurrentState of HTML in AM2
The display of an HTML page can be divided into two stages. First, the HTML source document is parsed into some sort of data structure. In the current HTML functions, this structure is a
linked list. Once the parsing is complete, the structure is passed to a function which displays the
page in a region of a window on the screen. There are drawbacks in the current implementation of
both of these stages.
The linked list structure currently used is not especially convenient to manipulate; because
of this, accessing information about the HTML page is not as simple and possibly not as efficient
as it could be. Creating a better data structure would not only help with this problem, but would
have numerous other benefits as well. Since third-party software would no longer be relied on to
parse HTML into a structure, an HTML file could be parsed the same way as any other SGML
document. By changing the DTD used for HTML, extra features could even be added to HTML.
For example, the idea of defining AM2 classes in HTML has been considered; this would be easier to implement if we handled our own HTML parsing. Also, parts of the HTML structure could
be made visible to ADL application programmers as ADL classes. This would allow programmers an easy way to dynamically manipulate and define HTML pages in applications.
There are also drawbacks in the current functions used to display the HTML data structures.
Right now it is difficult or impossible to change the way that an HTML page is displayed. For
example, properties such as image and text positions and default colors cannot be set by the application programmer. These problem would be solved if custom functions to display HTML were
written. There would be additional benefits as well. For example, arbitrary ADL objects could be
displayed within an HTML page. Also, other types of SGML documents could be displayed using
the HTML display functions. Unfortunately, due to time constraints, the display of these HTML
structures is not in the scope of this project.
1.3 SGML in AM2
Instead of limiting this project to the parsing and display of HTML documents, it made
sense to go one step further, and include within its scope the parsing of general SGML documents
also. With basic SGML support built in to the ADL, the ADL application developer would be able
to make use of SGML in his applications.
Due to the large amount of work involved with the parsing of SGML documents, a full
implementation of the AM2SGML specifications has not been completed. However, a "bare
bones" implementation has been done. The AM2SGML specifications and a description of the
implementation so far are described in this report. Hopefully, the implementation can some day be
completed, and AM2SGML will prove to be a valuable addition to AM2.
2 Specifications
This chapter describes the user interface for the ADL classes which make up AM2SGML.
For a description of AM2 and the ADL, please consult the MIT AthenaMuse Software Consortium's AthenaMuse 2.1 Documentation.1
2.1 Purpose
The classes defined below represent two types of entities - DTDs, and files written in
marked-up text defined by a DTD, which we will call document instances. There is a group of
classes defined for each of these entities. The top-level class MMsgmlDocument represents an
SGML document instance, while MMdtd represents a DTD. A sample DTD has been defined in
Appendix A. This DTD represents a subset of the definition of HTML. 2
2.2 Class Specifications
The specifications of the DTD classes and the SGML document instance classes are given
below. There are a few things to note. First, unless a class is described as immutable, the programmer can set any members of the class at any time, unless otherwise specified. If a class is immutable, then once an object of that class is created, it cannot be changed. As such, members of
immutable classes can be set only when an object of that class is created. Also, all class members
are readable.
1. Margaret Meehan et al., AthenaMuse 2.1 Documentation, Cambridge, MIT AthenaMuse Software Consortium,
1995.
2. Note that this DTD may contain inconsistencies with actual HTML.
Second, none of the classes have any activities. An activity is the way that the ADL programmer can handle events generated by user actions, clock ticks, incoming messages, or other
such outside stimuli. For example, the ADL programmer could speficy that a certain function be
called whenever the user clicks the right mouse button in a certain region of the screen. Due to the
nature of the AM2SGML classes, none of them need to handle events.
Note also that most of the classes have an element hMark. In SGML, a certain section of
text can be marked with the status keywords INCLUDE or IGNORE. These keywords are used
when a document contains sections which should sometimes be ignored, and at other times be
included. For example, assume that we had a textbook expressed as an SGML document. Also
assume that we want to print the student's version and the teacher's version of the textbook from
the same document. A part of the SGML file might look like the following.
Problem 69.
What is the Capital of Louisiana?
<![INCLUDE [Baton Rouge]]>
In the teacher's version of the textbook, we want the answer to the question to be printed. Therefore, we use the SGML fragment given above, and since Baton Rouge is marked with
INCLUDE, it will be printed. In the student's version of the textbook, we do not want the answer
to be there. Therefore, before printing the student's version, we would change INCLUDE to
IGNORE in the above fragment.
3
A marked section looks as follows:
<! [ status-keyword [ marked-section ] ]>
3. "The SGML Primer," SoftQuad, 1995. Note that this and other SGML samples are expressed as a Backus-Naur
Form grammar.
Here, status-keyword is INCLUDE, IGNORE, or a parameter entity which represents INCLUDE or
IGNORE. If a class represents an item that is inside a section marked INCLUDE, then hMark is a
handle to an MMsgmlSectionMark object representing "include." If a class represents an item
that is inside a section marked IGNORE, then hMark is a handle to an MMsgmlSectionMark
object representing "ignore." If a class represents an item that is inside a section marked with a
parameter entity, then hMark is a handle to an MMsgmlSectionMark object representing this
parameter entity. If an item is not in a marked section, then the object which represents it has
hMark equal to an MMsgmlSectionMark object signifying "no mark."
Table 1 gives an listing of all the AM2SGML classes. It also gives a brief description of
each, and tells where each is described in this chapter.
TABLE 1. The AM2SGML Classes
Class Name
Description
Where Described
DTD Classes
MMdtd
Represents an entire DTD. This can contain
comments (MMsgmlComment objects) or
DOCTYPE definitions (MMdtdDocumentType
objects).
Section 2.2.1.1 on page 20
MMdtdDocumentType
Represents a DOCTYPE definition in a DTD.
This can contain entities (MMdtdEntity
object), notations (MMdtdNotation objects),
attribute lists (MMdtdAttribute objects), element declarations (MMdtdElement objects),
and comments (MMsgmlComment objects).
Section 2.2.1.2 on page 22
MMdtdElement
Represents a DTD ELEMENT declaration. It
includes a content model, represented by an
MMdtdCommentModel object.
Section 2.2.1.3 on page 26
MMdtdContentModel
Represents a content model for an ELEMENT
declaration.
Section 2.2.1.4 on page 29
MMdtdAttribute
Represents one attribute of an ELEMENT declaration. Note that each MMdtdAttribute
object represents one item in an ATTLIST declaration.
Section 2.2.1.5 on page 32
MMdtdEntity
Represents an ENTITY declaration in a DTD.
Section 2.2.1.6 on page 36
MMdtdNotation
Represents a DTD NOTATION declaration.
Section 2.2.1.7 on page 38
TABLE 1. The AM2SGML Classes
Class Name
Description
Where Described
Document Instance Classes
MMsgmlDocument
Represents an entire document instance. This
corresponds to a DTD (MMdtd object) which
describes the document instance. This contains a
top-level element (MMdtdElement object).
Section 2.2.2.1 on page 42
MMsgmlElement
Represents an element in a document instance.
This corresponds to an ELEMENT declaration
(MMdtdElement object) in a DTD. This contains any number of sub-elements and text
strings (MMsgmlPCData objects), or an MMsgmlEmpty object, which represents nothing at
all.
Section 2.2.2.2 on page 44
MMsgmlPCData
Represents text data of type #PCDATA in an element.
Section 2.2.2.3 on page 45
MMsgmlEmpty
Represents the lack of data in a document
instance element. In other words, this corresponds to the content model EMPTY.
Section 2.2.2.4 on page 46
MMsgmlAttribute
This represents an attribute of a document
instance element. This corresponds to an item in
a DTD ATTLIST declaration (an MMdtdAttribute object), which states which possible
value this attribute can take.
Section 2.2.2.5 on page 47
Classes Used in DTDs or Document Instances
MMsgmlSectionMark
MMsgmlComment
Represents a section mark: INCLUDE, IGNORE,
or none.
Represents a comment in a DTD or document
instance.
Page 18; Section 2.2.1.8 on
page 40
Section 2.2.1.9 on page 41
2.2.1 The DTD Classes
Following are the classes used to describe various components of a DTD. Also described
are the classes that can be used in both a DTD or a document instance.
2.2.1.1 The MMdtd Class
This represents a DTD in its entirety. A DTD consists of one or more concurrent documenttype (DOCTYPE) declarations and possibly comments. 4 Therefore, the MMdtd class consists
mainly of handles to MMdtdDocumentType classes, which represent DOCTYPE declarations,
4. Concurrent DOCTYPE definitions are different ways of organizing the same document. This is how one can specify overlapping tags in SGML document instances.
and MMsgmlComment classes, which represent SGML comments. 5 The specification for MMdtd
is given below.
class MMdtd
Overview
MMdtd is a class of mutable objects which describe a group of concurrent DOCTYPE declarations.
Methods
upon Construct: list els, handle hMarkArg
Requires: The elements in els are handles to either MMdtdDocumentType objects or
MMsgmlComniment objects. els must contain at least one MMdtdDocumentType object.
hMarkArg is a handle to an MMsgmlSectionMark object.
Effects: Creates a new MMdtd object containing the DOCTYPE declarations given in els (as
well as the comments), and with the marking specified by hMarkArg.
upon ConstructFromFile: handle hFileStream
Requires: hFileStream is a handle to a readable IOfile object.
Effects: Creates an MMdtd object, from the DTD specified in the file in hFileStream.
upon ConstructFromStream: handle hWebStream
Requires: hWebStream is a handle to an IOwebStream subclass.
Effects: Creates an MMdtd object, from the DTD specified by the stream IOwebStream.
upon ConstructFromString: string s
Effects: Creates an MMdtd object from string s.
on DocTypes: return list
Effects: Returns a list of handles to MMdtdDocumentType objects, representing the DOCTYPE declarations in sel f.
on Comments: return list
Effects: Returns a possibly empty list of handles to MMsgmlComment objects, representing
the comments in sel f.
on AddDocType: handle hNewDocType
Requires: hNewDocType is a handle to an MMdtdDocumentType.
Modifies: sel f.
Effects: Adds the document type declaration corresponding to hNewDocType to the "end" of
self.
5. C. M. Sperberg-McQueen, and Lou Burnard, editors, Guidelinesfor Electronic Text Encoding and Interchange:
Draft Version 2, 1993, p. 23.
on RemoveDocType: handle hDoc return boolean
Requires: hDoc is a handle to an MMdtdDocumentType.
Modifies: self, hDoc.
Effects: Removes the document type hDoc from the DTD self. If hdoc was not present in
self, does nothing and returns FALSE. Otherwise returns TRUE.
on AddComment: handle hNewComment
Requires: hNewComment is a handle to an MMsgmlComment.
Modifies: sel f.
Effects: Adds the comment corresponding to hNewComment to the "end" of self.
on RemoveComment: handle hComment return boolean
Requires: hComment is a handle to an MMsgmlComment.
Modifies: self, hComment.
Effects: Removes the comment hComment from the DTD self. If hComnment was not
present in self, does nothing and returns FALSE. Otherwise returns TRUE.
on Unparse: return string
Effects: Returns a string representing self.
Members
The members of the class MMdtd are given in Table 2.
TABLE 2. Members of MMdtd
Member
Type
Description
docTypeDecis
list
A list of handles to MMdtdDocumentType or MMsgmlConmment
objects. Each of these represents a concurrent document-type declaration (or a comment); the order of these components in the list is
the same as their order in the DTD.
hMark
handle
A handle to MMsgmlSectionMark. The marking of the declara-
tion.
Activities
none.
2.2.1.2 The MKdtdDocumentType Class
This represents the information contained within a DOCTYPE declaration in a DTD. A
DOCTYPE declaration has the following form:
<! DOCTYPE name [ item+ ] > I <! DOCTYPE name [ system "file "] [item* ] >
Each item is an entity, notation, attribute list, or element declaration. 6 Iffile is absent, then the
document type is defined based on the items. Otherwise, it is defined based on the concatenation
of the items and the declaration in file. In this case, there may be no items. The specification for
MMdtdDocumentType is given below.
class MMdtdDocumentType
Overview
An MMdtdDocumentType is a mutable object which represents a DOCTYPE declaration in a
DTD.
Methods
upon Construct: string nameArg, handle hParentArg, list els,
handle hMarkArg
Requires: The elements in els are handles to MMdtdEntity, MMdtdNotation, MMdtdAttribute, MMdtdElement, or MMsgmlComment objects. els must contain at
least one MMdtdElement object whose name is the same as the argument nameArg.
hMarkArg is a handle to an MMsgmlSectionMark object. hParentArg is a handle to
an MMdtd.
Modifies: hParentArg.
Effects: Creates a new MMdtdDocumentType object containing the components given in
els and a mark corresponding to hMarkArg; ifhParentArg is not NULL, then self is
treated as if it were declared in the DTD represented by hParentArg, and self is automatically added to hParentArg.
upon ConstructFromDocType: handle hBaseDocType,
handle hParentArg, list els, handle hMarkArg
Requires: hBaseDocType is a handle to an MMdtdDocumentType object. hMarkArg is
a handle to an MMsgmlSectionMark object. hParentArg is a handle to an MMdtd
object or NULL.
Modifies: hThisParent hParentArg.
Effects: Creates an MMdtdDocument object, from hBaseDocType plus the elements in
els and with a mark corresponding to hMarkArg. If hParentArg is not NULL, then
self is treated as if it were declared in the DTD represented by hParentArg, and self
is automatically added to hParentArg.
6. Sperberg-McQueen, pp. 23-24.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMdtd object, or NULL.
Modifies: hContext.
Effects: Creates an MMdtdDocumentType object from string s. If hContext is not NULL,
then self is treated as if it were declared in the context of the DTD corresponding to
hContext.
on AllItems: return list
Effects: Returns a list of handles to all the items in the MMdtdDocumentType, including
those declared in a file referenced by a SYSTEM reference. 7 Note that these can include
handles to MMdtdEntity, MMdtdNotation, MMdtdAttribute, MMdtdElement,
and MMsgmlComment objects.
on Entities: return list
Effects: Returns a list of handles to MMdtdEnt i ty objects, representing the ENTITY declarations in s e 1 f.
on UnusedEntities: return list
Effects: Returns a list of handles to MMdtdEntity object, representing the ENTITY declarations in self which are not used. An entity would not be used if there is another entity
8
within the DOCTYPE declaration with the same name.
on Notations: return list
Effects: Returns a list of handles to MMdtdNotation objects, representing the NOTATION
declarations in s e 1 f.
on Atts: return list
Effects: Returns a list of handles to MMdtdAttribute objects, representing the ATTLIST
declarations in sel f.
on Els: return list
Effects: Returns a list of handles to MMdtdElement objects, representing the ELEMENT declarations in s e 1 f.
on RedundantElNames: return list
Effects: Returns a list of strings, consisting of the names which are used for more than one
element.
on BaseEl: return handle
Effects: Returns a handle to an MMdtdElement object, representing the highest-level element in sel f. This element must have the same name as sel f.
on Comments: return list
Effects: Returns a possibly empty list of handles to MMsgmlComment objects, representing
the comments in sel f.
7. SYSTEM references are described on page 36.
8. If there are two ENTITY declaration with the same name, the first one is used. This means that if a given name is
used for an ENTITY declaration in an explicitly declared entity as well as in an entity referenced with a SYSTEM
clause, then the explicitly declared entity is used.
on AddEntity: handle hNewEntity
Requires: hNewEnt i ty is a handle to an MMdtdEnt i ty.
Modifies: s e 1 f.
Effects: Adds hNewEntity to the "end" of s e 1 f.
on RemoveEntity: handle hEntity return boolean
Requires: hEntity is a handle to an MMdtdEntity, and is an entity in the document type
self.
Modifies: self, hEntity
Effects: Removes the entity hEnt i ty from document type sel f. If hEnt i ty was not
present in self, does nothing and returns FALSE. Otherwise returns TRUE.
on AddNotation: handle hNewNotation
Requires: hNewNotation is a handle to an MMdtdNotation.
Modifies: sel f.
Effects: Adds hNewNotation to the "end" of self.
on RemoveNotation: handle hNotation return boolean
Requires: hNotation is a handle to an MMdtdNotation, and is a notation in the document type self.
Modifies: self, hNotation
Effects: Removes the notation hNotation from document type sel f. If hNotation was
not present in self, does nothing and returns FALSE. Otherwise returns TRUE.
on AddAtt: handle hNewAtt
Requires: hNewAtt is a handle to an MMdtdAttribute.
Modifies: s e 1 f.
Effects: Adds hNewAtt to the "end" of sel f.
on RemoveAtt: handle hAtt return boolean
Requires: hAtt is a handle to an MMdtdAttribute, and is an attribute in the document
type self.
Modifies: self, hAtt
Effects: Removes the attribute hAtt from document type self. If hAtt was not present in
self, does nothing and returns FALSE. Otherwise returns TRUE.
on AddEl: handle hNewEl
Requires: hNewEl is a handle to an MMdtdElement.
Modifies: s e 1 f.
Effects: Adds hNewE1 to the "end" of self.
on RemoveEl: handle hEl return boolean
Requires: hEl is a handle to an MMdtdElement, and is an element in the document type
self.
Modifies: sel f , hEl
Effects: Removes the element hEl from document type self. If hEl was not present in
self, does nothing and returns FALSE. Otherwise returns TRUE.
on AddComment: handle hNewComment
Requires: hNewComment is a handle to an MMsgmlComment.
Modifies: sel f.
Effects: Adds hNewComment to the "end" of self.
on RemoveComment: handle hComment return boolean
Requires: hComment is a handle to an MMsgmlComment, and is a comment in the document type self.
Modifies: self, hComment
Effects: Removes the comment hComment from document type self. If hComment was
not present in self, does nothing and returns FALSE. Otherwise returns TRUE.
on Unparse: return string
Effects: Returns a string representing self.
Members
The members of the class MMdtdDocumentType are given in Table 3.
TABLE 3. Members of MMldtdDocumentType
Member
Type
Description
name
string
The name of the declaration.
systemName
string
The "reference name" of this MMdtdDocumentType. This is the
name that is used if this MMdtdDocumentType is referenced
using the SYSTEM clause of another DOCTYPE declaration.
hSystemRef
handle
A handle to an MMdtdDocumentType. If self contains a SYSTEM
reference to another DOCTYPE declaration, then hSystemRef
represents this declaration.
items
list
A list of handles to the elements in the DOCTYPE declaration. This
does not include elements referenced by a SYSTEM clause.
hMark
handle
A handle to MMsgmlSectionMark. The marking of the declaration.
hParent
handle
A handle to an MMdtd. The DTD object in which this declaration is
found.
Activities
none.
2.2.1.3 The MMdtdElement Class
The MMdtdElement class models an ELEMENT declaration in a DTD. An element decla9
ration has the following form:
9. "The SGML Primer."
< ! ELEMENT element-type beginning-tag-optional?end-tag-optional?content-model
[inclusion-list] [exclusion-list] >
Here, element-type is the name of the element. beginning-tag-optional?and end-tagoptional?state whether the beginning and end tags respectively must be included in an element of
this type in an SGML document instance. If the beginning tag is required, then beginning-tagoptional?is - (a dash); otherwise, it is O (the letter). end-tag-optional?works the same way. content-model specifies exactly what kinds of elements can be included in element-type, and in what
order.
inclusion-listand exclusion-listare exceptions; an inclusion exception is an element that can
be included anywhere in the current content model, and an exclusion exception is an element that
cannot be included in the content model. The two lists can appear in any order. An inclusion list
has the form
+ ( inc-elt
I inc-elt2 I inc-elt3
I...
inc-elt, )
while an exclusion list has the form
-( exc-elt,
I exc-elt2 I exc-elt3
...
exc-eltm)
where the inc-elts and exc-elts are element names. 10
For example, consider the following element declaration (taken from the sample DTD on
line 19 on page 69).
<!ELEMENT HTML 0 0 &HTMLContent; +(EM)>
10.Sperberg-McQueen, pp. 13-14.
Both the beginning and end tags are optional. The content model is &HTMLContent, which is an
entity representing the text (HEAD,
BODY). The inclusion list consists of the element EM, and
there is no exclusion list. Consider also the declaration of the the TITLE element (taken from the
sample DTD on line 26 on page 69).
<!ELEMENT TITLE - - #PCDATA -(EM)>
Both the beginning and end tags are required, and the content model is #PCDATA; the exclusion
list consists of the element EM. The specification for MMdtdElement is given below.
class MMdtdElement
Overview
An MMdtdElement is a mutable object representing an ELEMENT declaration in a DTD.
Methods
upon Construct: string name, handle hParentArg,
boolean isBeginOptional, boolean isEndOptional,
handle hContentModelArg, list includeExs, list excludeExs,
handle hMarkArg
Requires: hParentArg is a handle to an MMdtdDocumentType object or is NULL.
hContentModelArg is a handle to an MMdtdContentModel object, includeExs
and excludeExs are lists of handles to MMdtdElement objects. hMarkArg is a handle
to an MMsgmlSectionMark object.
Modifies: hParentArg.
Effects: Creates a new MMdtdElement object. The beginning and ending tags of the specified element can be omitted if isBeginOptional and isEndOptional are TRUE,
respectively. The element specified can contain the data corresponding to hContentModelArg, and can include the elements in includeExs, but not this in excludeExs. The
element declaration has the mark corresponding to hMarkArg. If hParentArg is not
NULL, then the element declaration is defined in the context of the document type defined
by hParentArg.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMdtd object or NULL.
Modifies: hContext.
Effects: Creates an MMdtdElement object from s. If hContext is not NULL, then self is
treated as if it were declared in the context of the DTD corresponding to hContext.
on IsRedundant: return boolean
Effects: Returns TRUE iff self is defined in a document type in which another element with
the same name as self is defined.
on Unparse: return string
Effects: Returns a string representing self.
Members
The members of MMdtdElement are given in Table 4.
TABLE 4. Members of MMdtdElement
Member
Type
Description
isBeginOpt
boolean
TRUE iff the beginning tag of an element defined by self is
optional.
isEndOpt
boolean
TRUE iff the ending tag of an element defined by self is optional.
hContent-
handle
A handle to an MMdtdContentModel object. This specifies
exactly what types of data an element defined by self can contain.
Model
hMark
handle
A handle to MMsgmlSectionMark. The marking of the declaration.
hParent
handle
A handle to an MMdtdDocumentType, or NULL. The document
type in which self is defined, if any.
inclusionExs
list
A list of elements which can be included anywhere within the content model of self.
exclusionExs
list
A list of elements which can be included anywhere within the content model of sel f.
atts
list
The list of all attributes defined for self.
Activities
none.
2.2.1.4 The MMdtdContentModel Class
An MMdtdContentModel element represents a content model in a DTD. A content
model specifies exactly what type of data can be contained in an element.
There are a couple of "base types" of data. These are denoted by EMPTY (which signifies no
data), and #PCDATA, which signifies text.
In addition to these base types, more complex types can be created by combining base types
and elements with "operators." The following are the operators defined for content models (note
that e can refer to a base type, an element, or a combination thereof).
*
e?
" e*
*
e+
- This means that data of type e may or may not occur. In the MMdtdContent model
class, this operator is called ' optional.
- This means that any number of instances (including zero) of data of type e may
occur. This element is called ' optionalRepeatable.
- This means that one or more instances of data of type e must occur. This element is
called ' requiredRepeatable.
* el , e2 - This means that data of type e1 followed by data of type e2 must occur. This element
is called ' sequential.
* e1 &e2 - This means that data of type e1 and data of type e2 must occur, in any order. This element is called ' and.
* el I e2 - This means that either data of type e1 or data of type e2 must occur. This element is
called ' or.
In addition to these operators, parentheses may be used for grouping. The specification for
MMdtdContentModel is given below.
class MMdtdContentModel
Overview
An MMdtdContent model is an immutable representation of an SGML content object.
Methods
upon ConstructEmpty
Effects: Creates an MMdtdContentModel corresponding to EMPTY.
upon ConstructPCData
Effects: Creates an MMdtdContentModel corresponding to #PCDATA.
upon ConstructEl: handle hEl
Effects: Creates an MMdtdContentModel corresponding to the element hEl.
upon ConstructComplex: string opArg, list args
Requires: args is a list of handles to MMdtdContentModel objects. opArg is
'optional, 'optionalRepeatable, 'requiredRepeatable, 'sequential,
' and, or ' or.
Effects: Creates an MMdtdContentModel object corresponding to the operator opArg
applied to the arguments in args. If there are extra arguments in args (e.g. if opArg is
' and, and args has length greater than one) then the extra arguments are ignored.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMdtd object, or NULL.
Effects: Creates an MMdtdContentModel object from s. If hContext is not NULL, then
self is treated as if it were declared in the context of the DTD corresponding to hContext.
on IsEmpty: return boolean
Effects: Returns TRUE iff self refers to the EMPTY content model.
on IsPCData: return boolean
Effects: Returns TRUE iff self refers to the #PCDATA content model.
on IsEl: return boolean
Effects: Returns TRUE iff self refers to an element.
on IsComplex: return boolean
Effects: Returns TRUE iff self refers to a complex content model, formed by an operator and
one or more other content models.
on GetEl: return handle
Requires: ('IsEl => self) == TRUE.
Effects: Returns a handle to an MMdtdElement, the element corresponding to self.
on GetOp: return string
Requires: ('IsComplex => self) == TRUE.
Effects: Returns the operator of self, as a string. The possible values are the same as those
which can be used for the string argument to ConstructComplex.
on GetArgs: return list
Requires: ('IsComplex => self) == TRUE.
Effects: Returns the arguments of self, as a list of handles to MMdtdContentModel.
on Unparse: return string
Effects: Returns a string representing self.
Members
The members of MMdtdContentModel are given in Table 5.
TABLE 5.Members of MMdtdContentModel
Member
Type
Description
modelType
string
This is the type of the content model - one of ' empty, ' PCData,
' el, or ' complex.
Activities
none.
For example, in the code in Appendix A, on line 31, the content model for the BODY element is (HR I #PCDATA) *. In order to manually create an MMdtdContentModel object
representing this, the following code segment could be used.
1 MMdtdContentModel 'ConstructPCData => PCDataModel;
// Create the object for #PCDATA
2
3 MMdtdContentModel {'ConstructEl, hHR} => HRModel;
// This assumes hHR is the handle to an MMdtdElement
4
// object representing the HR element
5
6 MMdtdContentModel {'ConstructEl, hP} => PModel;
// This assumes hP is the handle to an MMdtdElement
7
// object representing the P element
8
9 MMdtdContentModel
{'ConstructComplex, 'or, {&HRModel, &PCDataModel}} =>
10
HROrPCDataModel;
11
#PCDATA)
// This represents (HR
12
13MMdtdContentModel
{'ConstructComplex, 'or, {&HROrPCDataModel, &PModel}} =>
14
unrepeatedModel;
15
#PCDATA I P)
// This represents (HR
16
17MMdtdContentModel {'ConstructComplex, 'optionalRepeatable,
{&unrepeatedModel} } => bodyContentModel;
18
#PCDATA)*
// This represents (HR
19
2.2.1.5 The MMdtdAttribute Class
An MMdtdAttribute object represents an attribute of an element in a DTD. In a DTD, a
list of attributes can be specified for each element. For example, in the DTD given in Appendix A,
the ATTLIST declaration on line 39 describes the attributes for the element P: align and nowrap. There would be a separate MMdtdAttribute object for each of these.
11
An attribute declaration has the form
<!ATTLIST element-type
11."The SGML Primer."
attribute-name, attribute-value1 default-value1
attribute-name2 attribute-value2 default-value2
attribute-name3 attribute-value3 default-value3
attribute-namen attribute-valuen default-valuen
Here, element-type is the element that the attribute corresponds to. Each attribute-nameis the
name of the attribute. Each attribute-valuedescribes which values the attribute can take. This can
be one of CDATA, ENTITY, ENTITIES, ID, IDREF, IDREFS, NAME, NAMES, NMTOKEN,
NMTOKENS, NOTATION, NUMBER, NUMBERS, NUTOKEN, NUTOKENS, or a list of enumerated
types. 12 Each default-value is the default value of the attribute. This can be one of the following: 13
* Data of the type described by the corresponding attribute-value.
* # IMPLIED, which means that this attribute does not need to be specified when an instance of
the element element-type is defined.
* #REQUIRED, which means that when an element of type element-type is defined, the value of
this attribute must be given.
* #CURRENT, which means that when an element of type element-type is defined, the value of
this attribute is the same as the value of the attribute in the most recently defined element of
type element-type, unless otherwise specified.
For example, in the sample DTD, the attribute align of element P can take the values lef t,
center, right, or justify. By default it takes the value left.
The specification for MMdtdAttribute is given below.
12."The SGML Primer."
13."The SGML Primer."
class MMdtdAttribute
Overview
An MMdtdAttribute is an immutable representation of an attribute of an SGML class.
Methods
upon ConstructType: handle hEl, string nameArg,
string attTypeArg, string defaultStat, any hDefaultVal
Requires: hEl is a handle to an MMdtdElement. attTypeArg is one of ' cData,
'entity,'entities, 'ID, 'IDRef, 'IDRefs, 'name,'names,'nmToken,
'nmTokens,'notation,'number,'numbers, 'nuToken,or 'nuTokens.
defaultStat isone of 'implied, 'required, 'current,or 'given.If
defaultStat is 'given, then hDefaultVal is not NULL, and has type corresponding to the entry in Table 6.
Modifies: hEl.
Effects: Creates an MMdtdAttribute for element hE1. The attribute has name nameArg,
and has type corresponding to attTypeArg. If defaultStat is 'given, then the
attribute has the default value represented by hDe f aultVal, otherwise its default status is
given by defaultStat.
TABLE 6. Possible Types of hDefaultVal
Type of value (e.g.
Value of attType (or thisAttType)
hDefaultVal)
'cData
string
'entity
string
'entities
list
'ID
string
'IDRef
string
'IDRefs
list
'name
string
'names
list
'nmToken
string
'nmTokens
list
'notation
handle to MMdtdNotation
'number
integer
'numbers
list of integers
'nuToken
string
'nuTokens
list
of strings
of strings
of strings
of strings
of strings
upon ConstructEnum: handle hEl, string nameArg, list vals,
string defaultStat, string defaultVal
Requires: hEl is a handle to an MMdtdElement. defaultStat is one of ' implied,
'required, ' current, or ' given. vals is a list of strings. If defaultStat is
'given, then defaultVal is not empty, and is equal to an element of vals.
Modifies: hEl.
Effects: Creates an MMdtdAttribute for element hEl. The attribute has name nameArg,
and can have a value of one of the elements of vals. If defaultStat is 'given, then
the attribute has the default value defaultVal, otherwise its default status is given by
defaultStat.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMdtd object, or NULL.
Effects: Creates an MMdtdAttribute object from s. If hContext is not NULL, then
self is treated as if it were declared in the context of the DTD corresponding to hContext.
on IsType: return boolean
Effects: Returns TRUE iff self is not of an enumerated type.
on IsEnum: return boolean
Effects: Returns TRUE iff self is of an enumerated type.
on Unparse: return string
Effects: Returns a string representing self.
Members
The members of MMdtdContentModel are given in Table 7 on page 35.
TABLE 7. Members of MMdtdContentModel
Member
Type
Description
hEl
handle
If self is not of an enumerated type and defaultStat is
' given, then this is the default value of self. It has the type
given in Table 6 on page 34.
name
string
The name of the attribute.
attType
string
The type of the attribute; one of the values given in Table 6 on
page 34.
defaultStat
string
One of 'implied, 'required, 'current,or 'given.
enumVals
list
If self is an enumerated type, then this is a list of the possible val-
ues of self. Otherwise, it should be empty.
defaultVal
handle
If self is not an enumerated type and defaultStat is ' given,
the default value of self. It has the type given in Table 6 on
page 34. If self is an enumerated type, this is a handle to a
string, representing the default value of self.
Activities
none
2.2.1.6 The MMdtdEntity Class
An MMdtdEntity represents an entity in SGML. An entity can be a parameter entity,
which means that it can be used in SGML declarations, or not.14
15
An entity has the form
< !ENTITY [%] entity-name [SYSTEM] "replacement-entity-text" [SUBDOC]
[NDATA notation-name] >
If the percent sign (%)is included, then the entity is a parameter entity.
If SYSTEM is not included, then wherever "&entity-name;" appears in a document
described by the DTD, it will be replaced by replacement-entity-text.If SYSTEM is included, then
wherever "&entity-name; " appears in a document described by the DTD, it will be replaced by
the contents of the file replacement-entity-text. If SUBDOC is included in addition to SYSTEM,
16
then replacement-entity-textrepresents an SGML document instance with its own DTD.
If NDATA is included (along with SYSTEM), then notation-name represents a notation,
which in turn represents a method for interpreting a file. This method would be used to interpret
the file replacement-entity-text.17 The following is an example of such a declaration:
<!NOTATION gif SYSTEM "/usr/bin/gifViewer">
<!ENTITY mePict SYSTEM "/mit/jcgentry/me.gif" NDATA gif>
14.Sperberg-McQueen, p. 22.
15."The SGML Primer."
16."The SGML Primer."
17."The SGML Primer."
Wherever mePic t was found in a document instance, it would be taken to mean the file
/mit / j cg entry/me . gif. Furthermore, it would be understood that this file can be read by
the program /usr/bin/gifViewer.
Examples of entity declarations are given starting on line 8 in the sample DTD in
Appendix A. The specification of the MMdtdEntity class is given below.
class MMdtdEntity
Overview
An MMdtdEntity object is an immutable representation of an SGML ENTITY declaration.
Methods
upon Construct: string nameArg, handle hParentArg,
string hValArg, boolean isParameter, boolean isSystem,
boolean isSubdoc, handle hNotationToUse
Requires: hParentArg is NULL or a pointer to an MMdtdDocumentType object. hNotationToUse is NULL or a pointer to an MMdtdNotation object.
Modifies: hParentArg.
Effects: Creates an MMdtdEntity named nameArg, with value hValArg. If isParameter is TRUE, then it is a parameter entity; if isSystem is TRUE, then it is a system entity,
with hValArg representing a file name. If hParentArg is not NULL, then the entity declaration is defined in the context of the document type defined by hParentArg. If
isSystem and isSubdoc are both TRUE, then hValArg represents an SGML file with
its own DTD. If hNotationToUse is not NULL, then it represents the notation which
should be used to interpret the file represented by hValArg.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMdtd object, or NULL.
Effects: Creates an MMdtdAttribute object from s. If hContext is not NULL, then
self is treated as if it were declared in the context of the DTD corresponding to hContext.
on Unparse: return string
Effects: Returns a string representation of self.
Members
The members of MMdtdEntity are given in Table 8 on page 38.
TABLE 8. Members of Mdtfdntity
Member
Type
Description
isParameter
bool-
TRUE iff self is a parameter entity.
ean
isSystem
boolean
TRUE iff self isa system entity
name
string
The name of the entity.
isSubdoc
boolean
TRUE iff val represents an SGML file with its own DTD.
val
string
the value of the entity.
hNotation
handle
A handle to an MMdtdNotation (or NULL). The notation used to
interpret val.
Activities
none
For example, the entity on line 8 on page 69 could be created with
MMdtdEntity
{'Construct, 'HTMLContent, NULL, "(HEAD, BODY)" TRUE,
FALSE,
FALSE, NULL} => myEntity;
The entity on line 13 on page 69 could be created with
MMdtdEntity {'Construct, 'infoFile, NULL,
"/usr/local/html.info", FALSE, TRUE, NULL} => myEntity2;
2.2.1.7 The MMdtdNotation Class
The MMdtdNotation class represents an SGML notation. A notation is a technique used
18
to process a type of data which could be included in an SGML document.
A notation has the following form: 19
18."The SGML Primer."
19."The SGML Primer."
< !NOTATION notation-name SYSTEM "system-identifier" >
For example, on line 48 of the sample DTD, a notation called eq is defined, and associated with
the file /usr/bin/eqView. This presumably means that equation data can be included in a
document instance of this DTD, and that data could be processed using the program
/usr /bin/eqView. The specification for MMdtdNotat ion is given below.
class MMdtdNotation
Overview
An MMdtdNotation object is an immutable represents a NOTATION declaration in an SGML
DTD.
Methods
upon Construct: string nameArg, handle hParentArg, string valArg
Requires: hParentArg is a handle to an MMdtdDocumentType object, or NULL.
Modifies: hParentArg.
Effects: Creates an MMdtdNotation with name nameArg and value valArg. If
hParentArg is not NULL, then the notation declaration is defined in the context of the
document type defined by hParentArg.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMdtd object, or NULL.
Effects: Creates an MMdtdNotation object from s. If hContext is not NULL, then self
is treated as if it were declared in the context of the DTD corresponding to hContext.
on Unparse: return string
Effects: Returns a string representation of self.
Members
The members of MMdtdNotation are given in Table 9 on page 39.
TABLE 9. Members of MKdtdNotation
Member
Type
Description
name
string
The name of the notation.
val
string
The value of the notation.
hParent
handle
A handle to an MMdtdDocumentType object. The document type
in which the notation is declared.
Activities
none.
2.2.1.8 The MMsgmlSectionxark Class
As described on page 18, sections of a DTD or a document instance can be marked. An
MMsgmlSectionMark object represents one of these marks. The specification of MMsgmlSectionMark is given below.
class MMsgmlSectionMark
Overview
An MMsgmlSectionMark object is an immutable representation of an SGML section mark.
Methods
upon ConstructIgnore
Effects: Creates a section mark corresponding to IGNORE.
upon ConstructInclude
Effects: Creates a section mark corresponding to INCLUDE.
upon ConstructEntity: handle hEntity
Requires: hEnt i ty is a handle to an MMdtdEnt i ty object.
Effects: Creates a section mark corresponding to the entity represented by hEntity.
upon ConstructNone
Effects: Creates a section mark corresponding to the absence of a section mark. i.e., if a section is marked with this section mark, then it is as if the section is not marked at all. (In
effect, this is the same as marking the section with INCLUDE.)
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMdtd object, or NULL.
Effects: Creates an MMsgmlSectionMark object from s. If hContext is not NULL, then
self is treated as if it were declared in the context of the DTD corresponding to hContext.
on IsIgnore: return boolean
Effects: Returns TRUE iff s e 1 f corresponds to the IGNORE mark.
on IsInclude: return boolean
Effects: Returns TRUE iff s e 1 f corresponds to the INCLUDE mark.
on IsEntity: return boolean
Effects: Returns TRUE iff self corresponds to an entity.
on Unparse: return string
Effects: Returns a string representation of self.
Members
The members of MMsgmlSectionMark are given in Table 10.
TABLE 10. Members of MMsgmlsectionmark
Member
Type
Description
markType
string
The type of mark this is. One of ' include, ' ignore, 'none, or
' ent i ty.
markEntity
handle
If self corresponds to an entity, this is the MMdtdEntity object
representing that entity.
Activities
none
2.2.1.9 The MMsgmlComment Class
This class represents a comment in a DTD or in an SGML document instance. Its specification is given below.
class MMsgmlComment
Overview
An MMsgmlComment is an immutable object representing an SGML comment.
Methods
upon Construct: string textArg
Effects: Creates a comment with text textArg.
upon ConstructFromString: string s
Effects: Creates an MMsgmlComment from the string s.
on Unparse: return string
Effects: Returns the string representation of s e 1 f.
Members
The members of MMsgmlComment are given in Table 11.
TABLE 11. Members of Magm1Coment
Member
Type
Description
text
string
The text of the comment.
Activities
none
Note that MMsgmlComment has two similar constructors. Construct takes the body of
a comment as its argument. For example,
MMsgmlComment {'Construct, "This is my comment text"} =>
myComment
The constructor ConstructFromString, on the other hand, takes the comment body plus the
comment delimiters, as follows:
MMsgmlComment { 'ConstructFromString,
"<!-- This is my comment text -- >" } => myComment
2.2.2 The Document Instance Classes
The following are the classes which represent an SGML document instance.
2.2.2.1 The MsgmlDocument Class
This class represents a document instance as a whole. It consists mainly of a top-level element instance. An MMsgmlDocument object should also contain a pointer to an MMdtd which
describes the object.The specification for MMsgmlDocument is given below.
class MMsgmlDocument
Overview
An MMsgmlDocument is a mutable representation of an SGML document instance.
Methods
upon Construct: handle hDTDArg, handle hTopEl
Requires: hDTDArg is a handle to an MMdtd object. hTopEl is a handle to an MMsgmlClass object.
Effects: Creates an MMsgmlDocument with data correponding to hTopClass.
upon ConstructFromFile: handle hFileStream
Requires: hFileStream is a handle to a readable IOfile object.
Effects: Creates an MMsgmlDocument from the data in hFileStream.
upon ConstructFromStream: handle hWebStream
Requires: hWebStream is a handle to an IOwebStream subclass.
Effects: Creates an MMsgmlDocument object from the data in hWebStream.
upon ConstructFromString: string s
Effects: Creates an MMsgmlDocument object from s.
on IsGood: return boolean
Effects: Returns TRUE iff self is a valid document instance. (This means, in part, that the
top-level element can be properly described by the DTD).
on Unparse: return string
Effects: Returns a string representation of self.
Members
The members of MMsgmlDocument are given in Table 12.
TABLE 12. Members of MMsgmlDocument
Member
Type
Description
hDTD
handle
hTop
handle
A handle to an MMdtd object. The DTD describing the document
instance.
A handle to an MMdtdElement. The top-level element.
Activities
none
2.2.2.2 The MsgmlElement Class
This represents a SGML element instance. It consists of a "list" consisting of items which
can include other elements, text data represented by MMsgmlPCData objects, or nothing at all,
which is represented by an MMsgmlEmpty object.
An element can also contain a list of attributes. An attribute in an element instance is represented by an MMsgmlAttribute object. The specification for MMsgmlElement is given
below.
class MMsgmlElement
Overview
An MMsgmlElement object is a mutable representation of an SGML element instance.
Methods
upon Construct: handle hParentArg, handle hSpec, list itemsArg,
list atts, handle hMarkArg
Requires: hParentArg is a handle to an MMsgmlDocument or NULL. hSpec is a handle
to an MMdtdElement. itemsArg is a list of handles to either MMsgmlElement,
MMsgmlPCData, or MMsgmlEmpty objects. atts is a list of MMsgmlAttribute
objects or empty. hMarkArg is a handle to an MMsgmlSectionMark object.
Modifies: hParent.
Effects: Creates an MMsgmlElement object, in the context of hParent if it is given. The
element is described by hSpec, consists of items, and has mark hMarkArg. If the element has any attributes specified, they are given in atts.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMsgmlDocument object.
Modifies: hContext.
Effects: Creates an MMsgmlElement from string s, in the context of hContext.
on IsGood: return boolean
Effects: Returns TRUE iff the items in self are properly described by the element specification corresponding to s e 1 f.
on AttsNotGiven: return list
Effects: Returns a list of MMdtdAttribute objects, which are the attributes for self
which are not specified but need to be.
on Unparse: return string
Effects: Returns a string representation of sel f.
Members
The members of MMsgmlElement are given in table Table 13.
TABLE 13. Members of MMagmlement
Member
Type
Description
items
list
A list of handles to MMsgmlElement, MMsgmlPCData, and
MMsgmlEmpty objects. These are the data which make up the element.
allAtts
list
A list of handles to MMsgmlAttribute objects. These are the
values of all the attributes for this element.
hParent
handle
A handle to an MMsgmlDocument. The document in which self
is contained.
hMark
handle
The mark of this element.
Activities
none
2.2.2.3 The MsgmlPCData Class
This class represents text data. More specifically, it represents text data of the SGML type
#PCDATA. Note that this data can include entities. The specification for this class is given below.
class MMsgmlPCData
Overview
An MMsgmlPCData object is a mutable representation of SGML text data.
Methods
upon ConstructFromText: string text
Effects: Creates an MMsgmlPCData object from text, which is assumed to have no entities.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMsgmlDocument object.
Effects: Creates an MMsgmlPCData object from s (which may include entities). It is created
in the context hContext.
on AddText: string newText
Modifies: sel f.
Effects: Adds the text newText to the end of self.
on AddEntity: handle hNewEntity
Requires: hNewEnt i ty is a handle to an MMdtdEnt i ty object.
Modifies: sel f.
Effects: Adds the entity represented by hNewEntity to the end of self.
on AsText: return string
Effects: Returns the contents of s e 1 f, with all entities replaced by the text they represent.
on Entities: return list
Effects: Returns a list of MMdtdEnt i ty object, representing the entities included in self
(in order).
on Unparse: return string
Effects: Returns a string representation of s e 1 f.
Members
The members of MMsgmlPCData are given in Table 14.
TABLE 14. Members of MMISglPCData
Member
Type
Description
data
list
A list of handles to strings or MMdtdEntity objects. This is
the data represented by sel f.
Activities
none
2.2.2.4 The MMsgmlEmpty Class
This class represents the EMPTY data content.
class MMsgmlEmpty
Overview
An MMsgmlEmpty object is an immutable representation of the SGML EMPTY data construct.
Methods
upon Construct
Effects: Creates an MMsgmlEmpty object.
upon ConstructFromString: string s, handle hContext
Requires: hContext is a handle to an MMsgmlDocument object.
Effects: Creates an MMsgmlEmpty object from s (which may include entities). It is created
in the context hContext.
on Unparse: return string
Effects: Returns a string representation of selif (i.e., 'EMPTY).
Members
none.
Activities
none.
2.2.2.5 The MMsgmlAttribute Class
This class represents an attribute to an SGML element, with a given value. The value is
expressed as a handle. The type of the object to which the handle points depends on what SGML
type the attribute has. The possibilities are given in Table 6 on page 34. The specification for
MMsgmlAttribute is given below.
class MMsgmlAttribute
Overview
An MMsgmlAttribute is an immutable representation of an instance of an attribute in SGML.
Methods
upon Construct: handle hSpec, handle hValArg
Requires: hSpec is a handle to an MMdtdAttribute; val has type specified in Table 6 on
page 34.
Effects: Creates an attribute instance with value hValArg for an attribute specified by
hSpec.
upon ConstructFromString: string s, handle hValArg
Requires: hSpec is a handle to an MMdtdAttribute.
Effects: Creates an MMsgmlAttribute object from s. It is created as an instance of the
attribute specification MMdtdAttribute.
on IsGood: return boolean
Effects: Returns TRUE iff the value of self is an allowable value, given the possible values
of the attribute.
on IsDefaultValue: return boolean
Effects: Returns TRUE iff the value of sel f is also the default value of sel f.
on Unparse: return string
Effects: Returns a string representation of self.
Members
The members of MMsgmlAttribute are given in Table 15 on page 48.
TABLE 15. Members of MMagmlPCData
Member
Type
Description
hSpec
handle
A handle to MMdtdAttribute. The attribute corresponding to
self.
val
handle
The value of self. This has type given in Table 6 on page 34.
Activities
none
3 The AM2SGML C++ Classes
A set of C++ classes, which form the basis of the AM2SGML ADL classes, has been
partially implemented, and is described below. Once a full set of C++ classes has been written,
they can be "wrapped." This will make them available to the ADL programmer as the ADL
classes described in Chapter 2.
Much more work needs to be done on the C++ classes. However, they currently provide a
basic level of functionality.
3.1 YASP
A decision was made early on to use a pre-existing SGML parser in the implementation of
the AM2SGML C++ classes. There are numerous good SGML parsers available, both
commercially and in the public domain, and it would have taken much redundant effort to write a
new parser from scratch. For AM2SGML, the Yorktown Advanced SGML Parser (YASP) was
used.
3.1.1 Why YASP?
YASP was chosen because it meets two criteria. First, it is in the public domain. Second, it
has a well-documented application programming interface (API). YASP was the only parser that
could be found which meets both of these criteria. The parsers YAO and SP were also considered;
both are in the public domain, but the APIs for both are seriously lacking in documentation. While
the YASP documentation is in many ways far from ideal, the document The SGML Parser
Interface: FunctionalSpecification Version 1.25 is much more thorough than the documentation
1
for the other two parsers.
3.1.2 An Overview of YASP
YASP is designed to set up an interactive relation between the YASP parser itself,
henceforth called the "Parser," and the client program which is using the parser, henceforth called
the "Application." YASP was designed to be as platform-independent as possible. To accomplish
this, the Application performs any platform-specific functions that are necessary. Examples of
such functions are allocating memory and accessing files.
The flow of control is passed back and forth between the parser and the Application. The
Application calls the Parser main entry point (the PRSMAIN function) when it is ready to begin.
The Parser then starts parsing an SGML document. Whenever the Parser needs the Application to
perform a platform-dependentservice, or whenever the Parser comes to an interestingparsing
event, it turns control over to the Application. Examples of interesting parsing events would be the
start or end of an element, or the start or end of a DTD. The Application performs the
platform-dependent service or acts on the interesting parsing event, and then passes control back
to the Parser. Information is passed back and forth between the Parser and the Application in a
Parser/Application Communication Structure, or PAC.
3.2 Overview of the AM2SGML C++ Functions
Currently, AM2SGML consists of C++ functions which will read an SGML file, parse the
file, and return a structure which represents the overall element structure of the SGML file. The
top-level C++ function is parseSGMLFile. Among other parameters, this function takes the
name of a text SGML file. parseSGMLFile sets up a PAC structure to be used with the YASP
parser, and then calls the main YASP parser entry point, PRSMAIN.
1. Geoff Bartlett and Pierre Richard, The SGML ParserInterface: FunctionalSpecification Version 1.25, Yorktown
Heights, IBM T. J. Watson Research Center, 1992.
One of the fields of the PAC data structure is called ase. This field contains a pointer to the
function that YASP calls whenever it needs a platform-dependent service or whenever YASP
reaches an interesting parsing event. parseSGMLFile sets this field to the function
dispatch. Another field is user__p. This is where AM2SGML stores the applicationdata.
Also stored there is space for the structure that AM2SGML uses to represent the parsed SGML
document. This structure has the type SGMLDocument.
Whenever YASP calls dispatch, it passes to it the original PAC structure as an argument.
The func field of this structure is set to a code which represents the platform-dependent service
that YASP needs performed or the interesting parsing event that it has found. The dispatch
function is basically a large switch statement. There are seperate functions to deal with each
possible platform-dependent function and each possible interesting parsing event; these functions
are called the service functions. dispatch calls the appropriate service function. Each of these
returns 0 if it encounters no error, or an integer between 1 and 10 otherwise. When a service
function returns, dispatch takes its return value, and returns it to YASP. Whenever YASP
comes to an interesting parsing event and calls the appropriate service function, this service
function modifies the SGMLDocument structure stored in the application data, if necessary.
After YASP is finished parsing the entire SGML file, PRSMAIN returns control to the
function parseSGMLFile, which called it. By this time, the SGMLDocument structure stored
in the user information represents a totally parsed SGML document. parseSGMLFi le returns a
pointer to this structure. This entire process is described in more detail below.
3.3 AM2SGML Module Descriptions
Each C++ file and class of AM2SGML is described below. The function used to test
AM2SGML is described also. All the code for AM2SGML is given in Appendix B.
3.3.1 The Test Function
The test function, given in Section B. 1, takes four command line arguments. The first of
these is the name of an SGML file to be parsed. The second is the name of a DTD file, which is
optional if a DTD declaration is already in the SGML file. The third is the name of an OCS file
(which is a parsed SGML declaration), and the fourth is the name of an ODT file (which is a
parsed DTD). Only the first argument is necessary. If the second, third, or fourth arguments are
not present, they should be replaced by the integer 0.
The test function calls parseSGMLFile, and passes it the names of the files given on the
command line. Once parseSGMLFile returns the SGMLDocument object, the test function
calls the method SGMLDocument: :unparse, which return a text representation of the
SGMLObj ect. This representation is then output to the screen. This representation can be
checked against the original SGML file to see if the file was parsed correctly.
3.3.2 The parseSGMLFile Function
This is the top-level AM2SGML function. It sets up the PAC, creates a message handler,
creates the structure used for the user information, and calls PRSMAIN. These steps are explained
in more detail below. The declaration for this function is given in Section B.3, and it is defined in
Section B.4.
First, a new PAC structure called pac is created. The following fields of pac are set:
* id - This is the version of the current pac structure. Its value is the constant
PAC_IDENTIFIER, which is stored in one of the included YASP header files.
* ase - The function that YASP calls when it needs a platform-dependent service or it encounters an interesting parsing event. This function must take a pointer to a PAC structure as a
parameter, and return an int. This field is set to the function dispatch, described in
Section 3.3.3.
* user_..p - This is where application data is kept. The application data is stored in a structure of
type AppData. This structure is describer below.
After pac is set up, parseSGMLFile creates a message handler. Whenever YASP
encounters an error, it informs the Application by referring to an error number. The error numbers
and their corresponding error messages are all stored in a file. The message handler is in charge of
reading this file. It has a member function which will take an error number and return an error
message. The message handler object is described in Section 3.3.6.
After creating the message handler, parseSGMLFile creates a structure for application
data of type AppData. This structure is called myData. The important fields of myData are as
follows:
* primaryEntity - The name of the SGML file being parsed.
* DTDFi 1 e - The name of the DTD file being used, or NULL if none is given on the command
line.
* dtd - The name of a DTD object. This is the object that is returned after a DTD is parsed. At
the current time, however, AM2SGML does not actually parse DTDs.
* doc - The SGMLDocument object that is created during parsing.
* current - The current element pointer.This is a pointer to the SGML element that is currently being parsed. This is initially set to NULL.
* msgHandler - A pointer to the message handler being used.
After setting up myData, parseSGMLFile is ready to call PRSMAIN. PRSMAIN returns
0 if it encounters no errors. If this is the case, then parseSGMLFile returns a pointer to the
SGMLDocument structure created during parsing, which is stored in the doc field of myData.
If PRSMAIN returns anything but 0, then parseSGMLFile returns NULL.
3.3.3 The dispatch Function
This is the function that is called by YASP whenever it needs a platform-dependent service
or it has an interesting parsing event to report. Its declaration is given in Section B.5 on page 74,
and its implementation in Section B.6 on page 75. dispatch takes as an argument pac, which
is a pointer to a PAC structure, and it returns an int. YASP expects dispatch to return 0 if it
encounters no error, or an integer between 1 and 10 if it encounters an error. Exactly which
integer is returned depends on why YASP called dispatch, and on what type of error
dispatch encountered.
YASP indicates what platform-dependent service it needs or what kind of interesting
parsing event it has encountered by setting the func field of pac. This field has type PFC, which
is an enumerated type whose values represent the different service functions. There should be a
separate service function for each possible value of the func field. At the moment, the only
functions which exist are those which correspond to the more frequently requested
platform-dependent services and the more common parsing events.
dispatch looks at the func field of pac, and calls the corresponding service function. It
does this by using a switch statement. The service functions which are currently implemented
are given in Table 16. Some of the service functions do not actually do anything yet; they simply
return 0. The func values for these functions are given in italics
TABLE 16. The Service Functions
Value of func
Name of Service Function
Description of Service Function
Interesting Parsing Events
ELTST_PFC
eltSt
The start of an element
Section 3.3.5.1 on page 58
ELTND_PFC
eltNd
The end of an element
Section 3.3.5.2 on page 59
RE_PFC
re
Relevant record end (this is when a record is ended unexpectedly by the end of a file)
TABLE 16. The Service Functions
Value of func
Name of Service Function
Description of Service Function
TEXT_PFC
text
Test data has been encountered
Section 3.3.5.3 on page 59
PI_PFC
pi
A processing instruction has been encountered
PROST_PFC
proSt
Section 3.3.5.13 on page 64
The beginning of the prolog has been encountered. The prolog consists of the SGML declaration and DTD
PROND_PFC
proNd
The end of the prolog has been encountered
DOCND_PFC
docNd
The end of a document has been reached
Section 3.3.5.14 on page 65
ETYST_PFC
etySt
The start of an entity has been encountered (an entity in this
case is the same as a file)
ETYND_PFC
etyNd
The end of an entity has been encountered
SKIP_PFC
skip
For some reason, data in the SGML file has been skipped
DECST_PFC
decSt
The start of an SGML declaration has been encountered
DTDSTPFC
DTDSt
The start of a DTD has been encountered
Section 3.3.5.15 on page 65
DTDND_PFC
DTDNd
The end of a DTD has been encountered
Section 3.3.5.16 on page 65
DAPND_PFC
dapNd
The end of the document has been encountered right after
the end of the prolog
Platform-Dependent Services
MSG_PFC
msgs
Print a message
Section 3.3.5.4 on page 60
SGET_PFC
sGet
Get storage
Section 3.3.5.5 on pa ge 61
SFRE_PFC
sFre
Free storage
Section 3.3.5.5 on pa ge 61
FIND_PFC
find
Create a file
Section 3.3.5.6 on pa ge 61
XENOP_PFC
xEnOp
Open a text file
Section 3.3.5.7 on pa ge 62
UTOPRPFC
utOpR
Open a binary (utility) file for reading
Section 3.3.5.8 on pa ge 63
UTOPWPFC
urOpW
Open a binary file for writing
Section 3.3.5.8 on pa ge 63
UTWRT_PFC
utWrt
Write to a binary file
Section 3.3.5.9 on pa ge 63
UTRD_PFC
utRd
Section 3.3.5.10 on page 63
Read from a binary file
TABLE 16. The Service Functions
Value of func
Name of Service Function
Description of Service Function
UTCL_PFC
utCl
Close a binary file
Section 3.3.5.11 on page 64
XENRD_PFC
xEnRd
Read from a text file
Section 3.3.5.12 on page 64
XENCLPFC
xEnCl
Close a text file
Section 3.3.5.11 on page 64
3.3.4 The SGMLObj ect Class and its Subclasses
The SGMLObj ec t class is intended to be a virtual base class for classes representing
SGML objects. At the present time, it is a virtual base class for the classes SGMLDocument,
SGMLElement, and DTD. (Currently, DTD does not do anything; its declaration is given in
Section B.13 on page 81, and its trivial implementation is given in Section B.14 on page 81.) The
declaration of SGMLObj ec t is given in Section B.7 on page 77, and the implementation is given
in Section 1 on page 77.
The SGMLObj ec t class handles error functions for its child classes. Any type of SGML
object can have an error state. If any sort of error occurs during the parsing of an SGML object,
then the error state for that object is set to something other than noError. At the present time,
AM2SGML is not extremely robust, and it does not make much use of error states. The child
classes of SGMLObj ect are described below.
3.3.4.1 The SGmLDocument Class
An SGMLDocument object represents an entire SGML document instance. An
SGMLDocument has a top-level element, which is the element that shares the name of the
document instance. The member function setTopE1 sets the top element of the
SGMLDocument, and the member function getTopEl returns a pointer to the top element. The
unparse member function returns a string representation of the document instance. At present
time, this consists of the string <Document>, a string representation of the top-level element,
and the string </Document>. The declaration of SGMLDocument is given in Section B.9 on
page 78, and its implementation in Section B. 10 on page 78.
3.3.4.2 The SGMLElement Class
The SGMLElement class represents an element. Like SGMLDocument, it inherits from
SGMLObj ect. In SGML, an element can consist of other elements, which in AM2SGML are
called containees; text data, of type #PCDATA; or nothing at all., which in SGML has type
EMPTY. In the future, objects representing #PCDATA and EMPTY should also be considered
containees. But at the present time, #PCDATA and EMPTY within an element are ignored.
An SGMLElement has a name. Pointers to the containees of an SGMLElement are stored
in the member array containees. The member function addContainee adds a containee to
this list, and the member function getNContainees returns the number of containees in this
list. SGMLElement also has a member function unparse.
If the name of an SGMLElement is elt, then unparse returns a string consisting of the
following:
* The string <elt>
* Strings representing any elements contained in elt. Note that this does not include text data or
EMPTY.
* The string </elt>
For example, if elt consisted of the elements elt2 and elt3, and if elt2 in turn
consisted of the element e 1 t 4, than the string obtained by unparsing el t would be similar to the
following:
<elt> <elt2> <elt4> </elt4> </elt2> <elt3> </elt3> </elt>
The declaration of SGMLElement is given in Section B. 11 on page 78, and its implementation is
given in Section B. 12 on page 80.
3.3.5 The Service Functions
There are 28 service functions currently implemented. The declarations and
implementations of all of them are given in Section B.15 on page 81 through Section B.55 on
page 95. The more important ones are described below.
3.3.5.1 The eltst Function
The el tSt function, declared in Section B. 15 on page 81 and defined in Section B. 16 on
page 81, is called whenever YASP encounters the beginning of an element in a document
instance. YASP sets the dad field of the PAC structure to a pointer to a structure representing an
element description called a document element descriptor (DED). At the moment, AM2SGML
only looks at the part of the DED which represents the name of the element.
The first thing that eltSt does is to get the application data from the PAC; it sets myData
to point to it. Second, eltSt gets the DED structure from the PAC, and points ded to it. It then
creates a new SGMLElement object, pointed to by newEl, which represents this new element. It
figures out the name of the element from the DED (it is stored in ded->eltp->name
.p),
and
calls the function newE 1- >s e tName to set the name of the new element. (In the future, it would
be useful to have a constructor for SGMLElement which takes the element's name as an
argument.)
At this point, there are two possible situations. The first is that the new element that YASP
encountered is the top-level element. If this is the case, then YASP calls
myData->doc->setTopEl (newEl), which sets the top-level element of the object
representing the document we are parsing to this new element. It then sets the current element
pointer, myData->current, to the new element.
The second situation is that the new element newEl is not the top-level element. In this
case, newEl must be a containee of the current element. eltSt therefore calls
myData->current->addContainee (newEl), which adds this new element to the list of
containees of the current element. (addContainee also sets the container of newEl to be the
current element.) eltSt then sets the current element pointer to the new element. As soon as the
end of the new element is encountered (that is, when YASP calls the eltNd service function),
then the current element pointer will be set back to its previous value. The eltNd function is
described in Section 3.3.5.2. The eltSt function returns 0 unless there is a problem calling
SGMLElement: : addContainee. In this case it returns the value 10.
3.3.5.2 The e1ltNd Function
YASP calls this service function when it encounters the end of an element. e1ltNd sets the
current element pointer to the container of itself, which is found by calling
myData->current->getContainer (). eltNd always returns 0, as there is no way for it
to fail. The declaration of e 1 tNd is given in Section B.17 on page 82, and its implementation is
given in Section B.18 on page 82.
3.3.5.3 The text Function
This function currently does nothing. YASP calls it whenever it encounters text data within
an element. A new class should be implemented to represent SGML text data. This new class
could inherit from SGMLElement. Then, when text was called, an instance of this class would
be created and added to the current element much in the same fashion that a containee element
would be. The trivial current implementation of text is given in Section B.20 on page 83.
3.3.5.4 The msg Function
This service function is called whenever YASP wants to send a message. This happens
when it encounters some sort of error, or when it has some kind of warning to give. Ideally,
AM2SGML would look at the content of these messages, and act accordingly. In the current
implementation, however, AM2SGML simply prints these messages to stderr. YASP usually
sends a number of messages in a row; a group of messages is called a suite.
Before AM2SGML calls the YASP entry point PRSMAIN, it creates a MessageHandler
object. This object reads and stores all the possible messages and their numbers from a file. A
pointer to the message handler is stored in the application data, in the field msgHandler.
The YASP message file is actually a series of templates. These templates contain strings
such as %1 and %2, which are supposed to be replaced by actual data when a message is sent.
When YASP wants to send a message, it gives AM2SGML the following:
* A list of data, to be "plugged in" to the message template. The first element in this list replaces
%0, the second replaces %1, and so forth. This list is stored in the dad field of the PAC
* The severity of this suite of messages. This is represented by an integer, which is given in the
errsev field of the PAC. The possible error severities are given in Table 17.
TABLE 17. YASP Message Severities
Number
Type of Message
0
Informational message
4
Warning
8
Error
12
Severe error
16
Terminating error
* The message identifier. This is the integer that the message handler uses to find the proper message template. This is stored in the msgcod field of the PAC
* Whether or not this is the last message in the suite. If it is, the msglast field of the PAC is set
to true; otherwise, it is set to false.
msg calls the get InstantiatedMessage method of the message handler, giving it the list of
data and the message identifier. The method returns a string, which is the message with the data
plugged in. msg then prints this string. If the severity of the message is above a certain value
called autoQuit (which is defined in msg. h), then msg returns 10. Otherwise, it returns 0.
The declaration for msg is given in Section B.22 on page 83, and its implementation in
Section B.23 on page 83.
3.3.5.5 The sGet and sFre Functions
This service function is called by YASP when it needs storage. The amount of storage that
YASP needs if given in a structure called an ADLEN, found in the stg field of the PAC. An
ADLEN contains a pointer and an integer. The integer in this case is the amount of storage (in
bytes) requested. Once storage is allocated, it is returned in the pointer of the same ADLEN
structure. If the memory was successfully allocated, sGet returns 0. Otherwise, it returns 10.
sFre frees the storage in the stg field of the PAC. It always returns 0. The code for sGet and
sFre is given in Section B.24 on page 85 through Section B.26 on page 85.
3.3.5.6 The find Function
The find function is called by YASP whenever it needs to access a file. The Application is
supposed to create a FilelDand return it to YASP. Whenever YASP needs to read from or write to
the file, or when it wants to open or close the file, it gives the Application the FileID. AM2SGML
has a class called File, which it uses for a FileID. The File class is described in Section 3.3.7
on page 66. When it calls find, YASP sets the asgn_c1s of a structure called an EXID, which
is given in the dad field of the PAC, to a code which represents which type of file YASP needs to
access. The different types of files are calledfile classes (not to be confused with C++ classes).
The file classes which are currently handled by AM2SGML are given below.
TABLE 18. YASP File Classes
Name
Description
CAPACITY_XFC
These represent capacity sets, notation data, and concrete syntaxes, respectively. These
are all parts of an SGML declaration. Here, YASP gives the Application a code which
represents a specific file. The code is stored in the dad field of the PAC. AM2SGML
has a function publDFileName (given in Section B.64 and Section B.65) which
takes this code and returns the name of a file.
NOTATIONXFC
SYNTAX_XFC
CHARSETXFC
This represents character data. Here, YASP gives the Application a string representing
an SGML character set, and the Application returns a code representing that character
set. AM2SGML uses the function charsetlD (given in Section B.66 and
Section B.67) to determine these codes.
UTODTW_XFC
As YASP parses a DTD, it outputs a compiled form of the DTD. Here, YASP is
requesting a binary file to which it can write the compiled DTD. It is up to the Application to determine the name of this file. AM2SGML takes the name of the SGML file
being parsed, and replaces any suffix with odt.
UTSYNU_XFC
YASP similarly parses SMGL declarations. Here, YASP is requesting a binary file to
which it can write the compiled declaration. AM2SGML uses the name of the SGML
file, replacing its suffix with ocs.
UTSYNL_XFC
This means that YASP is parsing an SGML file without a declaration, so it is requesting
a file which contains a parsed declaration. AM2SGML assumes that if a parsed declaration is needed, then the name of a file containing one was given on the command line.
PRIMARYXFC
This represents the SGML file to be parsed.
The declaration for find is given in Section B.27 on page 85. The implementation is in
Section B.28 on page 86.
3.3.5.7 The xEnOp Function
This is the function that YASP calls when it needs to open a text file for reading. It sets the
ahl field of the PAC to a FilelD that it has previously requested. Since in AM2SGML FileIDs are
simply File objects, xEnOp only needs to call the File: : openRead method. If the file is
successfully opened, xEnOp returns 0. Otherwise, it returns 6. The declaration for xEnOp is
given in Section B.29 on page 88. The implementation is in Section B.30 on page 88.
3.3.5.8 The utOpR and utOpw Functions
YASP calls these service functions when it needs to open a binary file for reading or
writing, respectively. The AM2SGML File class does not differentiate between binary and text
files (at least where opening and closing them is concerned), so utOpR just calls xEnOp. utOpW
simply gets the File object from the ahl field of the PAC, makes sure it is not already open, and
if not calls its File: : openWrite method. If the file was already opened, utOpW returns 4. If
the file is not successfully opened, utOpW returns 6. Otherwise, it returns 0. The code for utOpR
and utOpW is given in Section B.31 on page 88 through Section B.33 on page 89.
3.3.5.9 The utwrt Function
This function is used by YASP to write to a binary file. The Fil e object is stored in the
ahl field of the PAC, and the data to be written is stored in the dad field of the PAC, in an
ADLEN structure. The pointer in the ADLEN structure points to the actual data, and the integer in
the ADLEN structure is set to the length of the data. AM2SGML uses the File: :put method,
which also takes a pointer and an integer, to write the data. The declaration for utWrt is given in
Section B.34 on page 89, and its implementation in Section B.35 on page 89.
3.3.5.10 The utRd Function
This function is used to read from a binary file. Once again, the FilelD is stored in the ahl
field of the PAC, and the dad field contains an ADLEN structure. The integer part of the ADLEN
structure is the amount of data that is to be read. Once the data is read, it is put into the pointer part
of the ADLEN structure. utRd uses the File: : readLen method to read from the file. It returns
0 if successful, and 8 if the file was not opened for reading, or if there was a problem reading
from the file. The declaration for utRd is given in Section B.36 on page 90, and its
implementation in Section B.37 on page 90.
3.3.5.11 The utCl and xEnCl Functions
These functions do exactly the same thing - close files. As the File object opens and
closes text and binary files the same way, there is no difference between these functions. In fact,
all utCl does is place a call to xEnC1. xEnCl simply gets the File object from the ahl field
of the PAC, and calls its close method. These functions always return 0. The code for utCl is
given in Section B.38 on page 90. The code for xEnCl is given in Section B.41 on page 92 and
Section B.42 on page 92.
3.3.5.12 The xEnRd Function
This function is used by YASP to read data from a text file, given in the ahl field of the
PAC. YASP does not care how much data is read. xEnRd simply calls the File: :get method,
which reads one line of data, and puts the line that was read in the dad field of the PAC. xEnRd
returns 8 if the file is not open for reading, 4 if the file reaches the end, and 0 if everything goes
okay. The code for xEnRd is given in Section B.39 on page 91 and Section B.40 on page 91.
3.3.5.13 The proSt Function
YASP calls this function when it reaches the start of the SGML prolog. The SGML prolog
consists of the SGML declaration and/or the DTD. It is at this time that AM2SGML creates a new
SGMLDocument object, which represents the document instance. This object is stored in the
doc field of the application data. (Since an SGMLDocument represents only a document
instance, and a document instance does not include DTDs or declarations, the new
SGMLDocument object should probably be created once the end of the prolog is reached, when
YASP calls proNd, as opposed to when the start of the prolog is reached.) The declaration for
proSt is given in Section B.43 on page 92, and its implementation in Section B.44 on page 92.
3.3.5.14 The docNd Function
docNd is called when the end of the document is reached. Currently, this function does
nothing, but in future versions of AM2SGML more "clean-up" work might be performed here.
The current implementation is given in Section B.46 on page 93.
3.3.5.15 The DTDSt Function
This service function is called by YASP when it reaches the start of a DTD. When this
happens, AM2SGML creates a new DTD object to represent the DTD. As explained before, the
DTD object currently does not do anything. DTDSt does cause one to be created, however. The
DTD object is stored in the dtd field of the application data structure. The declaration for DTDSt
is given in Section B.52 on page 94 and its implementation in Section B.53 on page 94.
3.3.5.16 The unimplFn Function
This function is called by dispatch when it receives a request from YASP to perform a
service function that is not yet implemented. In the final version of AM2SGML, all the service
functions should obviously be implemented, and this function will be unnecessary.
unimplFn simply ouputs an error message to the screen, telling the number of the service
function that was requested. unimplFn always returns 10, since after it has been called, the
parsing of the SGML file cannot go on. unimplFn uses the notify function to send the error
message to the screen. Code for unimplFn is given in Section B.56 on page 95.
3.3.6 The MessageHandler Object
The MessageHandler object is responsible for reading the YASP message template file,
remembering the templates, and then instantiating a template with a variable list when necessary.
The specification of MessageHandler is given in Section B.58 on page 95, and its
implementation is given in Section B.59 on page 96. A MessageHandler can be "good" or
"bad" - if there is a problem during creation (for example, when trying to read the template file)
then a "bad" message handler is created. A MessageHandler has the unary operator ! which
returns true if it is bad. The MessageHandler class has methods getMsg and getID which
return the message template and a message ID string given a message number, as well as the
method getInstantiatedMsg which takes an array of strings and a message number, and
plugs the strings into the template corresponding to the message number.
3.3.7 The File Class
The Fil e class is used for the YASP FileID. YASP needs a way to create a file object with
a name before that file is opened; neither the C FILE type nor the C++ file stream classes seemed
to be able to provide this functionality.
A F i e can be opened in three modes - read, write, and append (which is not yet
implemented). There are simple methods for doing various types of reads and writes to a file. The
File class is implemented using the C FILE type. The declaration for the File class is given in
Section B.60 on page 99; its implementation is in Section B.61 on page 101.
4 The Future of SGML and AM2
Quite obviously, there remains much work to be done on the implementation of
AM2SGML. Many more C++ functions and classes need to be written. Roughly, there should be
a C++ class for every ADL class described in specifications in Chapter 2. Also, the ADL classes
themselves need to be written. This is accomplished by a process called wrapping,which makes
certain parts of C++ classes visible to the ADL programmer as ADL classes.
Classes which can parse SGML files will prove to be a useful addition to AM2. They will
provide an easy, standardized way to store text information. Almost any AM2 application which
needs to store or retrieve text data will be able to take advantage of AM2SGML.
There are currently a few projects being developed at CECI which could use SGML. One of
these is called OperacidnFuturo.One part of this application is an "electronic workbook." This is
supposed to be similar to a regular textbook, except for the fact that it is entirely on line. The
workbook is currently implemented as a group of HTML pages. However, it has become clear that
HTML does not allow for much flexibility in the way that these workbook pages are designed. If
SGML were used, a more specialized DTD for the workbook could be created. However, there
still would need to be a way to display the workbook pages once they are parsed.
The ability to parse SGML becomes much more useful when there is a way to use the
resultant structures to display the content of the SGML. There currently exist a few standards for
specifying the way SGML documents should be displayed; two of the more common ones are the
Output Specification (OS), developed by the United States Department of Defense, and the Docu-
ment Style Semantics and Specification Language (DSSSL). 1 It would be useful to examine these
standards, to see if they could be used with AM2.
AM2 is already able to manipulate and display an impressive array of media types, including images, movies, and sounds. With the development of AM2's SGML capabilities, text data
would be added to this list. The ability to process different types of marked-up coupled with the
ability to display them in a customized manner would prove to be one of AM2's more powerful
features.
1. "Getting Started."
Appendix A
A Sample DTD
The following DTD specifies a (quite small) subset of HTML. Note that in this DTD,
SGML "keywords" are in bold, and comments are in i talics.Parts of this DTD are based on
Dave Raggett's HTML DTD. 1
I <!-- A DTD for a simple subset of HTML -- >
2
3 <!-- The first DOCTYPE declaration will specify tags which we
4
normally associate with HTML. The second declaration tries to
5
split an HTML document into physical pages. -- >
6
7 <!DOCTYPE HTML [
<!-- Typical HTML tags -->
8
<!ENTITY % HTMLContent "(HEAD, BODY)">
9
<!-- Wherever "&HTMLContent;" appears
10
in this DTD (or in a document
11
instance described by it), it will
12
be replaced with "(HEAD, BODY) " -- >
13
<!ENTITY infoFile SYSTEM "/usr/local/html.info">
14
<!-- Wherever "&infoFile;" appears in
15
a document instance described by
16
this DTD, it will be replaced with
17
the contents of the file
18
"/usr/local/html.info' -->
19
<!ELEMENT HTML 0 0 &HTMLContent; +(EM)>
20
<!-- The beginning and end tags for an
21
"HTML' section are optional.
22
We want emphasized text to be able
23
to appear anywhere (except for in
24
a title) -- >
25
<!ELEMENT HEAD 0 0 TITLE>
26
<!ELEMENT TITLE - - #PCDATA -(EM)>
27
<!-- The beginning and end tags for a
28
title
are necessary.
29
We do not want to allow emphasized
30
text in the title -- >
31
<!ELEMENT BODY 0 0 (HR I P
#PCDATA)*>
32
<!-- The body of an HTML document can
33
consist of any number of horizontal
34
lines (HR), paragraphs (P), or
35
units of plain text (#PCDATA) -- >
36
<!ELEMENT EM - - #PCDATA>
<!-- Emphasized text -->
37
<!ELEMENT HR - 0 EMPTY>
<!-- A horizontal line -- >
38
<!ELEMENT P - 0 #PCDATA>
<!-- A paragraph -->
39
<!ATTLIST P
1. Dave Raggett, "Document Type Definition for the HyperText Markup Language (HTML DTD)", 1995.
40
41
42
43
align (left
I center I right I justify)
nowrap (nowrap) #IMPLIED
left
-- The alignment of the paragraph by default, it is left-aligned --- Disable word wrap --
44
>
45 ]>
46
47<! DOCTYPE p.HTML [<!-- An (unusual) page structure for HTML -- >
48
<!NOTATION eq SYSTEM "/usr/bin/eqView">
49
<!-- Equations might appear in the
50
document.., these can be processed
with "/usr/bin/eqView" -- >
51
52
<!ELEMENT page - 0 #PCDATA> <!-- This specifies a "page" -->
53
<!ATTLIST page pageNumber NUMBER #REQUIRED>
54 ]>
Appendix B
Code for AM2SGML
On the following pages is all of the C++ code for AM2SGML, including the program used
to test the AM2SGML functions. The makefile that was used is given in Section B.70 on
page 107. It assumes that all the files are in the same directory, and that the YASP library yasp. a
is in the directory stored in the variable 1 ibDir. A sample run of the overall program is given in
Appendix C.
U
0"lc
a)W
•)
U)
Z
0
0*
rHrHo
•
0O -)O 0
V
00d
SOW
QQ V
O 0J
-oW
-H
Q
41
a)v
v
v V
V
II
V
0 -.
,rI
0
I~4
SO
Q04 V
-SV 4
W
4
0)
-O
O -r
V Q)
Vv
VAv
-I -V
Q
U ý
0k-
4-)
U)
>1
S
0
r-- >1
r34
ato
a40
c~q
>-4 -
04401I
U)
a)
Ue
'4
0
U
o
4~4
U)
) ý4-H
r0
(0
Wo
41
0LIQ
44
04
44
rdd
") rl
0
0
0
H
40
co)
,COW
0*-H0D 0
C0 O
ý41
4-)
to
.4:
a)
-H
41
O 0 OW
o
41 04
W41
Enrd
a)
--
I II
-H
40W
P4
*rI
II
(0 0
Q)
40 4;
U)
E12
E-4
-H -H
:
1
--ý CIA
r1r)'It V) ,c
II
II
WW
SW
4
01
II
II
II
II
0
C)
CD
W
,-H
CD
U) HQ0)3
4**i -)> 44 -H
: -)HO
0 w O
0
O1dH
F-
-H
4:: W00 Q p>6
0
rH
0 U)0))* 4a
41rH
0)
Cd
-Ic
Q U4I
i J
rH-H
4
4 ~
0
Q)
Q)
0)
-H
-H
V -H
roQ) Q
ou0
4#H
-H
Cd
S
4-)
-H
II
-H
W
41
II
0
-H
4
V)
)0
WdWri U 00rdi
4-Jrd
rilHl
0 -P4-4
410
-4
-HO
0
>
0
0
0)
W4W
k
-
-
WH
---I -H
-Hi
44r
04
r
0
H
U
WOV
\\-0
Q
-H
.
**
II
r--
,-H
-IU)
-H
I II- 41
U)
0)
1
0
O
41 4141C Cd41
4-)
0
0
C)
0
4
0
0*0
0-
H 0
Q)
WOO
U)W
0
0
C ,41 (0
0
SC0
00
0
00
0
-
0
00410410
0
E--4
44
-H
-H
E-
F
v
L
r.-A
r- ýX
,CdS--
. r-I
**
41
-
0-H
r-
A -H
4-) -H
0
* 4-)
o
c4
W
a)
rIZ 0> 1O4
0)
Cd
-- ---Y
>00000
0 0 U 0
Cd -H r-
;
u
>1
a)
4-)
0
4-)
00
00
*0
-
-
0
C,1
W)U)
4•
4j
---
.-4HO
0
*0
0
41
S.
-) 4-
,..
a
Cd
A
0>1
4-
a4)
-H
u
4-)
o,
0
.0
C".
-H
o*-SMC
°I
C-)
U
4
*)
S
H
'a.
004-)
-H
a)
,I
-H
.r..4 :t.-
-H
rzi
II
II
II
II
Ic:
0
0
0u
5
U)4-
IU)
SH
P4
W
4-) -,-H
o)
44
CdEd
4Z
rý -H
Q
00u-:
On
40
-H
f-d
m -H Cd
"0 -O ý-
>12
4.-)
-H-
0
)
•)
HrU0(rl H
,-H a- ar-, H 0-,
-H
-4N rrM t k
I
O
0o
<Z'ýN
00O N -
-
-)
- -
-rI- VN
- -
-oo
--
0
(z
(NN
, Na(f
V.
N\
-ý-ýN
N N (4C4N
0
(N (oN
00 (0N (Z
N
,I
N C4r4 r
? y * nof
r
Cr
(1)
U)
44
rH
-H
- ,
Cd
UO
Cd
4
rz
-a >
0
a )ýU
Q) )
U)
oU
H
44
ý4-H
O
-I)
U)
-U)
0)
0
ro
ro0)
Fc:
l U
m)
U)C
0)
0
*Q)
UH)
-H
00
0)U)
Q4
CdrH
Oc
N (N
(N (n
(j
(N
(N
o- rN
C•C•-H
4
o
4Cd
E-WU
U)
-- U)
0 U)
CD
-
,
Cd
Q4
0
0
rO 4
0 *0
4
S-H
LW0
0
>
4
U) '4-4
H
0N
(Ný
* m0 -H
0**'4H4U
r:0
U)
N-
0
0
S0
I,s
Uo 0
r0r
E-i
U)4
CE
o
r4E-1
CO
a ---U)
Q
o C-)
U)EU)V
Q -E-4
ro U)
Q
U)
('0 -H4
E-4 6
0
4-i H
m-,i-'-
UWH
0
4IJ U) 0-H
C -H Q
U 4. -QH Q
0
,c:
t-
ý4
104
m
-Cd
-• o
,-t
00
OUO
U
U)
4-)
U)
'-0
E-,
04
io .
-4
0 00U)O
0-•
S00
-H
.
)
-H
44
fT FX4ýRj r.. --)
00)
a) r- ii
MUU)
0
.4 N
"# 't
'
tr-
o
'0
o
ON'
.e
-- ,
N
W
W
Q)
-4II
O W
U
0
r. 04
0 04Z
W
WH
.HO E-4
4-4 n
0 --0
E1--- :1
-H
0 -r
0
.1 II
-09
II
U)
SrH
O-H
4--)
WE
0
400
o
O-H
E-1
(0
>j
0
M -r-4
04 ý
(.d rd0
-H
rHW
d0)0
U -H
-> II
CA
0
(O A
O-S
E-Z
S
U)
0O
0
4
4H
(-1)
ý4aJ
CM
II
F0
0J
0 0Ird
Q)Wc$
.•t
Wor
0
O
W
Ud
0
0
0444
SU)
J0
O
1-4
44
u
0
•O
0
ro
A
•4
1
WQ
>1
0
>
S
*
04
to
0
)
44- 4
U,C
-
'---
.M
r
04 H
4.)
a.) u. 1--I
ýj
O
W000
E-4 (1
W -H
04
A
I"
0
- 1
onn
ra
.H4
*00
•-0
O
04d -H
0
00
00
00
00
000000
01.1 0\O0.1
0
.1o
-Oro
•
04,C
Q)44
O 4 J
U);WU)
Cd
14
,-4 4
W
Q
0
-0
-H
4
U) r4
,
U) .-H W -0
1)44 IZI -H
5
-0
-0
U)-H ,-
-
,C
00 0.,se
fl
n I-
C-,4
I
'04rboN
. 'l
OO
O
44
-
t
-0
0
0
-II
I
0>4
W
1--i
U)
U)-H
Oio
t
-
01
-0
-H
-.
r4
44
II
II
-0
-H
N
MZý
)kr
r
mz
(0
04
9
kýV
00045
04
-040
V
ývý
*H
O
6
-II
-0
uW
0
-H
0
0
rO
0 E-0•
04
04
0
II
U) Z
-H
040
04
-0
A
040
>41-0
-05
14W
4 -~
,
0
cl- ,ýD-H
>
11
r40
U
0
-
'---
II
0d 0
W
X4 0
0-H-H
.o4-0
W
14W
4U)
011--0
4
40
-U)
Cd -HO~C 4
14
A
Q)A
51-4
W1
Wi 0
m4J
0
W
-H
U)
4
0cd
2
-f
00
44>
-H
U
4--
II
-H
0
..
U)Z
1-4
Z 14-)
o
0
1-4
-0-0
Q0)
-H
WG
N
-~c
~0-
41Q)
-H
r-0
-
- 1
-
d0
:J40
WO
W 0)-
44 000
0EU-I
O-
U)
W04
.ý 0
S4 11
So
445
ý4
W
04
UC
0)
rd
-O1
- 0)3
U)
0- ul
d
04Cd
44
U) -H
-H
\
-H ýD
4iJ
ý4
0o - ca
-H
041 (0
r-0
U)
'0 U,.-
ý4 J
'0
4JW
04-H
,4 r
0 0
0
U)
W0OO
~U)
ý4
rW
0rd
)-
W•ii 04
04 "1
ý
.H
0U)
U)
00
-H
'0 4-H
,Q
v
-H
1-4
O l
0 0H
v
0*ýON O
dU)
CdU)
>U)
1-4U)
U•
\OtNo
•O
0
tm
0 U0
U)
rmd
mQ)-n
rH
04
-H -H
-0 8
,C
40
4
rOF)
-
00
°H
04 H
I
-0---
-
O
A
,C A
4404C
0
0
00O
Oio
1% o 11 ll l
ý L
ý toýcNkO
O L
ý10
LO ýO 10
-Ir
't-o
F=:
42
0
W
0ro
V
ý4
0
2;
0E
0)
0
U)
0)
)
Cd
4ý 0
0r-
.-H v
o
.
ý4 2'
-H tH4 U
Cd
|
CO
,O0
04
,-
-
P-4
:Q
• --
4ro
,C
U)
U)E-4
r-l
8
-H -H
#
*
-H
>i
to
W
0)
Q)Q
uI
WW4
WW
V0
u) (0
4J
U) )-iQ
(C
0
I
4-4
0a)a
•:1
o (4
r4U
U) -I
Cd
V
Q
"
U)
-
c
SI-
F4
045I -
42
to
42
9
H- r--
fT
124--ý4
U):iW
\ -HW
4U
U)
rH
04
D4 A •
04
~04
..
,--
C)
; O
o
-Co
SUz
C'44
C-)
4
co ----
Q)Cd
.. to,
N 00 0ý
0\
".
-
t
00
94-1
0
W
-H
1
4.4 rL- r-q
-,-I -4
- (
0>
W
U1)
4-4 -H
-:4
4-442i
5 o0 P4
V4I 04
0)
-H42
--(1) 4
At k
0 .. 0
U) U) ::I
.S(-I
0 CL 4
S4-4
P W
4 4o
444
0*)
(
>1
V 4W
0
U)-
a) U)
-Hl
,CdW
4-1
4-4V
-H
to$ 4-1
04-41
--
0)
(3
*ra
-
-
--
-
P4
r-c
-- 5
HC
0
.
r
4 5
4WJ
4-U) U) --H
-
-H tO
V-
to:
,0 ,i) ,0 42 to ,c5
U) 44
Z
)a)Z a)
XWX
toh
-H -H
>1
WWW
tototo
:5:5:5
r--i
00 r-t
- -HrH
(1
U
or
E
Cd-Hr-HHO
Q04 T$
(1 r
WW
to toc
*
*
ýj000u
uJ ýý c-H rc-H
y0 'I
41 0
0
n
WW W
rc- rcr-H-H
OU
-H -H -H -H -H
Q)
44
444-)
H 0.4
41r-I
-- r--I 0o:3uofl
V >-1
utoW
W r-
WWWWW
-H -H -H
z:4
*
)O
rH
rH$
ý5 ; roýjj tHj cVVVVVV
rH
ro
-r-H -H -H
uu OQ
-H
-H -H -H -H -H -H -H
#
#
#I- 1# =: -W H- :V
o
0
\-zrýN(?
t
)
otr
00\ý
-
0
U)
44
0
0
cd
Co
I-Il
0
U4
0
04
04
°o
4.-4
0
.r-°)
04
4-4
0
0
04
Q)
°o
0
-H
43 -H
U))
4J
m
0
°..O
c.
4
0-D
..
-.----
,-,
r1
4
ro
>1
04
zoO
0
-)
S0
°. 1...
(NU
UU)
0--
P4
O
M
a4
(z
H
Dm
1-
O
ý4
Q)Q
ý4
C-)
(1 0
O
Cq rn Itt ~
U)
0
O
u
D
u
U
-a(, nIt )Iotý
OIo.o)
00 z ýC
000ý
C)
Q)
lJ ý4)
z
Q
uQ) .Wa
n ' e)ý rc
h o >ý(
s
loO
)1ý ~,,
-H-
ý4
0
-,i
0
ý-q
4-,
a)
a) 0)
O
I0
0
-H
0)
U)
0
04
-H
o4o
C)
-
°
0-
o -
-H
.- ;
co~I
ýD
-
P4
Uo
U)m 4
0
O
"N.
N N N- N
z
EID
E-1
a)
U)
4EWa
ýD
H
00
0
t
00
0 ' 00
0
00
0
0
t "
0
00
0
C)
HU °d
r°°4~lx
°°)
Wa)
°°
0
U)
rH
a)
C) 41-ý4
U r*
E~I
°4
-•,
cr.d
co 0)
P4 -H
R4-W
0• -IJ
4
0\
0\ ON 0-
C
o "
0 0 \
U)
U)
N 0\
I ×
U
O
o L1.1
0
o
0'
00
0
C2
IQ
-'**
4C)
U.)
0
04J
-H
ý4
°ci
SU)
o
a)
0
u
42
rU
Qi)
0
o**)
r.0
0,U)
ý4
0
u4
42
U)
ci-H
U)
-90
ý444
0
-r U) j
'fýU)
0
-U
ai) O
0--o
O "
"
-4
(0
0C
( -HO ()
0(n rd
0 4
C:
rH Cd4-4
H -•
--
-H
-ON
0
0
U)
44)
-H
--
-.
-ci
°•
0
4J
0
0ci)
U)
En 00m>0
0If
-r- 0
~0
0 OW0
44 r
044
~44
42
0
00ý4
-rc
0
O
0
00
U)
0.
rH
-H-I
42
0
U)
0 C
,-
ci
0
-H
Qý
N
ýo "I-)
(ý,00
It -ý
I- N
Itt N-)
I- 'tIt V)
It
11r)
Y)rn
rn "*t
rn tr)
C'n'In
rn Oý
fn Q)
rn --
,Z)
O
--. N
4-)U)
0 -q
U)
-H
4.2
44
0(Di-)0
~0
U)Q)0
Oc
-HCdc
0Oc$
OO
-H
,C
>1
o
00
-- lO
II
U)
4
°4
44
0
.r 0
(o
II
0
a
c)
ci
II
a)a
Q) 4
rc$
04
iH
04
J.)
cri
U
0
04
.1,
EQ
0
0
U)
'-~
Lr-~ Ir~
'~N
(N~1 ~
LrN )r~
'c>1
00
00
0
424
u
r
-0 *W
0
0
W0
LfN
0C0
0 0 -H
42W
0442
4
0 -r-1
WQ H
w o
OW
rn1
0 a
V) U)
'd
-H
E -HE
42
~-
U)
42
.i)
S
Fi
ON ~
Cd
SQ
)
ý4
4-)
U
u
4242
cici
-H -H
44W
4H r)
ro
0 0
u00
S0
EU)0
U)
-n
0
-m
42
"d
0•
0U0
04-i
UD 0
"n
(])
-H -H
-H
0U)
41 U)r
4-)4-H4-)0
42c4
MCd
0
WU)
r• -,-04
,0-4
o
I-I
I1
U)
0
I-H
0
u
0
a
U)
0
h4
(1)
'4-4
4-4
ý4
Irl
A
4--)i
C')
-H
-
440
0
O
/
41
M
0
A
4
-
V
ý4-
0
u
*
Uo
0
O
U)
(D
F
oJ
u
4
0
C)
0)sU
CdE
>JF
-H0i
4-4
r-I-H
ýE:
d
0
Q
0
-H
0d
-H
0-i-
0
U)
In,
0Om-U
0
04
0
Qý
41
U)
0
OQ
-
0P
-)
U -*ý4
CJ)
-4-4
Cd
W
r!
SU)
aH
U
0P-
O-
p-
4A
.,1
m -4
4-'-' 41
44H 0
0
0
0
O0O
7
UII
0
m
A
u
-r H--m
(:
5 -
U)
r,
-
S
-Q)
0
04
u
A
**U)
F
0
0
0
C)
r
**0
rl
i
r.
4-)
CI)
Q)
C
*.
0
4->1
v~
-H
H
I
0
0
nl-~
Q)
Ci)
S0)
A
4-W
-4
~-4
-
4- 4-
ýU
q%
) Q) Q)%
)
0
(0
0
ý44
9
Cd
.
U
Cd
rcU
M-
4
0VA
40
-
U)
0-
ý
0
C4
~
l)C
00
) IC
U)
O
A)~
J..)
U)1
43
--
o*
DU
q
0
O
O
0D
0
O
OOq
Cd
0
H
Q)
41
0
4-
O
*-
0U0
r-
E-U4Q)
rH
H
U)
U)
0
Cl)
O
QQ)0
r
0Cxw
QQ-4
44
U)
ro
a)
:
-ý
*
r
u
0
4
4
41
~
4-)
U)
-H
Q)UQ)44rH
H
0
p
Q) -
-H
U
QH
44M
-:3
- 04
U)
Cl)
CdU)
In
U*
-0H
4J
4
rU)
C/
-3,
.
11
0
04
4J
Q)
4-
w
0
nQ4)r---.
-H
-H44
-3
-H
w
41
U4.4
U) ;Hj U))
44
-w4-
0
4-
U)
)
00rd
-0
-H
4 1-'
0U)CJ
Q)r--4
0U4U)1
Q)
4U1U
0 U) W0
**
0
0
E-4-
-H14
>)H4 w U)H
U)HU
(0U)1d
0
0-4
41U1 U)
ý-H
44
00
UO
U) OQ)0
0
U)
Su
0
i0
E
00
0
U)
0S4
U).'O
U) 0
,q)d
U)U
$J:
4-)
r-- D
-H
4-'
Cl)
4-
0
01
0
-H
Q
U)3
0
U)
U
44
4
J
En
q4 Q)
U* -
Z
U)
0
C)4
-Q444)
-U)
HU
H d-d
000
0
~44-'
r
Q
U)- a)
c
0
O
U)
U)
)
0
0
-H
UJ
Q)
Q)
O
U)
00 A.)
-H
*
ooU
2
-
o U)
C04
:: Q
O
W
O
ý-t
V)
(D
U)
4-
Or
0
4-i
OO
4-4
O
O
0
O
a
4I-4
0
CO
4-4
H
a)
U)
O
SU)
0
0 )0
4-i
40U)
co 0
4-4
o
4-i
0.H 0
r.
0
-H
UW
d00
W
0
oOW W41l
-H
U
()00 4
4L-44
4 -H
0
5
9
Z4-i
W M-H
u
4.
4-i•C.)
•4)4U)..
4-i
b-OU
zC
P
(D 4J r44
U,
44
H044
U)
SU)
U-.-
JU
U)U-)
*~'
H
0 o)
4HUo
.-0 I
'-4
4-)0
a)
a
oEI
Il O
U)
ou
0 .-
S41
4-4
-H
WO
W0
a
0
-H
o
4-)
-<
OW
U)
W0
'-4
-
14
-H4 4-4
4-)
-H 4-r-.
)
U 0-H
-H
EU)
4-)
U)
O
a)a
L;4
44
'44 4-4,-I
aU)W
r0
OW
4)
U)
-H
Idl
4-)
0D
0
Q
U)
) 0
u
U)
O0 OW
OU)
4-
O
O •
41-
4I-4
UA
.O
.,,,
-H
W0
-
-
-
-H
-1
-0
Z ý"o
'ýOz
i:z P!ý2
ý)) S 'ýo
O
0
O
UO
* a
4-I U)
-Hr
0
-OH
H-
0
-H
-.
I
ul
I0Fro
o •
-,-i
Qn
U)
U)W
0H
r.00
I)
0
0
-,-I
O)
H
0
0
D
0(13
0
ý4
-GH0
#-i
EO •
04
4-i U)
-
~
O
EU)
(n
44 a
0
rd) -H
•4-J
S4-4W
-H (1)
**
H H
U UO
OO
41U)U
U
U Ulri4
0
H4u
-.
0
0
'-0
44
#O4-)
IdU)l--- U
0O d
4-4
(n
-H
0
4-)i
U
-H
U)
O
L-U)
0
4J
0
4-i
w
U OU)
4-i
O
(a .. l
U-U)
OW
UO-H
m
o
Eaa
o
-,-t
0
rd
ý
4
U-.*
U)
ro 4-I
-H
0 -H
-H
rdrd 4
0 0 4
0
~
.*H
U)
M
44
0
.0
Oi
-
0
-HM Q)
o-H
4-i
C-H
0
a) 4J
P
-0
•
0
oo
Q))
IQH
-
(n
Urd -
(d U)
On
U0
CO
H
wHH
4-U)
0\
*41:
0
U)
E
4-)
H44
-H -H
0a
'4
H
rU)
0
ý4
O -- •
4-4
-H
0
SU)
>1
Id
U)
W U)-4
(d
4) 44
0
O)
U)
'-4
4-44-4
•
#
0
S
4-)
u
AO40)
4-4H
4-4 -Hi
0 0dr1j
•00
O -H
0
U
4-I0 rI -
•-
O
a
-iU)H
OW
4-
a)
as
U)
U) 4-I
-
-H
+
+
F.
r4
U)
S
U)
CD
04
" )
0u
u)
U)
H
uý
CU
Q)
S)
(
U)
-S0
U Q
-H
U)
,-"m
--
r.
0
a
H
ro
0Q)
u o0
-H 0 •CU
C)
0SU)
0
r-CU
0.11
II
0IQ)I-
04
UCU
S•U
0U)
-H
rH
U)
CD
U)
04
Q)
CU
-r-
ItoP
<
L-I
0
-H
C)
CU
(0
10
A U
A
U
*
--(U
0U)
o
OC
4-)
0
t
(0
4
04
S-H
CU
u -4
II - r
II Q)
U)
-4-)
- i0
-H
CU
-d
U)
-
4
oC
-U
II
(0 04
4
W-H
CU
Q4C
VU)C)U
,C
-H
II
-HU)
°°
CD
..)
**
U)
-HI
,-'
0
II -H-
Ui)
OO-H
--- U)0
UU)
0\0
VH
-I
m VQP U8P
m)
U)
V
U
U)
A-)
44
0
.0- *uO 0Q
I
wv
0
+
+
41
-
U)
4-) 4~J
rd rd
ý4
0
0
'-
ýDU)
4--°•
+
+
(d 4-)
0
1:0 40
-- 4)-)
-H
14-4
0
Q) w
U)
,
U,
UOU
U
4'i
-H
(9
CU
S)
U)
•.
U
14-)
0
0
vU)
A U)
0Q
C
0 U)
4
UI)
C)
U
0 o
-HU)
4-)
*
0U
C)U)
41
0
OU)C
F-I
4-)
0
A4-) ý
-H
0u
ýO 4U-
44
4-)
°•
00 00 o o00
00 00 00
SU) - -1
-
-
'0U)
0-
-
00
-- C-
l
-UOCO
CDCU
U h)
.-H
(i
ro
ro )CD
o
u:I~0 u
-H -H
#t= #t=
fli rn"tO-ýýct,
1:4
U)
S
~U) 4J
U)
f--H
j 0z
oC•1r-4
u
i
(Zý--ý "
Q)
Q)
•J
o •
-H
U
0
U)-HM
U
4- -H
U)
0
Q
)
O
o
Q)
v
14
-H
0
4-)
0CU
I-
U)
C)
U)
S
U)
-H
-,-
O
-O
oH
.44
-- 0
0
1'-
'-
44
CD
0
C) C)
0ON
U)
0
04)
O
a)
to VU-H
0
U)
U)
II N U)
S r- - -,U); U) -H
0
U
C
U)
CD
(9 mc
C*D
-->1
U)
-HO
4-)
0 ,-U)N
'S
-H
,-I StOH
Ur)
II
°
o
U)
Vi)ý,c
00 C
ý 'f I
CNNCq qN'A"
n \O-
N4
,
C)
0
-H
U)
d-H
m (
HO
--
4•-H0
.
0
4-
~-U) O
0:OJ-)
x4-1
>1U
ý4 10
0
4 U)
0 H4-3
rO
()-, H 0
444
H
-:0
cd3
0724
t:
a)
~
-H (o 4>)
U) \\-4
4-.-3
(a a)
0U)C)
U-r -H
-H
ro
>1
04 044UN
L--rH
S
-o
- )
>1
UH
QL )
r,-) It
N-.
N
t
U
ýA
00
u Ua)
00
() a) U]
4--) k4 -Hi J-)
CJ) -H 4-4 0
0
o a QU
:j ý
drd
0o
C)
4•
00
4H
r o
U) -H
U) U) 0 4-
FD
44-)
rH0
00
-H -H -H
4=W
**
-.---
(N4
>1
Q~ 0U] 0
4-)
40 U
4-H
04
-0
*ro
-H
-H
CC
o
-r-
-H
(D
a)
a)
FQ
-H
0
-1
ro
-,-4..)
O
Q)
0
0
O
4JC)
C)
V *
-H Q)
II
O
4-I
CN
4-) .-
II
A0
k 4J
-HI
.Cd•
4
4-4a
0
SO
N-00
(ON
>1
0 0
14
U]
I)
E-i
Cd
U)
C)
U)
U
S
A )
44-r-n
OU")
II C0
c
4-)
-H
Cd
H - a)
-)
k
U) r-A
a)
U)
J-
0
,CO
.1-
Q)
ro
h
*S
V
4-40
nO
E-'C
r-HI
--I
ro
0;0 r
1414
~(-
f
"2
CD
°4
-'C
U)
4
-'C
0
0
--i
a)
oc•
0
4J
44
E--4
ý4
u
H
0
44
ON
4I•
4 0
OH c
o0 -14
•
U)
rl~~0
"1
>1
-
04
oo
-H
0
o)
ý
-F8
>1
0-H441)
S0
W
* O4
.Q
-H4M
ri 4JW C)
*-
u
1
o
>1
4
v -
.. .
U)
$
J.
Hf
MS
Q)
r
-H
\\\
(D
0
4
0-
HrH
H
W
4141
WD
00
14
H
4-
-0
rl
##
4-)
- -W
>1
ý
I
UA0
O)UAM
4-3
.
-
C
4
rQs
-\-
•
*-
m W z
,m14-J
UQ-0>1 0
-0-Q
Q)
14
Hu
Q
)0
W)Wr
W
1Q)ý
0
0
z
41
4
A
I
4-)
o
,-A
QW
wW
-
---
-i
-
~ •
UU0
\\
0
4
O~
d
33
W
0
FI
(d d
oQ
'-8
-
r
Z-iH
44
.
rHM
Wb
4-
WQ II
0V O
WW00L4
U
49
F:ý
(d
a)
0
W)
'- 4H
UWW•
(
•0
U*1D :::
**
(d
4-)
H
A)
4
4-)4
4-) -HW )
HVtr-4
H
0
r4
tW
ý2 En4
Z-Hr-I44
t
;
r-
44WU
-WWW
H
Q
Q
F
I
4
.
4
W
-H
W
•O -H
IW
A
U)Cd Q )
040 Q) WQ)
L8 H
Q
4
4-)
H 4
a)
-H4
S4
4
(z
04
U)
V
H
0
41-)
F
W
4
-
•
04W
4-1
A
( d
z
U)
A
*
U4
(d
04
tW U()
W>-H
>
(d
0
0)
(0
QW
4-)
0
4-)
*-
-4)
Wi -H
4-:H
J-)
C: W-4
4 -0)
U
0
-
d
0
49
W
0
W
-H
0
11
*
->1
0:
"o
Cd
W
-H
t0
4'
In
H
0
W
0W
4-)
Cd
HW
H
W
-~
-
II
1it
n04)
S
II
4
0(Cd
---l)
t
W
4C
Cd
4-
Cd
r0
0
414
W
W4-)
4W
-)
S
WW
0414 Q
)
o
HU
61
W --Z4U)
-In
NH
0
S
W4
C
W4
Cd
5
Ir 0
A
4-I
WH
U)m'
Q)4-0
-W
04~\
Wt0
--
4H
1z
W
4 -
0
A
*I9
14
1H
,QA
6S
0o
4-)
WW
H4~
4
t0
)t
WZ
4-4e'
Q'
0 W(
14H
W
0t
V
4-)II
II
4-)-
U
U
44
SA
Cd
-
40)
r014
Oo
wSW
>1Uw
0~
0
W
-
Cd
0
-a---
H
414
W
I
-4
O
H~
1-43
1-_:
H
~
04-)4
W>1l)d~d
WSE---0
>1>
Cl-
-H rd
0
-A
1Cd
O Cd
-Hi1
M
tU
0
tk
'-
-4
C
--
4
H
W A A
W
a)~~
W~~~
W
~~
r.
-H4
14-
W
0
W1
ý- -
A
I
-*4--- W
40
'4-H
>1
-- ý
44*H
4C
Q
)
C
4-
W--1
U 4-H
)
A
II
H
4-)4u
AA
wI
I
WEd 1
A
)
0I
0>W
rO E-OýD04:
Cd
W
) U
O
4
E-0IL
3W
4-)
O 00
-HO
U1A0
W
O
U)I4-)U)1
r-I
ZHO pr4
0 U4)U-4)~
4)j
lAW
IOW
Q)~1
'I44
-H
H
C
I0
04
ýA8r*
W
-X:
C'
140
4i
W
4z
rý Cc
O
V
-ý-
J
H
-
t
W
-H
4-4
H
t
3
1
rH
Wb
--
H
0
U
r
U>
Cl)
a)
U)
ý44
J-3 -H
C)
>
-H
Uo)
>10
roz1
o •-
-H
44
Q)
4-)34
0
0
CO
4-3 QD
-1F_
o
v-i
tm
0- W
•
40
r0 a)
U)4
',.tIC
HQ
0CCrd
(0 -H
104
CU
OCU
*
A
,CA
U.
*r-
O4
H
rzH CU>
ro
>1
4
'C
S4
>1
0•
U)Q
3J4-)
-H
C U
0 a (o
>
U -H
--r-O)
-
0
4
OCU
0
0
4-)
0C)
*-H
ý4-
0 CUCU
(aq
Sb
H
00
0., -- -
(N
'I
-
m
0
Q
w
-H
14
a
>1
ý4
4-3
7
.U
M
-He 0
U)C
* ***H 4
AM
O
.
'Crd
4J
--
U -H
.r-H
4-)
H
-0-
CU
0
-4
en
U
A
-H
4
Sn
r0
Vs
-H•
u
Ua)
00
0U)
0
0
U)
UC
0
-
S0
0 )5
r4
094
000
Sb
4L3
0
-0-
I
SU) V
W *0C$40 4
rH
-H -H
W
-4
~U)
v v
;: Q)0
MO0
-H
OH
-):3W!ý-4
CU 41 41 -H
>1 w zU
mU
w)v0
4 -i
H
r5
U)
4-3CU
a)
IQ
II
-H
0p4 --H
) .U
CU
-H
0
0 m) C)
a)C
a) ) a
-H-H -H
H
Z
-
H
-H 'Cl
o
-H4
ý4
- O
0
DCU
>1
:34Cý4J
04
OU
4-)
>U
CUOtU)
04
a)
ca
41'C
4 4-34
A
4A
*
A
4
0
0
$
0•
U).4 )
H0 -H*
0
CUCU
0C4
4- 30
4-)C
-4-4
O4
4J 44
3
4-•
S04-1>
C
O
-H -H
ri
-01U
9OCU
m 4Q4
U-i
4H
-H4
U)----
4-1
H H
00 .
Q)
,--
-H
-H -H
'-~
-H
a4 HQ
0--* ý4
>1
4-
H
.H -H
-04
-JI
o0C
v va)
S
U0
-H-H
H
0
V
V4
04>,
-0 0
4U
.4
0
•-Q
•
CUCU
0
A
-
H -V
H
A
0A
.-
4-3
U)
4 0•
H r-I
CU
kCUC
CU
04h)
-H
V-0
e!
Q0
-H -H
-H
-H
H
(N
-- ,
,
f
t
kN
cr',00
0
>1
Iý4
U)
UH
43
x
ca)
C%.
44
-H
4-3
ai)
U)0
>
b~)
UF)
0
H
t)
Q
H
4-)
U)
R
.
0)
U)
0
C0
U)
0
0
-H
4-J
IIz-II
4.)
O)
-HAO4-)4-4 0i0
4-H0i 0
>
M
w P4
d
HZ
4)
r(c3)
>a)
0A
F
H
w
H
ý4
EnI
ý4 u
Cd
O
d
V
V
tl 00 ONC, --
e
U)U)0
tnci
ý0)w
ci
Uoýo
ino
0
>
4
a
MU UQU)UU)
Cd
Cc
U
U
-0)u
a)
c)
Q
C
O4
0
4c:
0
4
-
0
ý4
4
LW
ro
ZII
Srd$
b)0
LW4
0) 4
aCd
-4
c
UUd
V)O4U
rl
-,\,
-
U
Cd
P4
S
U
- t)
I
r:
4
>1
0)
4(
0)
4d
0
4
4
-
r
)
-H
dl
U
4-1>
-H-He
\
0
0
ro
0--
C4
En
a)
m)
4
4
U) -H-
U
01
0
>C
0
U) U) 4
*U
4..
a)
-.-H
(z
ý
00
"0en
00
4J
-H0-44
N
a
-(0
ol
4
-
00
41
0
a
-
+40
U
En
(
E-4Il
0
-u44-H
>C (a
Cd
II
r)
.
>40)m
oE
a)
0
4
##-K-HU
d
4
-ULW
-Cd 4j
U)C
0)
Q)
E)
U)
.40
t3
U
xH
E-f 4
-
Cd
>
0a)
E
)0
>
0
LW
44
ri
0)
rc
-Ha)H
Q
4-3 )
40 :j r:3
0)-HU)
.-90) )
E4 4
4
OO
-- H
----
44
E
U)
4J
u
(a
U)
4
U-
C
I
LW
0
Ul
0
r
0)0)
,Ag-H
H
-.---
1
I
0
A
Cd
H
rddt) l
a)
-HE
A
r-4>1
(
ca)'d
P4
CdCd
4 (d
A C
0)4
-4
dl)
nr
0)Cd
E
a)
a d:
4n
0)d
aQ
o
,
0
f
U)
0)
Cd
>
0)
4
4
(nU
4
-4
U
ri
H-
4C0K
C41
U d
4
H
Cdb
)
U
-
0Cd
'0
S4
A
0
C4
o 4
4d Cd
9ul
41
4-Hr4 4-)
0a)ju
U)Cd
4J
F-I
4
4
C
4
r-$
41
0
40-
0)
U
Cdd
4
(
0)
H
a
C
4
U
4J
s
>-H
4
U)
0)
-H
44
LW
-i
4J
>1
4
-a
H
4>
4
(D-04J
0
U
(a
-H
r-D
Hd
b
rd
0U
ci)
**
4-L4~
-H
EnU
(d d
-H 4.
4-J
U)lM
)4
4
-Hrdod(dU)
4
q
U)X
x C
-H0
Ua
-H
0
H
44-)
41
0
-Hw-4-
0
4J1
If VI
>
a
4-)
-U)
4-3
44)
-Hm
m 0
>
-H
Cd
>
-o
>
C
11
4
-H
-H
0~d-
U)
U
+
1 -X +
0 4 *-r
(0
Cd
U)i
o
0)U)cK>
00Cd-K
Cd
)
C
>
w
HMd>>4
d>>
tn
000
0
*
O
LW
0
ý4
4-4
-.-H
V)
0 0
-
-H4
-'4-4
ca)
V
-(
4
4-
--
Cd
r-H
E-
A-W -
4
U)
()a
H
rz
H
a
I-4Ul
0-
0b
$>ic
4-Hr-I
*U
n S 0 'o ZR
mu)U)
-HU
V
rIU - 4a
ý
(V
(0
U)1i
-HQ
-
P4 rO
-.
~
0
V
-HV
0r V-
ý4
), 0
U
r4
*
Q)Q) W
C1 eo
C(
:
4
4(
-H
)
C
Un
-
H
4-) -W
Uit
b)
U)0
ca
(0rIýJMrIv
o
'd
U) V
V) ( 0
-
tUn
IS
V
ý0)w
d
-H
*
0
-H4U)
V
ýl)
d
o
b
E-4ri
0
c
U)
V
0)
0)0
-H
0O
00 o
4 O0
04
dd
0
z
d
0*
O0
40
00
a)0
V
v
HM
E-4
tin W)tA
0 0
HH
44
L-W
U)
J)
4 (d 00 ý (V r-
ýU (Di
we
H
a0)>
o
0
QH
4
4-H d
Un
.H
4
a)V
04
V
-H aU)UQPU) U
Cod
Cd
-U)U
U
U
u
H
w
-r rC C) k (d 'd
4
v
-U)
)
4
3)
4 W
> W
*H
>1
4H >D 0H
CaiO
d
4
V
-443H
dCE4
w
0)
MA
H
H z
-HP
*-
H
0)
-H
4O
)
0
4
*-
4-
r
0
4.
In 4-)
-n
b)
-H
r
ci)
4-H
-
0
D
I
4-
-
*-
U)
A
t3
U)
0
a)
0)
U
-.
1
0.00
) 4
-HD ;
U
r~o $
oa)
0
)
H
o
L)
Cd
O
U ,
-H
-,Cl
-H
-
O0
o M
-a)
0
I
[:4--FI
-)
o
II
A
a) ..-4A
4A
rH -H
,Q 04 ,Q
m C -H
a-)
0ý4
--
: M
SCd
ý4
4QaR
A
an
-iD
**rN~-
(Z.
-,
-I
o-t
r-
P~44a)-a)
[-I
-H
to
Li-Z
cc
0
*4
0,a
- [ILIA4
- H
0 41
4 >1 U
V V V
O
a)
I-
N N (N N (N
u(5Q)
•
4
-i
Q-
U
H
-H
(.
r
•
A
A C:)
I
N
0
U)
-i
04
U
a)
(D
ý40 Ca
0
m
A
I
0.,
aa)
Q)
4 ,rO 4 5-mm
41 r-qCw
-HrA ) w
>1
4-)
F 00m
II-
(1) 4: w
0
0)
0 440
,)U,) •
QH
.Hq
to
ý4
QM)
0 04
4(
,c:
,Q
0-
O
0
Q.
41 m
;
4 a4-) U
oU
04
o*
-HC
C
Co
Ca
**
Ca
f ) 0 a)-
-H
[:14 -H 44 U
Ca ýj -Hq a)
.W a)
0 44
rQ)~-
.H
000 -H -,"t
Cb
H -H -H
cl
--On
Ns ',I 4-s o t,- 00sONs <Z4
00\O
0o
rý4-i
-rl
g
-H [: Q
41 0
-HoOOW
.(0 H4
4-irdU O
H
U
4
0S a)-i0
UJ ma. >,
)) Cd
-)
a)
;Uj-U
4-0
-4a
04
0 )-H
4
-4
U
H4-)
Ca
-H
041
a)
to J r-H
-
0
A
* A
0*-t
04
A
>1
-4
a)
41 *0
-a)
OCd
V
V
[- -H-l 4
4J) -H- 4-4 U
Q) ; -H a)
-
0
U
U
-H
-H
"$ "o
V
Ca a)
0
U
*
4-i0 -H
O-H
Cab d
441
44
,C •
**O
4
-H tH4
It .,. te'
V
UU
00O
N
4
O
.,,
0Q)
toa
C-)
o
5ý
q
-H -H
4
0
4
;
ý4
O
Q)-Q
++$
r
H -H
r-
U
ama)
*:# =
y(
,E
ta)
40 Q
A-)
:1
1=
00
>1
a4
01
04 0
>
a) oa)
0
Od
Cab
\•
A
4-)0 )4-
E-A0
04
H
-r0
SC,
-
UQ
HCa a)a[
CdrH0
O
*
*a
04Cd CU U 4
(~d Cd 4U.--.0 04
00
ýQ4 U
0C
0
-- -H
04
a)
UH
-
El-
0A
-H
04
0
Ca
4-i
H -.
4-
4I
4-i
U)
-r-i
-HA
44
44t
Cd
> ,Q
a)
a)
u
HU
a)
,C
ý4
4Cd-i --HCa) U)
a)
Cro >
f:
04
H
HAA A A
I
-:s04
0
I
H-
II
II
-0
-
4-JH
U)
U) >1 Q
>1 M) 4-)
U)U)
44C
UE-A0
\4E4
-HMMU
(21A
H
e 04 4Z
Q)
IV.
~4-4
Z
-
t
o 0
a) -H
-rl
ý:
a)
ý-I
II
a
w
-0r;
Qd
HH
4 --
rN ý4
>
In U
m
(n
(0
r
~M
04-
W0 4- 4
0 a)
SQ)
x
-
,Qr.
.
44 Zo
I
0
U-
a)
II
0404
-
-H~1>1
0 1
O)
a) -H 4
044>-
0
O
O
X
-
U) -H
r(U) PL4HU4
WrH 0 >1O
U) U)04
S---00
F14 ýr
Q)a)
U)
-HoC)
(0 u
0• H HX
U) U),
Sa)
Cd -H
A -
O H
0H
H
ý
>
>
-H
CFa)
0 C0
-Ho
;
r-i
OH
01- a)
** HU)ý4
-H
C:)
;i
QD
A
H° °
--
*
4-i)
U)
K4
ro
a)
.-
H
(0rU)
44 --r.
PH
0 Ha)
r.
w
OH-H
U)
0D
Cd-Ha) a0 -H
ý i H -H
>1
>
0
*°
U) -H -H
a)
0
00(
0
**
Cd
r0
::1
000
-Q0
0
S•H
0d
a)
-
x
4-
o (0 0
-H
44
Z
C-i
a)(o o
S44
a)
-H44
O
04ý-
OH
ro
Cd
a)
ro
0O
Co
04
U) 44
a)-H
a
n0d
C)
rr-H
U
U)
(d
0
&a
H
-H
0
.-i
090
44
S
43
,C
.aa
.- i A
A
O
0oo ro
>1
A
,CA
04 rd
0
*d
H
4j
H04
a)
0S04
z ;
I-OUU
OHSr
7*0
-1440
- m
;-.i 04
U)
CdH
0
a) 004U)
-4QC 0
-H4
U048
-0 U)
0
*1
44
-H -H -H
ro ýA -j~
rd
-- 4 ) 0 -H
W V
W ý- 44
V
-
-H
0
-H 4
-H a)
01 OM
4
Q)
-H
HH
HH
r- -l -H r.r- -- i -HA- -i
-\
-
*- Q40
•
KO
I-H
Cd-H
04 HU H04
#1 #1 1 +t
Hc rH
000j
Ho
:
u
F.4u
S;
44
0r
Cd
04 -H
Q)
rizi
04
P4
4Cd
H
-H
S
a)
Cd
-H-H
0000
-H -H
II
H H
414 -H
©
a
ro1
a)
4
m
H
I
-Ot
A• A
*
~-- -HM 4
0
00 0v
U)
ul0dU)
Q) ro
H0
-H
U)
U)
-I
4
xi za)
a)
-
H
04 ::
00 $:.'
0
44-
a)I -•
440I
-C
u
0
44
Cd
(o4
Ii
04
4o
-
-H
C
0
1
r2
r -H
=ý
44
4-i
-H
-l
04
040
0
II
--'
0
'-.
a)
SO
0)-U
-
d
-I
a)
Z
C
o~
•) •--
O
0
~U)
Lý
3 II - II o4 II oU
()
4
9--(1
r=; -UU- =
1
Fý0
4-4 ri04)
-H CdZo
coo z
-Hri
r UUO
-J0U
0
J
a *
(0
O
-
0
04
)---- -
A
0
00 O
0
0
0
0
U)
0
0i ((
0
---
T$
d
-,
0
-q
'-
-
~-0
_
a-H
.)
U)4
u r
4
0
C
-4 *-41
r--I
---4-i
4
-H
U)
Q
C)>
>1
-0
+
U 0
4
Cw
ci*
HW
H
U
U)
U)
U)C)
ro
r-a -
r
0
0
0
Pir4
U
-HQ)
<
ci-Pk
U1
Q -.
0
04
'0
-- 00 Oq 0y
''-0'-'0 ' 0
'
'0
--
u0
a)
a) r
ý4
--
-4r-
-S4
Q
U)-••
t
- 00 0
c.-
r
r.
04 Q
**
UC H
r-4 a) r--i
4-i-Hq
-r-1
X-
I
I U
0C
0
0
E-i
Q
0
Oc
r-4&
a)
ý4
-H
)4-4
O
0*E-4
E- O z
0
(4
- Q
-
\
--04
-
a)
Cd
S )--4
ý0
U)
mC
ri
4-i
U)
Z
EQ
0-
0
U)
E--,
-H
-
-H
)
3
1
UU
U)
)
Sý
-4
4J
U)
SQ
d
II
U)CdZ
-HZ: EQ
0
4-r
0
41
U) *
-
>1
04
rCr 4 01
UU)c
Q
0
a)
U) -r-H
i
-
()C)
0 --
44Uc)
F-L4
0)
4W
C0
0
S14ZE-4~
U)
--
0
_-
a•
U•,
U)
-HH
-4
-H
-
1
1
u-i a)
U)
4-
U)
4-)4 0
0 U
U)U
-
-,(
CU)-H>,U)c
(0 4
(N f.
-4
ON
(N
- ,-
--
-4
Q -ri
w --- 1cc
C
r4O
H
d>.
-- E
U
(N 1-~'
-c~
dCo --
4-i
04
L -rH 04H r-1H
-H04
H
*-
-U
-
$ý
*
H
l
Q
N4 N
-H
a
H UuU1
)
a)- r--
40
U)C 0d4
c
0(C
-
ii
(o
1
'4
4I-i
•--H
:
Z
4 4 )
U
40
E4--
-
--
IIFZIr-
I
;4O
r-Q)4r54
C
F44.
4l -U)
4c$ -l
>
4CU01
U---
ci
( ,
J (0
+
0
U
-
dc--
-
k "0
(N (N
H rH-H -H
c-ic -- i
o
4
(a ::
Cd-
-U
't
(N4 N
•
>,4
Cd
0i
4'
N
>1
:
-
4-i
f:
m
r--i
4
Cd
. 4-4 -HAi A -u
4I4•
cid
.-
F•)"Q
U)
-4-
-I
I
-H
r-i Q) k
4
-Hr-1H
--
Ci
Q
ro* -
*
--
U
U-H
U
U)U
•
-x
(0
U)
O
(-H
3:
A
I
)
E Sc
I0
u -
Q)
N~
.
d
)
,'
II -C
>
II
U II
4-'U
,--I
I
0
-H -1
rU)41
U)UnQ
(-5dciUU)a
Q)
Q 0 O
.--
a))>1 -
0r
t
-s
.4
4 -,4
-H
< i(- --
- CDý
1
00
" r"-1r-)
'-
T$
0
u O0A * 0) ,44
.uX.
()
Q
)
r
*
U
d
4
U)
-H
F•~~~
S
Z
'
--
>I
O 4-04
a)
--H
4
4 U)
)
U
4-IC-U)Q
-H
*
Q) CE
4
-
>1
II
E
---
-H
i rl
-a-4
r-H
.
X4
o•U)
4oi
T0
IIi
cir
)
U4
)
-H
Cd
U-04
r-
•
- ,
u
-
U)
>U
rSu
-H
r
-0
O
---
-,r-i 4
U 3
-H
OI
*
>1 U
r-i
w
U
0
a)
U W U D
i - •
..
)
Od
0
-H
.cx
44
0-4
E 44
C-*-,
0 0 0
U
0O
O
H
-U) 3--I 1 4-H
)
4m
-H
4-4
En
--r. -----
H 4-4 H Q4
" CH
) .r- U)4
H
01-aU)
04 Q
)
*-Q-
r
o
-0
~
1.
)
U
.
4-
0
rH
>1
Z0
5
F
Q-)
r-i
-4H
--.
-
-(
()
>1r
0
A
I
U)I1-H
i U)
Q-i)
r-I
04
4-4
0
C-)
>
-
--
-H -Hci
S
(1)
(C
U
)
*-Q
--,-i r--4-J)
()
Q)
S
U)
Aj
U)
--
S
U) .>1)
,-
U
-I--)
-H
U U)4> -
-A
-~
-
u
I
Cd
--
J-1
CO
F
U)
-H
+
-HU)U)
W-4
4.
..H• ) -H•
C
U)
E-
U
0
rH
O)
t
r-44
-:H
44
U
-H
0
>
U)
---
1-
Cdi
4C
U
-
II
II
0
rO
-
0
>
rC J04
--44U
CU0
-,H
U)
4)
H
4Cd
Z
4-
--
En
0-
rl.
,
4-)
a)
r
Cd
r
U
0I
OoII-ii
44
C
U)Eiu)
4 Q )
Cd 0
M
-
1-
J-
Uo
)
U
Q)
ro
UU)
U)
*-
Q) QC
O
<
1
rQ
U
~-tt
-t-
-- N- t-Nr,
-
'-)
tc
N-- 00,
N-N-
-N-
(0c -)
(N '-c- '1-)
ýo r-, 00 0-ý (z
'-.(
-
"I- k
-0 N
00 ON Q)
00 00 00 00 00 00 00 00 00 00 ON. 0-. O-N ON. all C-. ON. 0-. ON. ON
-H
km
-q4
d
44 rO
•
0
-
rl C
Q
>,U)
Q-
0
0
-0
0
4JU A.
0
"O -H4
4J00
ou
co
00U
U
-
•0-R
04
U)0
- Q• -
a ---v-
-a
m
-4-H
0
M.,--
rO
Z)
R
0
U)
r
H--0
-44
-11 44-4U)
i
j
4
H . ) I Ho) H 4-4 -
0
H
ý:~
(1) I)I A
4
-H,•i "o.
'•
UI
O
Uo
Cd
ý4
• 44
--
41
4U)
-ý4
44
-H
H
o4
,-I .0
C9 cON
C\
OI
Ný
rC A
0
,4
J¶-yJ
.
u*
0
• r-I
-
.4
\
rHri
vý
r
04
0
ro
o
>1
U
Ar
00>1
A
C
**
a)
*
-
Hrdi
roX
ýri r-C.
'
Cd•
(.
)
(1)
r
i
a)
-H HL
U)C
s (o.d
00
uw
-c
040 a 0
Q0
~U ;o5U
)
, -I)
W
Hr -O4
4-)
rC
4--'
U
4--
w0
(
4
x
Q)
(DC
-. )
4 (4 rO4-4U
--rU
U
\
-H
-H
-
N
ON
F
O
)-H
41 r-4l U)
0 -H-H
mo u
-H -H
0-H
U)ý4r
b)U)
ý4
(d
-
00
LWQ
Oi
riý
44
0
0
"Hv 4
>1
(0 (
CH
4-
4-)Q 4
40V >
0U)
)Q
4()
U)
44
rg.
4
O-HQM4UQ
0
4
04
~~
~
~
~
~
~
---
t
-
-- U)U)
LV 4U)ý44-)
0 -Hi4-4 U
1 oL
Pý(1) x0LW4-4ri
-H-H
-
-U)
- 4
) Q)
U
RC
Q)QM
O)H CD
Q
0
I
-rd U)
Mr
r.d Q)n
- C r4
U)v
r-U F- 04;J ý d i
U)Cd0U)
-W U) ý4J
u
XF
4-4
0- u**
0
r-4rHA
rn4
Hr
r-C
-C
ý:
OU)
U
0c~
4
U)
C)
0)
rT4~
d
*
)* ko U)
4
~4 44<
4-)~
044-4
H
-H
* -Q
roU)
A
Oi
-IO
r, Q) H
4-4 -H 00
-H
-H C-
-HU)
i 4
eo
U)-H H4-
)Q
Q UUrU
U (
o
,C
(0 Q) Q
Q)
ý444- M Hr
ý4
q
H
-H
44
0
-4 ýQC)~
r 10
ro,
Z
M
O
ýý
U)
apHirCw
i
o
O•••
*HU
)-
-rO-H
.
J
-
4r
-
a
04 U-H
0 -(0
Q4>1 wX
. H
0 .0 ,-4
a)
Q)rQ•
-•
U -U
•M
0
r4
-•
Q)
04
- %4 )C
UQ)4-4 - H u U)*HI
()*
- (0
Cd
Ld U
-,
V -,•0
,C
4Q )
r-ir-4
U)
.
-U
04
A
C
-H
O
:4
rJ"J•
UrH
(0drH
9FA
0ýH
0
Q
o
-1
0
0
o -,I
(o
04
i
U)0
4H
IQ-C.
,rdUw
.j
FZ
04
-
0-
-
-A I
*
ro>
U
04~
•
0U)
U1)
ro-
U
•
0
Q
-u
O•
0
-H
S
ri~
~ ~-
r
)Q)-H4
0
U
0
o
0
U
*dF4
g3
0r
4
>1
1
U
4U)
4
-0
0U0r
0r04-)
X
00
X
O
r4
(1)U
uu
- i
-H-H
0
41
o0
(HH
0 Co
k
0
(*
,4
IU ¢j0)
,Q
m
-4
--
A
-o H•
O.
kO
•
"-,,.a
--H A
H
Q -H
V
t-, 00
C)k4
-
(1
04
)
-,-0
..
U)
&
0,,
)4)
04 )(0) u4-1
0
-H
a)
l::
A
-0 .• -,(0
0-H
,•
A .
0
>1
(o
a)
4-)-0
4
4-)
rl
41
H HH r
U)-r--
0
J
43 U)4 HH Ld 04
OMR C:
ý4
)U)C
W
00 M
O 43
F:
k
Ok
4o--H-4
4 Y
k
-4 Q4>1
va) a)) 4a)
)
ao
U) -H
U) 4-)
4
.)
.1.
r4k
ul
.
Q
0
>1((
A44
4
•
U)
0
0
0•
• •
Il
* '0H
rm
U)U,0
*'0
Q) -H
** -•
4(0
U)* rU)
<
A A
0
-
~M
0
r4
-0 4
0k0
u
)
0
04-H0H
r-H
ý
v
m,-
A-H-A.
4-4 4-
U) --H-H
r-4
tO4-4
-H
-H
-0
0
04--
kH
-H,
ý: CD
(
U .H) 0
JJ
0
-H
(0
04
O
(1
lO
" 4(0
4'1
Q O
0
()0
, >i
0
a)
0
00
-H
4
'-H
A
0
o
4 A
0
* '
- 'H
0
u ro
(:) -r-
0k4
4-)
4Q
-1>
04U))
A-H
00)o:-
(1-H1
' H'
U
00uF
k4
"-4
00
00
->1
04
** U*
44
'Hr
U)(0 4Q)'HU
04 O,-H4(0
040M
U)
0,C*r
04
U)0
-HCA
4 -H
;:
G)
4
-H)d,&
Ok) -H
WHQ 'r
J-)
a)
ýJ
MA
Of
0-4
'0
a)
-H
J-)
44-
)
0
0
O-W
-
>1
k400)4
0U0
>
k HEn
H4w w
R
4H
4-)
O r-H04U)
04'
- 0
)0j4-H
Q)
0
J.)
Q 4 -H
(1)
4(
-.
04
4 U'0
H0 0
% -'0'-'(1 ()Q
2I
o t*0000\
ONF
-ý-
-
0
0(
U
k
<u
-.
rH
-H-H
0k
404
04
00)
O
'o
00
4
NM
004
U)
*0
& 0)
*O--H
ri
4-3*
O
0
.-
-4
Sl0
U)
'H•
004
4-
b)
r
- l y \I r OtýOn O s
4-i
4
-'H
H(
40)
0
0-4
-H-H
H
--
0)44I
a)-
'H-)
-.. H
-4-4
Cxr2
-
ri
Uo
u0
•
'-cd.
tc,
Z
0) X1
-
*
V0 4.* -o 4"
>1
-Hrdr
S4
* r
-r
r
-)
-O- 14O-$ F
(0 -H MD
U)o
V
%
cd
04
i
q11
•
-i-I
I
O* -IO)
II
U)
ro
0
4-
U)
Q
tm
0x
4s
;j
0Qr
H
U)
-H
5
U)U)U
Q)
rororc
r
000
rd - H r-A r--4
u
u
u
U,•
r rd
-
U)
-
-H
S4c
P4-
----
i4
0
- 11
AI
4-
44
-*
OW
-U
1-H
4
44
9
>1
4
-*
I
-•
--. C)
*
)
4
U-4
--*
-
~4--)
40A
-
dv
0I
I1-
"
*0
AN
U
d
4414
U0
-
1
c4
'C'
-O 4 ) - (
44
A
11
*)
A
ý-_ --T-
$
HO
41 0
-H4riU
ItN
--
J
U)
0rl
-
4
U)
H
41
00 0\01
NV-)
-H
ro ro
7$ ;1
r-ir- r-I
(0
U)U
0
u
o
r
aV w
H
Hj
00 >1
(0n
04
v
v
P4 cU
W U)
0
1
0
-H-H
04
H
-H 44
071a)
OO
;
D
r
-H
H)i-
4
04
-
M
1
Q
ir
U)
c
H
-
00
Cd
0
0
0z)
F-:
O
o 41- (0 0
u
,
u*
ý-H0
Q)
4-
a)4
-U)
0
O0 0- u
d4- a
0
0
U)UP 4
O
H
-H -H
1X
-H .
4 Q)ý
,Q
H-
0*
U0.
-HAi
ii
04
0
4A)ci4
-a)
A
-
u
0
0
VV
4
H
1o
-
-
00-H4
04
0n
-
•
U
*4
' O n•
U)
U) ::
R t0
• (1}OdH-H
r >,
0
r$
*
4
o.,
-
4-o co
( 0
0U
-4cd*
.
0 04 r
- 0
A1
Q
-0
a ,C
R
V ;
(o
ri •r -H cn
•
U)
I U
d
dC
0Ot 75*4- -H0--U cd
0U*
4-4
0>
41
z 0 ro
C
00
V
(Z
a)
a)0
u
--H
a)
44
-*1-)3
0I)
rHH
.J
)
N
4
0
-)0
a) ---
c
•I-
II'
r
-4
.•
4u
U)-
--
1-
A404
0
r5
.--
-
u
0 -H 4 C)
r
OH
--. 0
U4
-H
---
-
A
- I
4-4
o
r-I
U)
ro.Q
41 44
4
C
A
-H
--
-.
c
404
U--4m
n
-
4I
)0
) U)
- 0
4-4
U
-
r-H
--
r d
04
00
4
A
n
4-
4-
rd
c-d
00\
*
--U)
H
U
O
-U
-H
"
)
Q) L-8
U)
0
0-
-H
0
A
•
0
-d
4-
-
u
i -4-4
r-r- Itw
0
(4
d
04-
00
ro
44~
-H
cd
R
(•
U
Uo
0
c4JI
:j
* ,--
N-
o
-H
4444
u
(0
-.ti
--1
N
U)
4
aUZ
)
4 Z:
U
U)
44
--d
Q)
U) o
0
Q)Q
A
oo
M
0d
"
r
Q)
ro
'H
0
04
w
S--HA
-W-
()004,Q-H
U)
ý
ZC
-H
R o
4U)
0
O4
'4-4 (d
C
U)
0
W -H
>1-
II
0
Wo 0
q II
U)
01m
,0
f'- 4-4 0
4i -H
'H
-
CO*
o'd 4
rl 00
.0
Cd
t
A
~
0
U)
E)
0)
0
0
Cd
r-I r-I
• ;-I -H
U) w
XA
FX (
0
4-4
M
00+ (I;
S0'd 'd'
U H
U Hi rH
::)
-H
-0000
H
--
r-H
'-
4-I
o -*
•on
m
U)o
0-
A
I
1OD
o
4-4)
-.4-
4
H
SoS4-O
1:4-
,n --0
-
0J-) 1-I
A
O1-ý
SH
vC
A
00
44-i
42Cd
A
JI i
4-4
-
>142
ý4 0
0
00
-
04-
H
Ou
Cd
0•0
SdO
-H
-4
Qi)
v4
C
OH0
41
4-4
-H
----
--
'- *H-
-H -H -H -H
4##$- -W *
--4 N
-4
rý-)It tr) ýo N 00 0\ (Zý -4
---
-
V)
t'ý' 00
t'ý
rv-)
ry) fý')
ry)I\t
ry)V)
ryl ýo
ry-ý
N Oý
N (Z
-) --ý
rn N
r-4 "o
N N
4-4 U)
0 -H
U)
4
W -C *'d4
4N
*Cd
ro
c)
rcl
0• -
C
0)
i c- 1-t.
4-i 42'
) -H 4- a -rH
4-4 1-4 4-4 U) A-i
•
R0
a 04
-H
1 41
Q -H W) 0
W'
1-4
Cd
•
•
'd4
UU)
-H
04'do(0 404 00
S4
>
C
0
'Ho'
ro
0),
Q
U) 0
U)-H
CO
42 r1'44
( 0
4404 Q 4- ý4
~FZ
4 r'O
14
4-4
O4
04
-H
r
4
ro
,Q
-)
U 4-
•
Cd -H H uU) l
Hci
OO
O
'd
U) W 4-)•
U C0
>,O
ci)L
.r0
H(1 ( 40
.0
4 4240
W00
Q) U)
-I 0
0042
•
oo0
•
.-i -H 43
-H 4,-I
OHrci)q.
T;'d 44
Q) 0
4-4
4c
0
'H
U
41
C
m
04
0
-H
'd
• .X
eiC0 ----
>1
A
4A
•MU)C
--04
*
-'d
'
OW
Cd'H
>1
1-4
4-2
420
-
J':
0
aW4-44-41
,0
*4
Q) 0
>4
o
'>1
4o 42W42
U)
r
,4'rO
d 0
U) ' J-)
,4 ()
S'H'drc$
O
0044'
-W
-U)
-HW
00c)
-WW
4-4 44 r44
-4>
42 -HH 4)
c)
(Cd ci) C
0CdH
O
QW1-U)
4C
c
0
0
*
'H-H
40
Or
v vF
U04
0 0
ci
-HO
r-W 04 U)
) >1W (
u0
'
a)
dc)
-H
U
0
4 U) U)
-W
ci) U)
'd ý1-i
4-H)4
Wci)
x
m b-H
U)
W420-H3:20-H
mU)4'Hk
ro -mr
-H
04
*V V
4-)
04
Cd<C:ý:
d-H d -
-H
'dW
4-4
ý: -H i c-
o*
Qc) 04-4
4-2
-H -H
-,--t
*
(Z
NN
V
O0
C'N
w
Cd
U
4-)4
U))
u
1
0
-H..,-i
o
04a
4
U04
AE
SA
-H
* ,C
0
0
u
.4
1
S)A
(0
--
E
w
0r
0
0
,
)
rI
Vj 71
Od
ý4 V r: 44
oz-..
O
0) 44
U U
-"
5ý
0
U)
0 r4
-
UZ
O
04
ý
0N (O
~ ~td"
ki
I)
UU
-H-
H\
--
- o
P
CH
U
H -00-)
•,
II
0
o
4
(0
d
-W
4
Q
U)
0 4
+0
4-)
0-gd4
U)
V: ýj* ý:
ý4
+
r-H040+Cd o
-H-H-
-
pi
,CJ
O
4r
k0-
>1
-
z
04. >U,
w
AI
0
0N ON -04
-HH I ,I
r-i'ItUUU
V)
:I IC
(b
04
---
-
\
4
ul u u
Fi
-
04
II
Q_
0
A1-H
O
-
O
E
r
-,
U0 ,Q -i
4 4-c
U
0
mr- **4
-04o
-Cdu
Z: XC
0- (w0
-H
4 ý
---.
•
m m)
z
4
(0CQA
Cd
Q--
U)
_
---
0
A
a)
w
VO•
V
04(1
0
t
R
vv
I--
H- -H-4
C\
b
UU
--
*-*
H
-C
*0
C)
U
(0
Om
>,U CdC
Q
Q4
>1
0
r.0
,C
o
,..
:: a)o
4- 0W4-)
ub
(0 04
U
r)-:U
04
U)
0U)
-H
U (I)0
Q4 a
>1 Q)
Uo-Hi
4 0-) H)
::; 4
Cd
-4
U)a)
C
Cd)
04$
t
U) -H
A4
U
. rU)A41
() r-I
OWO
LI-HU
rrf
H
Ui -H
tu)
A
4C
0*, (A4
--U
rH-H
-u )
-4 ) 0
C4UG8H
0
ýQ04
U
U)
>
(dr
-HU
u QU>
*
-
E
U
U)
UA -4
,C(d
Cd
UU4
*
04
r-
d-
-H
>
H
0dz
4 >1
-)04
0C
O-d
Q)m
a)uos
-
C10
C
vv
; II)
04>
rHW
U4
*
a
W
FU)
rH4
4b
UU1--
q44
*-*
I-
4--
U
V
-U) r- -4r-1- rý
U-HU
XU-4
rA
a
H
UU
Q
rU
UCd
Xb
00
UD '
X
C4H-
s
a)
0).)
--
-
44
Hi
44
'ý
I-*
ot
0CI-V
*
o
-
c
0
-
()
)ý4
-
ý
0O
0O
-S
-
(1)
d
b
-HI
C)
*
U
w
-H
0
Q) 000)
'4-i AU)
U 4-)
44
0T
X
U
-
-)
r14 Cn
1
OC Ul)
4-4
0 Cd
1
-H
-H
Lý
0 01
4J
Cd
04
-Cd
04
-H
H
0 4-)
Q) Q)
-H
>1
ro
>1
ai)
--
H
oo • • C)
- H 0-
H
H
4
-H
,A
0
riý A
I
0
(0
0
ý4
1-1
04
J 4-
>1
o-a
4-i
ý4-
Uc
) ci) Cl
0
-H
a4
0 0
40
>1
4
0
-H NEW
0004
O-
A
ow
4.
0
4J
-H
Cl
0
0
-H
v
-H
°)
-I-
-I
-W
-H
4-)C
VC/2*Q-4 l
-Ha-Ci)
'-
0.r
C)
U)
4-i
J0)
VVV4
V
WW
H-H
z
wD
v
ý4-
)
;
o
, - Lrý ýo tC-, 00 0,
r
14
Q)
U)
O
-H
Q) X4
CDU U)
0
-H
CW
,
41
rc
4-W
4C
rfl
Q4
-H >1
C 0
4-i
ý4ý4I
(
04
4vi
CH
H
r-i
:•
*
ýJ
d)
O
u*
H
0 ,
Or0
14-
ro
to
0 -H
0oH
0~00Cd
0
4-)
>I
I.Q
rQ
ro
ro
00O
ri00
4
U)
- ()
l
00
u
QH
4 H0
n0 -U
ý4
u ,- ci)C
>1
r4-
4
-1 -H.
I-Q) 44
-0
ro)
ZO
0Cd
4-i
ad
I--
th4
,-
Q)
-.
*0 ro ;:
04
1
4-H
4
>
4
0
-H
>
ý0) 4
0A
>1
O 44
0tHV002
Cd
L>
ý4-
0C )Cd
C)
0
I--i
-H-
0
A
4A
~
44 -H0
4-0
0H
0-H
00 -, O
U)
>,Cl2-H
)
9-: 4 (D
0-d
I-EQ 11,
I-H rN
4-i
r
0 4>oto
0 rdiU 4J
C4
H0
00
"r-\
'l4
0
.,
u
tH
u
0 0
-Hi -rl
=#17##=
d)
14
,-
-
-
-
-
-
14
I--i
4
rd
-H
14
-H
Q-
r4
yO'INt
o N00
,
A0
43
ril
>1
03
CD
40 C•
,-C
4d)
Cl)O -H
4- C
duh
Q)
-) 4
Li
4 E-'
Uww >1
0 0 ~ 0)
) rH r-o Cd O (U).-
4-4-HO
U
0 4-)
0
-4
4U)
0
)
-
04
-4
0.
4
o co u
-
-
4-)r
u i Q4 ()-o41U)
U) U)0I
4-)
-•(1
r
m
H4
9H
0-
0
r
0m
(o u
4 0- 0H-0
**
04e
Q)
ro
~~-U)4-
C04 H
0
(d 0l
E- 044
Q
U
U
U
m-
_Q
ýfQ
c)
l)
0
)
OU U )
u)
rn-HQr
E-4
~
1I
Ifl
v
r,
4-
tý 0
• O
r-J$i
H
(0
1 J,
,r4
UýJ0
0C4
AO
Q)riz
-H
0 40
(0
1
41
*0
V
O
.
(d
Q)>
U)U
-H
**4H
Q
V
44
00
1
Z
Q)uW
H
v
v-HO
-i
rr,-1
04
)4 d
rob
U
4-1
1
r--i
C 4M
(b
1--i
-H
-
(0
-
0
(Ur
lU)
:J
u- -4 41-)4J
Q)
U)
114
)
04 U)
H
En
U4-)r--i
0
0Q),
Qý
HU
41
14
44Q
C
*-H
(0 4)04
Q~)>
H41) Zd~
>1;:
* U)~
HH
-H
H ýrrH
*-) 4H -)
Q)
0 rdo 43~
U)Cd0Q
U t
c
Ed
C)
U
04
o
4iý
-H -A
( 04J4)
Cd U)
00CdH4- 0"
-0 U)0
04
n0
r-i r-
l1d
--a
U)=
4U)
41A
>
r-OQ-
0>1Cd0 rn It<
HMd
-0
U
d
En
Q
o
>1
QQ) 0 44
-0
1
1-4
4-)
>1
i
u
Cd
4
P
-HM
41
v-
0
0 0
\W
U)
;
VAV
,
--
C4 -0 .Z4J
-1-)
U1Q(0H
LS
(d
rH
-H
U
(
A0
0 r1
(o
UU)
Ird
b
aH 4-3~~~-
.
r.-H
C04 r4
t
•C
II
Q
>1
E4
•
-r- 4
%:
zC
00
.
II
Q--C
04
0
C
410
>1
OZ
••••
kE
•
4.
-.
4 U)OOO
r0U)
0
U)
U)
)
WHQO41
4-ý 4- B)U)
H
M
-0
~
.
0
i
Q
z
04'
0
4
4- 0;j~
4JHl
0ý-H
>i #.-r
u
Qd
A
-
H..Q
0
* -rd)
r oU)ýj
.. )
>131 >1.4
W
In
H
;j U)
0u- H Q)(o0
-4
O
>1
4 - U)
U)
Q)U)>1
41
0
U
E---
o(d
*,C
00
1-**
,Q
-
-
-O
0
J
4
*4 -U
o
0 0
)
u u
r-i
(1
r.
-
-
-H
-Hi
o ý*
H
z
v vV
) 4
ro0 0
ý4
Qu
-H
-ir
04
*_
ý-
O
0
0k
0
r--t -rl
A-) U)
r-'
U)
-,--I
0CUU)
-
-H-
u 0
.0 X:
0ro 4-i
0
-H
uI0
w u0rU
.13U)y
a(-i 00
F: H
o
0
0a)
-
,-)Q
E- ',l
I)
OO
,0U)rHiW
H
4-i -H
or-
5
0 rH
Ord 4-)
-H
1= U)
i
~00
E
S -H
u
H
(7
0C
ZH
04
0
U)
0
()
H
o-
-H
0
k
,C1
'-
0
A
PS
rC!
H
C-)
04
0
U)0C
>1
04-
ý4 4fý -r- H ýJ (3
-ol W
-)
4-4
1:4 w
Q4
Q*)
r4l
I*
-H 4 -H
0O-HD
4
0 04 44
41i~
S
-H
-H
C-)
N
*
roro ro
4OW
44i--H04
04
u El
-H4
-000 u
-- q
-H -H -H
#t
#I-=#ýo-4-l
\
It tr)>
-H
U)
4J
U)Cu
04 -
rHU)
0
U)4-i)
4
M
M-
00
-
0
$
)0
CU
) 4-iWU
04U)
(0 a)Q
(nQ :e
)
-H
NM)
Q)
ro
-H
0 Uj H
0U
0)
y "> >- O
- N
lz --
0
4
91 4,-
W
-H
C4-
ib
-4-)
~-4-
4j
4J
4-i
U)4U
0C0
d CU
z
-H
e
01 >lH4U)
4-*
>10
-H -i -u
ý4
-H
Q)UQ)
0q
4-i S0 O)C-H
ro X4
0O ýj 0
U)
OI 0H
-H
• ¢
-n
U)
-rH4
U)
mw
H
A
4A
>1
E-1-r
Uw
0
C)
o
-m4 U)4
S-H
rd
0 0OW
04
X
.4
4U).
r--Hcdrd
40
o
0
0r-- -c
Q
Um 04J ý
U)
ý4-
0
Q
4-i4-iW4-
04 ý4 -..
ro
Q
aU) U
O
04 >1
V
~H
-H
UJ) 4-4--H
ý
vv
O
>1
°D
rH
44
04
* -
4-
-H
a)
045
1.
-r-I
rH U) CU
U)
- -H
CZ -.
N
r
rcd$
rH
0 0
Toh
-
-
**I
ý4
U)
(N
ri
-Hco
r.E-
U)
•
,. .
-r•
-
4-)
02$
z
fo
00
0
S4-30
o(
0
d
>1 -,f
4-
C-Hrd
0
4-
•
- ) Ha) a
t-gU) QO
-3H
) -HO
o >
Cd
;j
a) a) 4-)
(d0
Q -)0
Cd .C a)
04-)
-ri >
(d
0 024
U)(
0 U)
-~-H
>
P)
a) -H rd
a)
02
U)
-"
.
,--H
02
a)
9 H rul
00
U)4t.)0 a -H
0Cd02C4
-Hd>-)
02
4-)02U) (L)
a) rg
fl -HV
S-H
021 z
ED
-H-H
4-
4-3
4-4
to
U)
a)
02
b)
X 4r-i
ý-4 (d r:
,-
rd
0
0
-H
2lr-4
U) a)
.,i
T
(d
0*'
0
U.
0
tI
to
r-4
0
,4
Q)
U
A ACd
A ,*
Ag
ro ý
_
•0
-Hi 4-3
4-3
02
02
4-3
4-3
C
'-'
u
~U)02-
U)
od
-Cc
rI
02
4-3
V
QU)
-H
-H02
(D
-H r-I
I
mE a-3)
V
V
0202
v v
r•H rH 020
02
EU)C
U U -H-H
ri-
-H -I
•=W=W=
:j 0
ý4
0)
0)
4-4
H
U
-HQ f
0Ord U)
(ar-4
ý4
>1
1 0a
4-)0
uCd
0•
Cd
,Q
Cd
) t)tr
0C
Cd
--
z-iU)0m w
In
a)A9>1
Cd-IU)
d Cd
-H
b)
02
gH
0d
w
)r;
(a
U)3
~
U)
y
(a
t-o
U)4
u4d
rd4
Cd02-H
4-3
0
o
44&
u
40Cd
02
04-3
01-4
02
-
U
-
W
-
0
Sj
>1
a
0
02
a)
02
02
U)
r=;
4-QU)
U)
4 4
a
4-)02
RS4-)
o4U
U)
P
°°
rq
°-l
4-1
r:-H
4
>1
P4
0
U) E-1 :J
)r
--
~U)
0 ý40
P4 O
(
-H
4)
U0
ý4
a)
W4
4-3
u
4-) -02
4-3U
--H
0
0 44
U)U
wu a) M
a)
r=C
00-4Q
00U) -H-
-0)
fl-H
z-r
U)C
a
a
41.4b
o
4-)
U rC$ H-
U r-
U410
rQo
C0**
>
U
Oz
0
0 4-4
--
0
-4
"
0
02
a
U)
4-)34-)
Cd Q)4-4
40
U)
4-
r-i
02
-HE
-4Z 0 ý-i
O
UH00
r 0) - 10
U)(
.,w
-H
(d
:j U)
:j
H4-4 ) r-H
4d
U
H
U)c-C P4 44U
Ora4
-DU)02
4-3
4-) )
44
0C(a
U1)C(d
02U)
ý4 u
U)-HU
0
o Cd
02
0~ d
L) U)U)0
U)
0u
4-4
0 w
u r4
a)l
Co
0
p0
0 U)
)
a)~
a)
0
a )
Cd0
020
02
~
rd 4-
-H J-) 02 Cd 4
4-4 02 U)
~4-)
0
it 044I
Cd
02
-H
02
-H
r--I UU
Q.)
Ud
n ,-)(a
4-a)
-,4
-
(a1
4-3
U)
i-i
U) $
OIq4-
~r
U)
0-- U
Cd-H
024
bU)( U
C>-H
0-U)4-4
-ic
•
-*
Cd--V44 u,
#U •
0•
MM
u
Q-H -
)4-4
-
0-~
-
1-4
-H
--
--
-- '
-- ,
p
0
(44
C*
II O
/
u)
Q)U--
0
0
>1
0
C)
ro
W- -i
II
,H -I
ul
•1)
0 00E
--- H
0
U)
.0"
+
0,4 U
W
0 °,--0 wUr)
0
0
-II
U)
(d
---
1
-H
-j
a) 11 U
6)
(a
E0
0
r-I*H
*d
r-H
0
UCd
0--
ri
r'
I
U) H -H
u)
:
U
-H
W)W)t
U)
*
-H
U)r
- 4-I
-.
-H
Ea
**
r--
>1
b
gW
m0> W
cn- .li4-4
N
E a)
rl NO
--0 0 r
uO
0
a)
-H
-d
cOa*
4-)
14
•U)-H "-"
-r'
.i
U)
H
II
+
U)
Q) U)l U)
II Uj)
II
tCd
S-r-'-- .-
U
0
0
ý43
U)r4
U)
( 4-I
)
44
-H
4 n ntnt bobýoýo t 0a ýoilý
o
KNo
o
Oo
*oNo
no
Il
tooOQ
oootooooc00
0 0
11 9
o0
o
O
Cd)
o-- -i
0
-H
Ua
SA
0
O -Ha
:44
b)U
0
ca
Im
En
ul
En1U)S4
r./
U)(
b) u
U)
Do
>1O0
4-
U)
II
.r-l II
OH•
01~U
U)H
44U
r1
r-II- I
U)
r34
U)1
D
44
H
-
"
04
U)
0
Cd II
0C
U)
U)
4U
U)
E4
-
4
(:ý --I --Nm On
'It tn ýo
-- " 114 "-4 -"
ccw4 ON
(Z
"-4 N
o
44
ro
0
,o.
(d
C e o --
U) U
a
U)
a) m
a)
II -H-I
H 0
U)
II
-r-H 4
-,
-H
41:1
U)
4J
041
S4-I
U)U
U)O
U)
-I
H
b)
(d
U) j)
-I
II ,-i
-H
U (
-Hl
0ý I-N -_4
Im
"Cd
U)U044
44I
ýCd
wd
Oz -,-I
U)
0In
O
0 C---
HU)
;E-H
SEa
-(a
r-H
Cd
U)E
0 0
U
00
i
II
Elr--4
--- ri0
4-14
.- U
C4
On
'IW)
%0 00
as
(Z
N
N
N
c "4 N
N
N
m
,
4I -L-H
bH
r44bl
CdO
U)H U
eq
m It
In
ýo
t"
00 0%(z
en C,n
en
m
m
en fy. ý en -I-
0
-H
U)-
N
on
"t
-I-
lý4
x
a)
r-
0
U)
o0C
N
4-3
-H
Ua)
C0
N
+
1
413
U)
dpd -..11
o
II
*
$- N
I-
11
rd M
""
*.441).
A
0
C) i-I
R
c
*
.1
.
0
0
H
- 4
II
Q)
0
O
0-'
ý4
II
II
0
H
4I
0D
HD
04
N- N
11
r-H -H
Cd
Q)
-I
4-343
w
1 rd
H
a)
ý
r
• ... -0N N
4)
N
U)
4r-
U)
H
U)
,-
+
Q) CIPU)
U)
-44
+
+
a)Oiu'41
14 a)
fj
U)
-,
a)
w
0Q
(aU)
Cd
U)
1
II
4-4
rl
Uw
CO P) 4-4
Iý4
II
43
-O
4-)
U)
II
)OO
+ U
A
-H
S 443 4-J -4
H
o4J --+ ItU +*- 13
U)
I-4
U)
- rwU)w
l 4-3
1-4
0
4-4
a~
04"1-
N
q4
00
o
C
I-
S-H
-H
A
x
u
N
-H
1-4
4-4
r-H
1-4
•_• .
0
II
+
-H
o-3
00 ON
4
N
N
IV
00 a-,
ý4
a)
u
w
4-3
0
H
N
-H -
H4)
4-J -4
a)r
-)Ic
4-)C
o4J
4
0414U0)
Ul >
H
0
II
II
41
Cd
m
w
4-1
-H
>1
04
If
OH0 r-
)14
Cd>
-0
-0
-
U
1 '
r"
u
ON
(a.
0
J
J
w~O
4-4
-H
I.,
c
CN
ON Ch
01t- 0\
4-3
.
-H-0 4j)
O
U
N N
-H -H
-4
-- 4
riP
U)
4-30
Oi
4
-0
4-)
1
U)14
0
II
ý4
)
Cd I1
~01
gE1
4JC
U.
)
II *.. .
-,-H
+ +
9 + +
14
0 E-- ) 0 4-
114
U)
-H
CdI
4-3
Y)-,4
tce( 'o t~
0
R> 2
000 Z
"f-
0
0
a)a
0
0
,Cd
be oC4ch
oN
-I
CdII
Cd
0
1-4
00
go
4--C 4 I .C •) --U)1 , NIg"--
ý4-
001
1U)
41
0
'--• 0
1
1-4
443
0
S)
Ni--4
4-3
s-
o0
0--
--- O
O
S1
4-3
4r-3
C)
II a-
Cd
ul
a) -
,.-
4-)
a)
4-) 0
U)-
u
,-t
Co
r.
4-4
(a
.C
4-3
En
-H
CO
(0 )
-rl4-0 U)
I_:
a)
413
.,r
1`4i
-H
4-3
-
41-0
U)0
ý4II
-
a
U) P
-H
C c0CooZN
0 z-,
-"
-"
ýý6Cl
-4
ft
0V
WOU
4 oo
n-.
"4
"
--
'
-
j,4C
'
C)-l
'
4"N
"-
ci)
H
-•ll
Q2)
r-H
lc:
0-0-
04
0
10
4I-4
44
>120
•-4-) i
(120
12
)
x
0
-H
-0
4
4(4-)
0-
Q) (9
U
001
0
04
-H
-
O-'.
C"q IN- ý+
1-4- ý -ý
Vi)
-
4
°"
S0CO
HI
*H
-H
H
'0
0
ci)
04
-rl4
-0-I 2U
90-*
4-
-H
H
\
-.
-\
\
-H
-
H
-Hi
(1 H
-H ;I
,r,4-4
A-) U2
-H -H
-
'-.
-
04
n0(1
0(
00
Q4-0' rO 4-1
-I-)
U)
-H '0 L04 4
C 0 -H 4-12)
H
-
4-4
-H
U)
-(1(1--0
-H
r
U)
41)
-H44
0
S.. 4- 4-H 0o
-H
Ok
0 4-)
ý
.
SH
4-4
H
xi
0
o
•
C-I
4-)*
O)
-0
O
Q)
4-)
Q)44
04w
-H)
00
104
0
0a
- 0 U)
0
-(12(*
Z44
4-)0
0
O
ý4
02
-H**
-H
°• 4(12
-
--
r-A
-H
04
U)
(12
-H
44
U
U) 2.U
Q)
04
0
U)
U)4~
ro
E
-ci
>1
m
4Q)
F
(ci
4-4
(12
0
04
20 u
(d
H
o
4-)
1)
-H
$ 4000
4-)
U)
(12
O
-H
>1
4-4
0.
*4
0
41
-HM
m o(
0
4-)
0
q) 0
-H -412) 0i-H
-H
ý4
01 0 O0
01 0
'-
(1)
44
44
Cx
-
-H -H
\0
-,
r
-ý
00 ON
(Z
-- -- (N (N
N
"
(N
N
-H
ýo
'O t
00 ON (Z
( N(N
N (N (n :
'V,
-H
--
N.
-)
cfr4
N-)
f'f2
"Itc~r
V)
cy
N 00
2 (If
'ý-2 rn
ý-o
-H
0\ (z
f
tI.
-
N
--
'
-)
I.
"-
"ýt V-'2 ý
II- I-
\
N 00 0ý
I- I. I.
+
o
>1
01
A
o
4-1
.c.4-)
0U)-
41
,-
>II
+
)04
ON
>,
(N0
'-o -o N o '-
M~'
-v
II
+
+
+
4-4
4-4
'----
00
A
0
0
k4 N
>
4-)I
04ri
N
U)
II
1
U)
°n
N
-H
+C
44C.H
\0
0
4-4
4-4
CLI
-H
xi
C-U
U)
RZ
N
N
U)
U)
S
v
-iA
x
N
N
0
-
00
0 0
kn
'-
N
00
00
'0
01 0
'0
)-)
0000 00 00
04
a)
0
0
04 4-)
Ha2)
~-N ~cN
N
-H
II 44
-I 44-)
0-H -H(1200
4 4
0
ro
-H
*
.H
0
-H
tr o
U)
44 -4
-H ý4
r
*-d
00
W
UW4-O
U)
W)U)
-:
r-4
4-) 4-4
~
-H -H
ý4
Q)
44
0
-u
-
(.
U)
-HI OW4~4
,.e W
0 -4 W
-w
4..
U)
-,ro
-O
-
"o
00 0\
(Z:)
Cý4 rn
4-)
Wa)::jQ
X-.4
,a
~
--
-H
00
ýz (ýq rn Iýt kn ýc t",
C',4 rq cq ("I C14 r,4 rý4
O
0
O
ý4
ro
H-W
ý4 H
SHS
4 -4
rd
-H
(I WW
0
d Q)rHUQ
o
CO
o4o)
U)
-H
-H
H
0-, asý0-, 0\ 0\ 0\ 0,ý
-rI
ro
4
E-4)
\
Cý --ý
,4
N
E
-
03
W
W
-HW
(U) 44I
4W
O~
H
°d
0
0
:4c
EO
4-)
,'
04
-H -
00 0\
-ri
E-H W
W-4W
O
0 443
04
t•
4-4
04
)
0-4 -H-.
4J)
04W
4-J4
.
-H
r74r
r) U)
-H
4-4
H
4dU)
J
44(1)
r-H
1)
'-4
-Hj
H *.
4-4WQ
Mrx-r-
U
4(
'-4
I O•
4~40
O
-r-i
Cd
03ý-:4-4
00
-HM
4
H
j
U) U)
0
0
ýýJ
*4ý4
Q)
rU)
r
co
0O~
4-4
r-i
0
U)
40)U)U
-H
-W
W
-H
0
-
u
04
-H
U) U)
U) -H-
S-HM
-)
-H 44 U
) -H W4
0
r-4 -HI
oz
U)
-H
4--
4)
-
-
-
Q)
Wriw
tn
)) ý4)
-4
0
-
rýV)
Ic
10
r)W) o
No
0
o
ý
11
00.
ý4~
-
°
-1U)a)l Q~) 0.
N -H W-HU)
0 U-H4- M
-rH0
H044
;: n H 4:
4(1 Jr Q
4
0-C-*C
-He
U
4- -H
d)-H
S0
0
U
-~
t-l
"
-
-
-
-
-
-
-
-
-
-
l-ltI
-C-U)
I
) O-HW
M-H
U) W 00
44
4-)
-H
N-H
LIOd
..
Cd
4:: -
I)
Ic
•-•
1,4
O
04
0O
(9
-H
-
£4
W
OO
WU)
.)-W44
-H-
'-4
4-4
r-H
0•
4-)
-H
-H4
w
,-•0 O
o 0
U)
0
0W
-H
-U)
-Hi 4-4
-
U)
WO
0W)
0
0
4U1
41-1W
C
O-
-H
-
Ajr
0
CO W
-H
r--i Q)
ý4Q
'-4
(13
Cd
0
4Cd
CQd
io r4~
Q)
@
04
On
o
UO)
4-)
-H
r.U01W
I-4
0i4J
-4-4
W1)4-4
r1
0 4l
-Q4)
4-)U)
0
ro
U)
0 q-00
0
rl
W
41 o ý -i.-0
iW -
, (
-HH
4-U) ri
41-4
U)
-H
4-4
0
ý4
Wr
71a
U)C O4
WdtH
0))
>1
W
HW
0 0 U)
4-4
ad4( U)
tzn
t-lt-ýtoO
o
t
w
0
-. z
w
-
000000
00
00
00
00
00
4-4
0
N
-H ,D
U]Z
a-.
(0H
D4--
CdH
0--
II
S--U
4-)
-I
I
44
4-4
0
N
-H
44
ýl
II
a) Q
U 44
44
04-4
0 4rH
r-Q
0 a)
*--
H
L44
I-I
-I -r-
-.
(ýH
C
Y)
a)
II
a)
r-H
0
a)
rH
H*
U)
0
'-t
r1 J
oa)
-H -H
0
4-4
aUO
H
0
W
'44
ro
H
-H
a)
~-ý
ý
'
v
*4
II
,-t
r-A
(. r-l
-,-I
(I
rH
- H av
U C-4
. 00tO.c
04 SII
4-4
04)
$4-H
0
II
-H
a C
a)
-H
II
II
a)r
04
,I-~In
II
II
.)
II
00 ON <z
N
~
4
~
'ýo
00 Oý
-H
0
)
S-H
(N
CA
(Zý
'-'
c
-
00 ON
~~N(
Ci-1
04'4
0
•)
0
v*
'--4a
•*
,.• -H•
a)
•U]H
S- -H
(H
Cd -H 41
a)
-H
H
-- H-I
,-I-----H 4-4a
A
,C
SA •
0
UO
Iwi
P4-
-H
.IJ
-H-
S44
0 0 4
A
00
S1
*0 4.a)
a) -H-H
v v
aV a)
ro rH
ro oc ro
H
"H 0
000
Cd
r=4
,w
N--CN
111)
tr)
rH -H
IC
N
-
k
-H
-1'
a)-
N
a) -H
~44r-iU
S -H -I
-H
C
hQ
)
i-
o
I-
a
-H
**rA ý
-Hf )
Q
Cd 4
zS
f-.. H 0
)---
0I
C
Q)
.1U
S
,--I
-H
CII
Cd0
4 a)
w
0 r-*)
0(]
--- oaR
-4
OrH
rHa
Cd O05
.0S0d
Co
0a)
a)
004
-H
.u ) 4ii
-H a)
a)
r----
*d
04
a)0
M 04
04D
4
4-
-H F4
0-0
H0
0 0 4-
0
-H -H -H -H -H
#- #
00 ON
0 4-4
-H
}
4
Ci)
4j
U])>14 - r
-H
a)a )
I-- -
o
--W
u
4 0 -H,-4-} -"A
UI) -H rH
0
*
4- -H
-H U
0
04 (
0 -- Hr----"a4)
-H
-
-H
Urd
.4i
II
II
a)
-Iro-H
0
+
+
.0
-
r~ o
)H
r-J
II
II
4-)
H
-H
. .
44II
II
44
4-4
-
II
14
a)
4-I
4-4
+
- -
4-4
C/4)
a)
(1)
44a
4H-I
.-
ý44-4
. ri
•Q
.-
r-H
4-I
-,
Cl)
H
a)
cO
04
-)
4-4
II 4-4
0
4
ý
.-
a)
.-H
C)
0)
aa)
4-4
rT4
rd
:ý4
a)
H
-H4
4,4
o0
-a
44.
4-)J
4,-i
a)
..J
.-
-r-I
,00
,, ,
,,,
,
,N
,
•N
N
C,4
,,
C)
N
(Y, q
a)
04
>a
0
O
*
4-1
) 0- d a)---,
.,4 Q)
0
-
4-.
II
a)
a)
O
04
H
r-H
,-4
-IC
Hr4
.0
U)
-r-I
a0
-H
9 Cl)
-H O5
- >U)
-H
~-a)
4-4
-H
.
---
t"
o000
Q"-oN'l
tl:coo
too
00 o
o0
--
\0
00
o00
-H
-H,
N
**
No
**
0 .i.J-)
0-
ro
0
-H.
Sk" C0
1
mr
ro
•
U)
O3
N -,A
Cl -H
ro
-rd
W
oF
0U
0- -H
w()
U)C
Q4
r 1$
Cl) rd 4-0
U)
---
)
0H
U
6
ro
\U\
aU0i090
Cl)
C)
00od
4 o0
-1
*• D 4J
4-4
F=:E)U
a)
o 0 U)
o04Q
(0
)H -•) k5
4-4
U -H
4J 4J 44
U) U)
z
--
4)
-
r-I
C)
-n
rU)~ 44.
1:4--U)
CO
** ,-I
-,
U
U)0 0**4-Q 0
Cl
H
"•,
Q
Ob
ý
E.
C
C/)
-H4 00 -H
C,
0o
ro 4j
rU r )
U
z
rI
J-)
r-4
C.)
-- -j J
ý4
U)
Q) rH
win
4 4-) T$
,Q ý44
H
Q 4 -HO
AQ
V
C/ \
HH
\
(15
H: U)Cl
H -H)
U
-rJ '- r
,QH
4
41
S-,-t ý4
CdU)
kH -H
H
0
)Ej
ý
U1) (13 4-j) U) 0
co 4-)co 4i
>.
41
k
0
"CO
U -Q) N-
O
r
-H
r-I U)
r,
-r-I
-H,
00
°°
l•
) oa)
MC k
4)
P±4
H
"°
a)
-H
44
-X )
4-4
Cd
F)
~-o C---~
~
~
t
.rl
:4
H
0
Cl)
rCl
O
rc$
0
ý
dU)
r--f 41i
CU)
+
V(LI
+ -H
-H.
v
Cl)
Clro
v ,C
v U)4
40 4
O•
*l)
5k
o
IrH;Cd
-H II II
>1
.i-
>1
>1
4-4Ua)
-H
q4- -H
41
-H -H,
I
0
4-i
U)
\\
'-
eN)
4 r
W'-0tN
O4
0 0
co
or H0 -0
N
S0 "
ý4 U
Uri
4.)
C)
0
0u )
.0
>1
144
U
oo
O
.i..
U)
14-4
o\
\\
>1
41i
ký4
-H -H
0-
0~
4-4
0
\\ r.(d
\-\ (
M.
0 -H
.- i r-I
V V
#I--#I,--I
U U
rdW
0
va)
>l
SA
Cli-)
.rr -;X14
C-) U) -H
0
0
44
44
-H
A
41
kU)
0
ro
4-j
O
0
VU)
rc$
- r-4
0
-H
",- -H
"-
5
-i
-- 0
0
Cd
0
4-i
v
v
v
v
0o
-•
0
Vkk u
0 0
+a
+6
-N
u4
A
-41
4 *HH
-1 ,•s
C)
0
,C
04 ---* •-V -He--
~:
U)
-H -
A
.C
4-44-4
u >
U 4
Wa)a
0
ý4 U)
U
>1
U) -
*0'r(
U)
HQa
-H
V HU
4-)
-H-
a)
(o
ý0
u
a)
U) a)
ý-I -Hi
o
.
u
-
Ub
-H
II
--)
rd
U
-H -'l
-H
t *
A
.1A
O
A
,C.
0.
oA -H
Q04
Cd
,rc
.
o
M
Q)
d00
S0 ý- ý
0
0
QQ)
4J 04 -H-I-
04
*4 Qm2
U~
0)
tt
0
-
04
-•1 .
-H
1
M
v v v v
S
O*o
WH
w
w
w
w
Cd
O00
4-J4.
rb
-
(4
:
-
Cd
14
ro
-: 4
-H
** q)
3
;
U
3
U
3
:3
:1 H
UUi
-Ir-
a)
-H -H -H -H
****:
.
-
H
I
S
r-d
0
II
zZ
Ea
C4
+
)
-
4
04-Cd
A
S
Cd
~0
04
-*
Cd
H
,Q
P
,,
A
ý4
-M 0
ý4Q
U) SW
04
-H
V U)~
0 -Q
p• H
:1
II
- 0•
04-
-4
4)
-H, U
-,- U)4-,
-H
-H)
0
4-4
H
4.)
--0
41
a)
ý-4J
U)
P4
d
ý4U)
0
ý4rU
U)
Ma)
40
-H
0
U':
U
-a) H
-H
**0-H
E
-H
-r-
3
94
*• 4•
Q)
ý4
ro
*H
4
I
H
C',3
m
H
0H
U) a)
rWo
Q
UW-N
U)
o)
7
O)
0
44ClV
rO cd4-4
U)
(0
HHO01
Q-C)
0D
4jO
H
0
U) 4-4
O)44
H
H
4 U)-H
4
04 v>1
V
Ha)
0
9;-I
>1
Q)
ý-
o
b
Q)4
41U)
H
•4
---
H
a))
A
-r4
4,-4
U
o
-aH U
P4U4
0
U
a)
a)
04 44
a)
41
.l
0
4a)
-AU)
z
U)
0
ý4
04 :•*R
C)
H"
(0
rc -H0 ýD
O
H
SII
Q4
CO
U -H H
'~.
r~
•--
~c-.
U)
)
000ý
-H
C4
H
{9
-,-
U
,,
(D
**
0
0
0.X•,x .l
0
c
ltx
•
A
O
Qi)
CS
O
0
0
z
c)z
SA
o •
4
D1-w A
-H
I
0
A
U
--
I
I
oo
0
o
o
o
0
0
0
0
H
o
10 ýo
H
4I
rd
H
---
o
C
U
0
)
Q)
*4r-
I
~AI
4I
-H
--
J
'
--
0
o
U)
HA
r-H
I-i
ý4
'-
i
:
+
0
H
A
0C
0
)
a)
-H
H
-H
-
UA
)
*
C
-H
S
H
z
H
-H
0
--H
A-
ONON
ONCN0ý ON
-I
U)
H
U)
I
4
Q
-H
-)Od
-H
A
I
A
I-I
4'
C
wC
-*H
1Q~
C
C
--
r
-I
0
0C
-r
-H
-H
-I-)O
0
-H
>c
H
-
-
0)
>0
-H
(a
r-H
4H
4-)
4-)
)
00 0o
4-
-
A
0
H0
V
Cd
0
-H
U
0C
0
4J
00
A
I
)
0
04
-H
r-H
A
-
C-H
9-IJD
U
l
0
H
I
--
-
-*
vd
O
Cd
H4
-H
Cd
U)z
0
-H
H
H
0H0
A
N
-*R
A
4)
)
H
N
zU)
0
0
0
-Hl
~r.0-e
H-I
A
-H
U
41
)
k
0
-H
-
41
4J
--
I
0
-i
4-
0
0
I
0
4-)
S
00
C
-H
)
0
0
0
0
Z
o
.
l-
0
Z
'-r-H
4-)
(a
w
C
-H
iH
0
4O
-H
H
(a
rl
-q
ý4
--
-H
o
>1
-u a
IO
u r
U)
00
-H
•
>1 00
00)
S
40
ro" 0
-H
r.)
0)r
-H
ClE
-)-H
m ,CU
0
O• .1 .
-HU)
(oC ,u
0U nc
u
U
r• .1
0 .104 >1
0
-44 r
r-4
)Hr
44U
-H0 Cl
C 04
0
oo -H 0) 04 )4 )
4U)
-
14-1
4
1
O
~4-34d d
0)~2(0
ý4 E
-H
J-HI
0)..
-i
-H
4.
u
U)..
(1) U)
4-)
)
Um
t 000\(
14-4
O0
O
0
>1
04
0C-)
0o
U
- -
U)..- 44-0
4-)
4-
U)
-H
V
4c
-
U
gCd
U)4-
-H
4-) lu
U))
S4-
tr)•
O
4-
U
IC
0~0
4-)
-H.
9
U)
u
U)144
4-)
U
U)NU
04
(o
-H Q)C)
4-H4-)
-HU
( u)
44)
U)
rH
4C
ý--I
U)
- 1j r- U)
ý 4ý
zCdNl0U)
w 0w
;ý• r0
r i 41
rMm
l 1)-4
QýD
4-
4- U -W4m) U)
U)
U
4
C-) Q)
4-3 (0 z4-)
U)
r H
U
4Om
u
0 •
Q
4
000
U)
C
U1
4-)
u U)• 0)4
r
Cd-HM
04 4-)Q CCOU
4-)
)-W U
41 U)H
H-I4-) U
4
'I-
4
UA
*ot
\)
-
Cd
I-)
04 4
U
ICj
4
44
U -H-
%4 4-)
ý4
U)
a)
4
0
U)
U
A
-II
44
.U
rr 4)
14-H
M
14
H
C
41
T$
r- >1-0 F-:
4- U)
0H
m
w0 jiU) 40)0
-H0 (0
n
U
oo-- 4
.U)D
ý4
0 w ->
O0*41
4
WU
*-
H
U)
ro
14AU)
0
4-)
U)
4)
-H
-H
-H0
U0 -HU
) 4-A
4U
0
Q
-u)U)rH
0)-H
4
Q)
U)Uq )
Q)AU
NA PU)$4
4
4-)
-H
U
0-
U~
H)
0r
-H4 U)Uq
0
0
C
U)
4 ri
U)-O d
044U) -U H4- 4HrI-i
u
C
-
4-)
U
4
U)
U
Cd
~
*U)0)ri cl
0
0F
Ur F
O
)- 0
-U
4
ICu
I
4J
44-)
0a)
-H
14
4
4- )-I
4Cd
U
0
)
40
04
)Q
- m
0
11I
40 ;-H
0EU)
CdAO
)
+-H
IQ
U)
U
-H
-4
U)14-J ý
-)U)
0
0
01U) U)
4-) ý
-H
ý4
C
F U) -
rP
0U)
04U)-:U~204-1
0 ý4
ý4H
(0 01
0 -r-ý4ý 0
4 W:)
W
H
I~n-10
O o0)
4
0 M
>
>j0 U)0
0 -H
0U0I
o
0
-0
- U4d
Ur
U)44-)d
>1U)0U00
O-H0)
>1
U04U)C 4En
0U
4-)
4-D
ý-
+
IUCr-H
-
0w
U
0)wdw
rH
wU
U0)
F-1
04 I
U
-H
0 U)
1-0
U)U0dUU)-H
q
U)
0
0
4-j
U
4-i..
mr1.I
J -w0)udo-Z0)
r 4ý
-q
-M
(0- )-HUO
ý0
X
OCW
4*-H 0
-H--T
J
04
0U)S
)
44-H)
0)U4
-
U
UIn1
CO
u
~U..
Z O
~
0
4-U
HU-C
MOO0O
0
C0
CU)*
IU)C
4U
0
-H
-HU)U
U
4j-A- UEn J U)
4
--
\4
n-i
V-
U)
00U)0
I4
U)
00U
40)
d
0
041 Fd04 :1-)A u
U4
0 U * 4**
-H4
U144-)
0
0 -HUU0
C
MO
U
u
Cd
)
-
~
-
-
,
4-
°°
0)
U)14-4
-H
ý4-
L~U)4-4
-ý
,
-
~-
-H
010
-H4
n
d
-
CdUA
0 4-)
4-)
1-1
ON
ON
00
UO01144
CdU)4
-
Cd
44
OU)U-H14
U)0
-ý--
Ul)4-4
-44
0)
-H
011-
-H)U
0
O0
44-HQ
**
4-)
U)4- U
-HU
4-)-H
U)
Qi)
-H
::j 440
U4D
00
Cd 4-4
U) -H
0
W
14-4
dU)> U)Pýr
0)
U
-U)441-H-4
-H
1
4
4--)UCd
U
QU)U)U
T
OU
-,
-ý
-ý
-
ý
1--
tý, 00 0\ Qý -" cl-Irn "t Vý ýc
rn ýY)ýn C'n
00
o 0Cl
00
0;04
4-)
00)Q
C
**
>i
r-4•
4-)
0 4- H
r0
0
)
0
00
S
0004
0U)
rJ
U)
0
.r*
04 0
CO-•
-044-ofl
O W
Cs
U)
.
*
-rA~~~
4
0
04
0
44*Z4
0)U
w
-C
r4 44
O
~
OU 0
0
0
S0
fT4
--
cd
0
H
WE-r-l
0)
M.
-
Q
11
U)
-H
04
04E
ý
4
U)-I
0
0•1
0
#I-
0.
0
•
04
-H
0
-d
0 U)
04
U)
(0-riU)U(
00
T$
r.
X
4
-
-1
*do
0
;40
4>
444-
)X
41
)
4-
0
04
HHa)Z04
--
0
U#)
*U)
.
Q)
4*HU
(
00
*H4~d
)U
=*v-H
#1
+4-)+
u
-4
)
.4 4
04-)"" -
00)d00
U) 04 U)
u
0 +
a
--- U
0040
u
0
4
.-
000)
V--..
0 44 4
C-)
UQ4r
040
E-I Q
*
[
04~
Q0
O
1
04d
r-q
-HOUH
0
0
40
44-44(:1
#I4
P
rU)
Cd
0
O
rT
Q) rHAU)
000-H r-A
-2
*c
-
04 -rI
11
4-)*)
U
Q)-H
i rJ
040
_
H
H-
- A
ý.9
a)
0n
U)
O
4
M
Cd0U00)
0d >14-) 0
4-U) -4J-) 4
r-q
0
M-r
0
-H
0
U)0
r-A r-
4 -4
H0-H
Q4-)
41
(0
044,
U) U)
d-OQ
r-I 0
=-
,•
$
r
OH4-1t
0
r-*HE
:
QV
-HI
r.
-4
4.
0)F-
04
0-
4
0•
4
00ý
3o4-)
. O 4
i n . 0)
r-Q5
-HE4)
4>
O~~
;J E-1
-HW
44
.
E04
0U)
0
4•4
*4CC f
4rH
I
FnS4-)UU)
wH
Q
5
.4
q
E-40
r-1fl
-
)U)
,QU)-HA
O
00 )0
ZC
U)ZXXfl0
)
~
0
4
0
000
0-H
Uo
U)
r
o
:R)
10
4-)Q0)
0
V
V1
u
- IQ
H
04-)
1-40)
O
U)
00
) U)
4-)
Q
()
f,
00
U
udQ0
0
o
-H-H0
.
l Q,
3-)E-4
4ýA
)
4,
(r
1
)0 Q0
-
ZE40,.
-U)04-)$
r04
• - .
*4
.4r0
H 44- 4-H
4}:U
F * -Q
) *-)
.
(14)
-
)(-l
1)
H )(_U0 -i
4-)4iCOH
-H
4-)
O
01
w --)r-
04,Q ,r- Q) 4 -- 0
U) 0 H
-l
0•r 0.
OH *
llA
H
*DIc444
-
U)
U)
)
4-)
U
1--
r)-
4-
04-
U)*
4c
+
+
Cd
441-
4U)
+
0
+
0
-H
+
4)
71
U)
++
+
II
40O
0-,
'H-Hq
F-*
ýD
04
-
1
> "0
S
b0
-H
14
U)
-)
Cd
0
ZU)
0)
4-)
U)
-
-
4q
ýo t
Cd 0-1oo ON
0 ',
U
+ ,rHA
14 -4
- 4.44-)
U) U)
4c
-4
IIiII
C
-H
-4
41
U
-
.
41-4
I-I
d
404-H
rq nr
(N
.- +
o
+1
0
V
Vl
(N(N
-*n
.4
-H -*
*--H
(
C
-n
r
0
cq
aU)
Irr-A
r.4
-H -H
:I- W) '-0 tN
1-4
4--
fn M
M
4
0
00 0\ (Z
4-1
)
14 -4
0
4
'--
H
U)
j
4-)
14-H
-HHH
4-)
ýD0)
1- 4
O4
0
4
(N rn 'I-t
V) 'C
)
'H
U)
-H
-H 41
I
~
1-I
0
-
N.
-
0
r(q
C)-
U) U)
II
V
-H-H
H
-H II
II
41
*-
.4
*
1-
4-) 4,
1--i a)
+
+
+
-H
TV
c-I)
14
Cd
o
)
14
U+
0
C 4- 4
Ic
U141
41
*.
0
4-) - II 114-)
U))
0)
S4-- 11434 *
+
-U•)
0
0
0d 10-- •
-
I
U•4-
1
c-H--
Q140)
A 1-414
4U)
-0
-
04
,C4
0
ti-)
57:
I
--
I
r+
*-H
4
-
j1
-(p
>1
H.
4-)
+
14
'H
U)
r-4
-
4-)
0)
1I
(Do ON~Q)
00
(.
.
cN
U)
-
0(
44
0
4D
4-)
14
W
'HO
W
-H
4-40)
1--
4-1)
0C
-Q~
ry(N
)
0)-H
,:S
E
U)
0a)
.
-H
4-0 -H
41 n
U00)
0)D1--ý
k -4
-Hr
0)0
-H
0O
r
4
4ý
O
U
-H
d
4)
5
41
*
ro
E-4
0
0
rO
0
0
0
Fro
400 ~
E--4
04
0
0R
U)
0
5
.
u
0C
i)40 Q
U) -
E-4
4i) (0
r-4F'04
00)0
Oi
F'I
0 aU-
*W
0
Q)
)
0
QH
4 4UF) r
-*
0m
*
10
0*
4
4Q)
TO
CS0
0\
4:
C
0
U
4i
*
)4
O. z
C
I
0-l
04 U
-ýFi
*
4
0
rH
04
0
Q)
Ua
0
-#14
*-
O
A-)
0
0
-ii
U)
0
41
U) 40)
C)
rF'
41
ra
U) "o 0t
01
-
0\
0
rCc:
+
C
4Uj)-
#1--
H~U
*.
-LU
0
.
0
0
a)
U)
0
Cd
C)
00
4
0
4
00
U)OS
-15
4
4
04
FW4
ýJ
ou
4
044
TO
U)
-H
4o
Sr-
I
*a
H
*
Cd'
Q)
(C
0
F4
a) Q
ro
-H*
F
a)
40
rH
-H
z04a o
c1
TO
004
04ORf:Hp
S0
o o0
U0
4
• Q
4H
-Q
a
ro
o
,C4
0
Fý4
Co
0
.H4
-H4
OH
-H
0O0
O)TO
*)F2
S0
0L
04
*
St,,
00c-, ý
4 (,n q-V)oo
*
T
TO
-H
C
0o0N <o -, Cq )tN
0'O
UO
,C
U
4U
T04
U)
0
-H
S>1
U)
0
>1
x
00
a)
00
U)
S>1
0
O
0
rc:
r4
S
4 *d
Cd
H:
Cd
a)
0x
m
a)
O
INO ýc
H
00
,- 4
0
---
9
4C
HO*
Cl
F'H0
00
Cd
U)
U)
0
4
o
O
S4
-r't
0•
-HO
0
S)
a4
5
0
Z4
4
Ca)
H
9-
0
a
rH
0
C.0
-•o a
-LiU)
O.04
0L)
rH
-H
rO 0
-•i
H
04
U) -A
04
r.a)
04 -H-H *
QC
F4
a)
-H
0a
0i
a)
t,
t0l0r0ý
0O 00 00 00 00
Sample Run
Appendix C
The following is a sample run of the AM2SGML program. The SGML document instance
and DTD used is the following, taken from the "Guidelines for Electronic Text Encoding and
Interchange."
'
I <!DOCTYPE anth [
<!ELEMENT anth
2
3
<!ELEMENT poem
<!ELEMENT title
4
<!ELEMENT stanza
5
6
<!ELEMENT line
0
0
O
0
(poem+)>
(title?, stanza+)>
(#PCDATA)>
(line+)>
(#PCDATA)>
7 ]>
8
9 <anth>
<poem>
10
<title>The SICK ROSE
11
<stanza>
12
<line>O Rose thou art sick.
13
<line>The invisible worm,
14
<line>That flies in the night
15
<line>In the howling storm:
16
<stanza>
17
<line>Has found out thy bed
18
<line>Of crimson joy:
19
20
<line>And his dark secret love
21
<line>Does thy life destroy
</poem>
22
23 <!-- This is taken from the TEI guide -- >
24 </anth>
The following is the command line used to parse the file:
test testDir/myTest7.sgml 0 init.ocs 0 0
where testDir/myTest7 . sgml is the name of the file given above, and init. ocs is a
compiled SGML declaration produced from a previous execution of AM2SGML. The results are
as follows:
1. Sperberg-McQueen, pp. 16-17.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
---------<Document>
<ANTH>
<POEM>
<TITLE>
</TITLE><STANZA>
<LINE>
</LINE><LINE>
</LINE><LINE>
</LINE><LINE>
</LINE></STANZA><STANZA>
<LINE>
</LINE><LINE>
</LINE><LINE>
</LINE><LINE>
</LINE></STANZA></POEM></ANTH>
</Document>
18----------
These are the expected results.