gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog doc/C/Makefile.am doc/C/preform...


From: Rob Savoye
Subject: [Gnash-commit] gnash ChangeLog doc/C/Makefile.am doc/C/preform...
Date: Sun, 02 Mar 2008 16:32:23 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Rob Savoye <rsavoye>    08/03/02 16:32:22

Modified files:
        .              : ChangeLog 
        doc/C          : Makefile.am 
Added files:
        doc/C/preformatted: cygnal.1.in dumpshm.1.in gnash.1.in 
                            gnash_ref.info.in gnash_user.info.in 
                            gnashref.html.in gnashuser.html.in 
                            gnashuser.ref.in gprocessor.1.in 
                            soldumper.1.in 

Log message:
                * doc/C/Makefile.am: Print warning when linking to preformatted
                versions that they may be out of date. Change path to 
preformatted
                versions.
                * packaging/doc: Moved to doc/C/preformatted.
                * doc/C/preformatted: Moved from packaging/doc, this location
                makes more sense, and is simpler.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5773&r2=1.5774
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/Makefile.am?cvsroot=gnash&r1=1.57&r2=1.58
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/cygnal.1.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/dumpshm.1.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnash.1.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnash_ref.info.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnash_user.info.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnashref.html.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnashuser.html.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnashuser.ref.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gprocessor.1.in?cvsroot=gnash&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/soldumper.1.in?cvsroot=gnash&rev=1.1

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5773
retrieving revision 1.5774
diff -u -b -r1.5773 -r1.5774
--- ChangeLog   2 Mar 2008 16:28:28 -0000       1.5773
+++ ChangeLog   2 Mar 2008 16:32:20 -0000       1.5774
@@ -1,5 +1,12 @@
 2008-03-02  Rob Savoye  <address@hidden>
 
+       * doc/C/Makefile.am: Print warning when linking to preformatted
+       versions that they may be out of date. Change path to preformatted
+       versions.
+       * packaging/doc: Moved to doc/C/preformatted.
+       * doc/C/preformatted: Moved from packaging/doc, this location
+       makes more sense, and is simpler.
+       
        * doc/C/usermanual.bugreport.xml: Move file up one directory so it
        can be shared.
        * doc/C/usermanual/glossary.xml, gnashrc.xml, installation.xml,

Index: doc/C/Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/doc/C/Makefile.am,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -b -r1.57 -r1.58
--- doc/C/Makefile.am   2 Mar 2008 01:28:32 -0000       1.57
+++ doc/C/Makefile.am   2 Mar 2008 16:32:21 -0000       1.58
@@ -42,7 +42,8 @@
        gpl-appendix.xml \
        app_authors.xml \
        doc_authors.xml \
-       fdl-appendix.xml
+       fdl-appendix.xml \
+       bugreport.xml
 
 USERMAN = \
        $(COMMON) \
@@ -50,7 +51,6 @@
        usermanual/revisions.xml \
        usermanual/usage.xml \
        usermanual/gnashrc.xml \
-       usermanual/bugreport.xml \
        usermanual/acknowledgments.xml \
        usermanual/conventions.xml
 
@@ -71,7 +71,9 @@
        refmanual/codestyle.xml
 #      refmanual/packagemanager.xml
 
+
 EXTRA_DIST = \
+       preformatted \
        $(dist_man_MANS) \
        $(MANSRC) \
        $(XML_MAIN:.xml=.html) \
@@ -89,13 +91,10 @@
 PDFS   = $(XML_MAIN:.xml=.pdf)
 TEXIS  = gnash_user.texi gnashuser.texi gnash_ref.texi gnashref.texi
 
-# dist_html_DATA = gnash.html actionscript.html
-# dist_info_DATA = gnash.info actionscript.info
-
-all-local: images html man info
+all-local: info html man
 
-gnashuser.html gnashuser.pdf gnash_user.info: gnashuser.xml $(USERMAN)
-gnashref.html gnashref.pdf gnash_ref.info: gnashref.xml $(REFMAN)
+gnashuser.html gnashuser.pdf gnash_user.info gnashuser.info: gnashuser.xml 
$(USERMAN)
+gnashref.html gnashref.pdf gnash_ref.info gnashref.info: gnashref.xml $(REFMAN)
 
 # Convienience rules for developers of these manuals. By default
 # all output formats are built if the Docbook tools are installed
@@ -144,8 +143,9 @@
        -$(XSLTPROC) --output $@ --nonet $(docbook_styles)/html/docbook.xsl $<
        @$(RM) $*.txml
 else
-       @if test -d $(top_srcdir)/packaging/doc; then \
-         $(LN_S) -f $(top_srcdir)/packaging/doc/address@hidden ./$@; \
+       @if test -d $(srcdir)/preformatted; then \
+         echo "WARNING: Linking to preformatted version of $@, it could be out 
of date."; \
+         $(LN_S) -f $(srcdir)/preformatted/address@hidden ./$@; \
        else \
          touch $@; \
        fi
@@ -158,16 +158,18 @@
          $(DB2X_TEXI) --encoding=us-ascii//TRANSLIT --string-param 
directory-description="Gnash" $< ; \
        else \
          basefile="$*"; \
-          $(DB2X_XSLTPROC) -s texi $< --output $${basefile}.txml; \
+          foo=`$(DB2X_XSLTPROC) -s texi $< --output $${basefile}.txml;` \
          out=`$(DB2X_TEXIXML) --encoding=us-ascii//TRANSLIT --list-files 
$${basefile}.txml` ; \
+         out=`echo $${out} | sed -e 's: :\\\ :g'` 2>&1; \
          if test ! -f $${out}; then \
           out=`echo $${out} | tr -d '_'`; \
          fi; \
          rm $${basefile}.txml; \
-         if test -f $${out}; then \
-           mv $${out} $${basefile}.texi; \
-         fi; \
        fi
+#        if test -f $${out}; then \
+#          mv $${out} $${basefile}.texi; \
+#        fi; \
+#      fi
 endif
 
 .texi.info:
@@ -179,7 +181,7 @@
 
 .man-xml.1:
 if ENABLE_MAN
-       @if test x$(DB2X_MAN) != x; then \
+       address@hidden test x$(DB2X_MAN) != x; then \
          $(DB2X_MAN) $?; \
         else \
          $(DB2X_XSLTPROC) -s man $? -o $*.mxml; \
@@ -187,8 +189,9 @@
          $(RM) $*.mxml; \
        fi
 else
-       @if test -d $(top_srcdir)/packaging/doc; then \
-         $(LN_S) -f $(top_srcdir)/packaging/doc/address@hidden ./$@; \
+       @if test -d $(srcdir)/preformatted; then \
+         echo "WARNING: Linking to preformatted version of $@, it could be out 
of date."; \
+         $(LN_S) -f $(srcdir)/preformatted/address@hidden ./$@; \
        else \
          touch $@; \
        fi
@@ -200,22 +203,26 @@
 gnashref.texi gnash_user.texi: gnashref.xml
 if ! DOCBOOK
 gnash_user.info: gnashuser.xml
-       @if test -d $(top_srcdir)/packaging/doc; then \
-         $(LN_S) -f $(top_srcdir)/packaging/doc/gnash_user.info.in 
./gnash_user.info; \
+       @if test -d $(srcdir)/preformatted; then \
+         echo "WARNING: Linking to preformatted version of $@, it could be out 
of date."; \
+         $(LN_S) -f $(srcdir)/preformatted/gnash_user.info.in 
./gnash_user.info; \
        fi
 
 gnashuser.info: gnashuser.xml
-       @if test -d $(top_srcdir)/packaging/doc; then \
-         $(LN_S) -f $(top_srcdir)/packaging/doc/gnash_user.info.in 
./gnashuser.info; \
+       @if test -d $(srcdir)/preformatted; then \
+         echo "WARNING: Linking to preformatted version of $@, it could be out 
of date."; \
+         $(LN_S) -f $(srcdir)/preformatted/gnash_user.info.in 
./gnashuser.info; \
        fi
 
 gnash_ref.info: gnashref.xml
-       @if test -d $(top_srcdir)/packaging/doc; then \
-         $(LN_S) -f $(top_srcdir)/packaging/doc/gnash_ref.info.in 
./gnash_ref.info; \
+       @if test -d $(srcdir)/preformatted; then \
+         echo "WARNING: Linking to preformatted version of $@, it could be out 
of date."; \
+         $(LN_S) -f $(srcdir)/preformatted/gnash_ref.info.in ./gnash_ref.info; 
\
        fi
 gnashref.info: gnashref.xml
-       @if test -d $(top_srcdir)/packaging/doc; then \
-         $(LN_S) -f $(top_srcdir)/packaging/doc/gnash_ref.info.in 
./gnashref.info; \
+       @if test -d $(srcdir)/preformatted; then \
+         echo "WARNING: Linking to preformatted version of $@, it could be out 
of date."; \
+         $(LN_S) -f $(srcdir)/preformatted/gnash_ref.info.in ./gnashref.info; \
        fi
 endif
 
@@ -270,8 +277,8 @@
        $(INSTALL_INFO) --menuentry="Gnash Reference Manual" --quiet 
--description="Gnash Reference Manual" --info-dir=$(DESTDIR)$(infodir) 
$(DESTDIR)$(infodir)/gnash_ref.info
 else
        echo "Using preformtted output file,"
-       $(LN_S) -f $(top_srcdir)/packaging/doc/gnash_user.info.in 
gnash_user.info
-       $(LN_S) -f $(top_srcdir)/packaging/doc/gnash_reference.info.in 
gnash_ref.info
+       $(LN_S) -f $(srcdir)/preformatted/gnash_user.info.in gnash_user.info
+       $(LN_S) -f $(srcdir)/preformatted/gnash_ref.info.in gnash_ref.info
 endif
 
 uninstall-info-hook:

Index: doc/C/preformatted/cygnal.1.in
===================================================================
RCS file: doc/C/preformatted/cygnal.1.in
diff -N doc/C/preformatted/cygnal.1.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/cygnal.1.in      2 Mar 2008 16:32:21 -0000       1.1
@@ -0,0 +1,34 @@
+.\" -*- coding: us-ascii -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH cygnal 1 "19 February 2008"  
+.SH NAME
+cygnal \- Cygnal
+.SH Synopsis
+.nf
+
+cygnal (options)...
+.fi
+.SH DESCRIPTION
+Cygnal is a multimedia media server for streaming audio, video, and
+video conferencing. Cygnal supports several protocols used by SWF
+file players, including RTMP, RTMPTS, and RTMPT, while encouring the
+use of patent free codecs.
+.TP 
+(-h) --help
+Print usage info.
+.TP 
+--version
+Print version information.
+.TP 
+(-v) --verbose
+Verbose output.
+.TP 
+(-p) --port-offset
+Port offset. This number gets added to the default
+ports for RTMPS and RTMPS. This is only used by
+developers. 

Index: doc/C/preformatted/dumpshm.1.in
===================================================================
RCS file: doc/C/preformatted/dumpshm.1.in
diff -N doc/C/preformatted/dumpshm.1.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/dumpshm.1.in     2 Mar 2008 16:32:21 -0000       1.1
@@ -0,0 +1,35 @@
+.\" -*- coding: us-ascii -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH dumpshm 1 "13 February 2008"  
+.SH NAME
+dumpshm \- Gnash LocalConnection memory Dumper
+.SH Synopsis
+.nf
+
+dumpshm (options)... (file)...
+.fi
+.SH DESCRIPTION
+Dump information about the shared memory segment used by the
+LocalConnection ActionScript class. This memory segment is comprised
+of a header, and a collection of SWF AMF Objects, normally not
+viewable by the user.
+.TP 
+-h
+Print usage info.
+.TP 
+-i
+Find the key for an existing memory segment.
+.TP 
+-r
+Dump memory segment to the terminal.
+.TP 
+-c
+Dump memory segment to a disk file, segment.raw.
+.TP 
+-v
+Verbose output.

Index: doc/C/preformatted/gnash.1.in
===================================================================
RCS file: doc/C/preformatted/gnash.1.in
diff -N doc/C/preformatted/gnash.1.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnash.1.in       2 Mar 2008 16:32:21 -0000       1.1
@@ -0,0 +1,135 @@
+.\" -*- coding: us-ascii -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH gnash 1 "13 February 2008"  
+.SH NAME
+gnash \- GNU Flash (SWF) Player
+.SH Synopsis
+.nf
+
+gnash (options)... (file)...
+.fi
+.SH DESCRIPTION
+Run the SWF movie player.
+.TP 
+-h
+Print usage info.
+.TP 
+-s factor
+Scale the movie up/down by the specified factor.
+.TP 
+-c
+Produce a core file instead of letting SDL trap it.
+.TP 
+-d num
+Number of milliseconds to delay in main loop.
+.TP 
+-a
+Enable ActionScript debugging.
+.TP 
+-x
+The XID of the parent window Gnash should use instead of
+creating a new one.
+.TP 
+-j
+Set the width of the window. This is only used when embedding
+the player into another window.
+.TP 
+-k
+Set the height of the window. This is only used when embedding
+the player into another window.
+.TP 
+-v
+Be verbose; i.e. print log messages to stdout.
+.TP 
+-va
+Be verbose about movie Actions.
+.TP 
+-vp
+Be verbose about parsing the movie.
+.TP 
+-ml bias
+Specify the texture LOD bias (float, default is -1).
+.TP 
+-p
+Run full speed (no sleep) and log frame rate.
+.TP 
+-g
+Start Gnash with a Flash debugger console so one can set
+break points or watchpoints.
+.TP 
+-w
+Write the gnash-dbg.log debug log to disk. By default the
+plugin writes its log in your home directory when using a
+launcher from GNOME or KDE.
+.TP 
+-1
+Play once; exit when/if movie reaches the last frame.
+.TP 
+-r [0|1|2]
+0 disables rendering and sound (good for batch tests).
+
+1 enables rendering and sound (default setting).
+
+2 enables rendering and disables sound.
+.TP 
+-t sec
+Timeout and exit after the specified number of seconds.
+.TP 
+-u
+Set "real" url of the movie (useful for downloaded movies).
+.TP 
+-U
+Set "base" url for this run (used to resolve relative urls,
+defaults to movie url)
+.TP 
+-P
+Set parameter (ie. "FlashVars=A=1&b=2")
+.TP 
+-F
+Set filedescriptor to use for external communications.
+.TP 
+--version
+Print the version number, and the configuration of the
+Gnash player. Please use this info when submitting bug
+reports.
+.SS KEYS
+.TP 
+CTRL-Q
+Quit/Exit.
+.TP 
+CTRL-W
+Quit/Exit.
+.TP 
+ESC
+Quit/Exit.
+.TP 
+CTRL-P
+Toggle Pause.
+.TP 
+CTRL-R 
+Restart the movie.
+.TP 
+CTRL-[ or kp-
+Step back one frame.
+.TP 
+CTRL-] or kp+
+Step forward one frame.
+.TP 
+CTRL-T
+Debug. Test the set_variable() function.
+.TP 
+CTRL-G
+Debug. Test the get_variable() function.
+.TP 
+CTRL-M
+Debug. Test the call_method() function.
+.TP 
+CTRL-B
+Toggle background color.
+.PP
+Flash is Trademarked by Adobe Corporation.

Index: doc/C/preformatted/gnash_ref.info.in
===================================================================
RCS file: doc/C/preformatted/gnash_ref.info.in
diff -N doc/C/preformatted/gnash_ref.info.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnash_ref.info.in        2 Mar 2008 16:32:21 -0000       
1.1
@@ -0,0 +1,929 @@
+This is gnash_ref.info, produced by makeinfo version 4.8 from
+gnashref.texi.
+
+START-INFO-DIR-ENTRY
+* Gnash Reference Manual: (gnash_ref).   [MISSING TEXT]
+END-INFO-DIR-ENTRY
+
+
+File: gnash_ref.info,  Node: Top,  Next: Introduction,  Up: (dir)
+
+Gnash Reference Manual
+**********************
+
+* Menu:
+
+* Introduction::
+* RTMP Protocol::
+* Authors::
+* GNU Free Documentation License::
+
+--- The Detailed Node Listing ---
+
+Introduction
+
+* Audience::
+* What Is Supported ?::
+
+RTMP Protocol
+
+* AMF Format::
+
+GNU Free Documentation License
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_ref.info,  Node: Introduction,  Next: RTMP Protocol,  Prev: Top,  
Up: Top
+
+1 Introduction
+**************
+
+Gnash is a free SWF movie player.  It is available as a stand-alone
+application or as a plugin for several popular web browsers. It
+supports playing media from a disk or streaming over a network
+connection. Some popular video sharing sites like YouTube are supported
+from a wide vaariety of devices from embedded ones to modern desktops.
+
+   Gnash has a better focus on security, allowing the user tight
+control of all network or disk based I/O. Gnash also supports extending
+ActionScript by creating your own. You can write wrappers for any
+development library, and import them into the player much like perl or
+python does.
+
+* Menu:
+
+* Audience::
+* What Is Supported ?::
+
+
+File: gnash_ref.info,  Node: Audience,  Next: What Is Supported ?,  Up: 
Introduction
+
+1.1 Audience
+============
+
+This manual is primarily focused on users interested in how to get
+Gnash installed from a package, and basic usage as a web browser
+plugin. For more technical details, please refer to the Gnash Reference
+manual.
+
+
+File: gnash_ref.info,  Node: What Is Supported ?,  Prev: Audience,  Up: 
Introduction
+
+1.2 What Is Supported ?
+=======================
+
+Gnash is known to compile for most any POSIX and ANSI C++ conforming
+system if you have all the dependent libraries installed. Systems we
+test on, and which Gnash is know to run on are Ubuntu, Fedora, Debian,
+OpenBSD, NetBSD, FreeBSD, Win32, and Darwin (OSX) primarily.
+Occasionally other platforms are built, primarily by those distribution
+maintainers. This includes BeOS, Haiku, Syllable, OS/2, Solaris,
+Slackware, and Gentoo.
+
+   Gnash is a capable of reading up to SWF v9 files and opcodes, but
+primarily supports SWF v7, with better SWF v8 and v9 support under
+heavy developement. With the 0.8.2 release, Gnash includes initial
+parser support for SWF v8 and v9.  Not all ActionScript 2 classes are
+implemented yet, but all of the most heavily used ones are. Many
+ActionScript 2 classes are partially implemented; there is support for
+all of the commonly used methods of each class.
+
+   Gnash has implemented about 80% of ActionScript v. 2.0, and has
+begun implementing ActionScript v. 3.0. Gnash supports the majority of
+Flash opcodes up to SWF version 9, and a wide sampling of ActionScript
+classes for SWF version 8.
+
+   As ActionsScript 3 is a more developed version of ActionScript 2,
+many of the same classes work for both. Support has been added to
+Gnash's ActionScript library to support the new ActionScript 3 filters,
+which get applied to every class. Implementing ActionScript clases is
+often the easiest way for new Gnash developers to make a contribution
+without a deep internal knpowledge of Gnash.
+
+   Gnash has included video support since early 2007, but this is an
+every changing field of reverse engineering. Many of the popular video
+sharing sites use SWF v8 or v9, which Gnash still has imperfect support
+for. This is improving all the time, so often builds from a development
+snapshot will work when using the older release packaged in your
+distribution doesn't. You can find daily snapshots of the latest CVS
+tree at: http://www.gnashdev.org/dev_snapshots
+(http://www.gnashdev.org/dev_snapshots/).
+
+   Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+should work with Gnash. Gnash supports the loading of patent free
+codecs like Ogg Vorbis or Theora from disk based files, while work is
+being done to support these codecs when embedded in a SWF file. Ffmpeg
+contains the codecs used by the current SWF defintion, FLV, VP6 (ON2),
+H.263, H.264, and MP3.
+
+
+File: gnash_ref.info,  Node: RTMP Protocol,  Next: Authors,  Prev: 
Introduction,  Up: Top
+
+2 RTMP Protocol
+***************
+
+This document is based mostly on my own reverse engineering of the RTMP
+protocol and AMF format. _tcpdump_ and _ethereal_ are your friend. Some
+additional info that got me started was from the Red5
+(http://www.osflash.org/red5) project. _Red5_ is the only other open
+source Flash server. So some details are still vague, but as the
+implementation appears to work, we'll figure out what they are later.
+
+   The Real Time Messaging Protocol was created by MacroMedia (now
+Adobe) for delivering Flash objects and video over a network
+connection. Currently the only servers which support this format are
+the MacroMedia Media sever, and the Open Source Red5 project.
+
+   This is a simple protocol, optimized for poor bandwidth connections.
+It can support up to 64 concurrent streams over the same network
+connection. Part of each AMF packet header contains the index number of
+the stream. A single RTMP message can contain multiple AMF packets.
+
+   An RTMP connection uses Tcp/ip port 1935. It is also possible to
+tunnel RTMP over an HTTP connection using port 80. Each AMF packet is
+128 bytes long except for streaming audio, which has 64 byte packets.
+
+   The basics of the RTMP protocol are as follows. All communications
+are initiated by the client.
+
+Image of the RTMP protocol.
+
+   The client starts the RTMP connection by sending a single byte with
+a value of 0x3. This byte is followed by a data block of 1536 bytes.
+The format if this data block is unknown, but it appears to not be
+actually used by the protocol except as a handshake.
+
+   The server receives this packet, stores the 1536 byte data block,
+and then send a single byte with the value of 0x3, followed by two 1536
+data blocks. The second data block is the full contents of the original
+data block as sent by the client.
+
+   The client receives the 1536 byte data block, and if they match, the
+connection is established. After the handshake process is done, there
+are three other messages that the client sends to the sever to start
+the data flowing.
+
+   The first AMF packet sent to the server contains the _connect_
+packet. This doesn't appear to do much but notify the server the client
+is happy with the handshake, and ready to start reading packets.
+
+   The second packet is the _NetConnection_ object from the client.
+This ActionScript class is used by the Flash movie to create the
+network connection to the server.
+
+   The third packet is the _NetStream_ object from the client. This is
+the ActionScript class used to specify the file to be streamed by the
+server.
+
+   The RTMP packet for our example looks like this:
+
+
+           030000190000c91400000000020007connect00?f0000000000000030003app0200#
+           software/gnash/tests/1153948634.flv0008flashVer02000cLNX 6,0,82,0 
0006
+           swfUrl02001dfile:///file|%2Ftmp%2Fout.swfc30005tcUrl\002\0004
+           rtmp://localhost/software/gnash/tests/1153948634.flv\000\000\t
+           \002\000\005userx
+
+We'll take this apart in a bit, but you can see how all three AMF
+packets are in the same message. The message is received in several 128
+byte blocks, with the last one being less than that. The total size of
+the RTMP message is in the header, so the reader can tell if the entire
+message was read or not.
+
+   The RTMP header is first, followed by the connect message as an
+ASCII string as the message body. The following AMF packet is the
+_NetConnection_ one, which specifies that this is coming from a Flash
+application. This also contains the file path the server can use to
+find the file to stream. This is then followed by the version number,
+which I assume is the version of the Flash player, so the server knows
+what it is talking to.
+
+   The third packet is the one from _NetStream_, which specifies the
+URL used for the movie, followed by the user name for a semblance of
+security.
+
+   For the next level of detail, we'll explain the format of AMF. AMF
+is used by the RTMP protocol to transfer data. Each Flash object is
+encapsulated in an AMF packet, including streaming audio or video.
+
+   The first byte of the RTMP header determines two things about the
+rest of the message. The first 2 bits of this byte signify the total
+size of the RTMP header. The RTMP header is of a variable size, so this
+is important.
+
+00
+     This specifies the header contains 12 bytes, including this one.
+
+01
+     This specifies the header contains 8 bytes, including this one.
+
+02
+     This specifies the header contains 4 bytes, including this one.
+
+03
+     This specifies the header contains 1 byte, so this is the complete
+     header.
+
+   The other 6 bits in this byte represent the AMF index. As a single
+RTMP connection can support multiple data streams, this signifies which
+stream this packet is for. Once an AMF object is fully received by the
+client, the AMF index may be reused.
+
+   For messages with headers of at least 4 bytes, the next 3 bytes are
+used by audio and video data packets, but at this time the meaning of
+this field is unknown.
+
+   For messages with a 8 byte or larger header, the next 3 bytes
+determine the size of the RTMP message being transmitted. Messages with
+a 1 byte or 4 byte header use a standard size, 128 bytes for video, and
+64 bytes for audio.
+
+   For messages with an 8 byte or larger header, the next byte is the
+type of the AMF object.
+
+0x3
+     This specifies the content type of the RTMP packet is the number
+     of bytes read. This is used to start the RTMP connection.
+
+0x4
+     This specifies the content type of the RTMP message is a _ping_
+     packet.
+
+0x5
+     This specifies the content type of the RTMP message is server
+     response of some type.
+
+0x6
+     This specifies the content type of the RTMP packet is client
+     request of some type.
+
+0x8
+     This specifies the content type of the RTMP packet is an audio
+     message.
+
+0x9
+     This specifies the content type of the RTMP message is a video
+     packet.
+
+0x12
+     This specifies the content type of the RTMP message is notify.
+
+0x13
+     This specifies the content type of the RTMP message is shared
+     object.
+
+0x14
+     This specifies the content type of the RTMP message is remote
+     procedure call. This invokes the method of a Flash class remotely.
+
+   There are two sets of data types to consider. One set is used by the
+to specify the content type of the AMF object, the other is an
+ActionScript data type tag used to denote which type of object is being
+transferred.
+
+   The values of the initial type byte are:
+
+0x0
+     This specifies the data in the AMF packet is a numeric value. All
+     numeric values in Flash are 64 bit, _big-endian_.
+
+0x1
+     This specifies the data in the AMF packet is a boolean value.
+
+0x2
+     This specifies the data in the AMF packet is an _ASCII_ string.
+
+0x3
+     This specifies the data in the AMF packet is a Flash object. The
+     Flash object data type field further along in the message
+     specifies which type of ActionScript object it is.
+
+0x4
+     This specifies the data in the AMF packet is a Flash movie, ie.
+     another Flash movie.
+
+0x5
+     This specifies the data in the AMF packet is a NULL value. NULL is
+     often used as the return code from calling Flash functions.
+
+0x6
+     This specifies the data in the AMF packet is a undefined. This is
+     also used as the return code from calling Flash functions.
+
+0x7
+     This specifies the data in the AMF packet is a reference.
+
+0x8
+     This specifies the data in the AMF packet is a ECMA array.
+
+0x9
+     This specifies the data in the AMF packet is the end of an object
+     definition. As an object is transmitted with multiple AMF packets,
+     this lets the server know when the end of the object is reached.
+
+0xa
+     This specifies the data in the AMF packet is a Strict array.
+
+0xb
+     This specifies the data in the AMF packet is a date.
+
+0xc
+     This specifies the data in the AMF packet is a multi-byte string.
+     Multi-byte strings are used for international language support to
+     represent non _ASCII_ fonts.
+
+0xd
+     This specifies the data in the AMF packet is a an unsupported
+     feature.
+
+0xe
+     This specifies the data in the AMF packet is a record set.
+
+0xf
+     This specifies the data in the AMF packet is a AML object. XML
+     objects are then parsed by the _XML_ ActionScript class.
+
+0x10
+     This specifies the data in the AMF packet is a typed object.
+
+   For messages with a 12 byte header, the last 4 bytes are the routing
+of the message. If the destination is the server, this value is the
+NetStream object source. If the destination is the client, this is the
+NetStream object for this RTMP message. A value of 0x00000000 appears
+to be reserved for the NetConnection object.
+
+   Multiple AMF streams can be contained in a single RTMP messages, so
+it's important to check the index of each AMF packet.
+
+   An example RTMP header might look like this. (spaces added between
+fields for clarity) All the numbers are in hex.
+
+
+           03 000019 0000c9 14 000000000
+
+03
+     The first two bits of this byte are the size of the header, which
+     in this example is 00, for a 12 byte header. The next 6 bits is
+     the AMF stream index number, which in this example is 0x3.
+
+000019
+     These 3 bytes currently have an unknown purpose.
+
+000c9
+     Since this example has a 12 byte header, this is the size of the
+     RTMP message, in this case 201 bytes.
+
+14
+     This is the content type of the RTMP message, which in this case
+     is to invoke a remote function call. (which we later see is the
+     connect function).
+
+00000000
+     The source is the NetConnection object used to start this
+     connection.
+
+* Menu:
+
+* AMF Format::
+
+
+File: gnash_ref.info,  Node: AMF Format,  Up: RTMP Protocol
+
+2.1 AMF Format
+==============
+
+The AMF format is used in the LocalConnection, SharedObject,
+NetConnection, and NetStream ActionScript classes. This is a means of
+binary data interchange between Flash movies, or between a Flash player
+and a Flash server.
+
+   Like the RTMP messages, an AMF packet header can be of a variable
+size. The size is either the same as the initial header of the RTMP
+message, or a 1 byte header, which is commonly used for streaming audio
+or video data.
+
+   The body of an AMF packet may look something like this example. The
+spaces have been added for clarity.
+
+
+           02  0007 636f6e6e656374
+
+02
+     This is a single byte header. The value of the first 2 bits is
+     0x3, and the AMF index is also 0x3.
+
+0007
+     This is the length in bytes of the string.
+
+63 6f 6e 6e 65 63 74
+     This is the string. Note that there is no null terminator since
+     the length is specified.
+
+
+File: gnash_ref.info,  Node: Authors,  Next: GNU Free Documentation License,  
Prev: RTMP Protocol,  Up: Top
+
+3 Authors
+*********
+
+Gnash is maintained by Rob Savoye. Other active developers are: Sandro
+Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad Musick, Benjamin
+Wolsey, and Zou Lunkai. Please send all comments and suggestions to
+<address@hidden>. Past and sometimes current developers are Tomas
+Groth and Markus Gothe.
+
+   Gnash was initially derived from GameSWF.  GameSWF is maintained by
+Thatcher Ulrich <address@hidden>.  The following people contributed to
+GameSWF: Mike Shaver, Thierry Berger-Perrin, Ignacio Castan~o, Willem
+Kokke, Vitaly Alexeev, Alexander Streit, and Rob Savoye.
+
+
+File: gnash_ref.info,  Node: GNU Free Documentation License,  Prev: Authors,  
Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+* Menu:
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_ref.info,  Node: 0_ PREAMBLE,  Next: 1_ APPLICABILITY AND 
DEFINITIONS,  Up: GNU Free Documentation License
+
+A.1 0. PREAMBLE
+===============
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone the
+effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or non-commercially. Secondarily,
+this License preserves for the author and publisher a way to get credit
+for their work, while not being considered responsible for
+modifications made by others.
+
+   This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft license
+designed for free software.
+
+   We have designed this License in order to use it for manuals for
+free software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals; it
+can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+File: gnash_ref.info,  Node: 1_ APPLICABILITY AND DEFINITIONS,  Next: 2_ 
VERBATIM COPYING,  Prev: 0_ PREAMBLE,  Up: GNU Free Documentation License
+
+A.2 1. APPLICABILITY AND DEFINITIONS
+====================================
+
+This License applies to any manual or other work that contains a notice
+placed by the copyright holder saying it can be distributed under the
+terms of this License. The "Document", below, refers to any such manual
+or work. Any member of the public is a licensee, and is addressed as
+"you".
+
+   A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+   A "Secondary Section" is a named appendix or a front-matter section
+of the Document (*note fdl-document::) that deals exclusively with the
+relationship of the publishers or authors of the Document to the
+Document's overall subject (or to related matters) and contains nothing
+that could fall directly within that overall subject. (For example, if
+the Document is in part a textbook of mathematics, a Secondary Section
+may not explain any mathematics.)  The relationship could be a matter
+of historical connection with the subject or with related matters, or of
+legal, commercial, philosophical, ethical or political position
+regarding them.
+
+   The "Invariant Sections" are certain  Secondary Sections (*note
+fdl-secondary::) whose titles are designated, as being those of
+Invariant Sections, in the notice that says that the Document (*note
+fdl-document::) is released under this License.
+
+   The "Cover Texts" are certain short passages of text that are
+listed, as Front-Cover Texts or Back-Cover Texts, in the notice that
+says that the Document (*note fdl-document::) is released under this
+License.
+
+   A "Transparent" copy of the  Document (*note fdl-document::) means a
+machine-readable copy, represented in a format whose specification is
+available to the general public, whose contents can be viewed and edited
+directly and straightforwardly with generic text editors or (for images
+composed of pixels) generic paint programs or (for drawings) some
+widely available drawing editor, and that is suitable for input to text
+formatters or for automatic translation to a variety of formats
+suitable for input to text formatters. A copy made in an otherwise
+Transparent file format whose markup has been designed to thwart or
+discourage subsequent modification by readers is not Transparent.  A
+copy that is not "Transparent" is called "Opaque".
+
+   Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML or
+XML using a publicly available DTD, and standard-conforming simple HTML
+designed for human modification. Opaque formats include PostScript, PDF,
+proprietary formats that can be read and edited only by proprietary
+word processors, SGML or XML for which the DTD and/or processing tools
+are not generally available, and the machine-generated HTML produced by
+some word processors for output purposes only.
+
+   The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in formats
+which do not have any title page as such, "Title Page" means the text
+near the most prominent appearance of the work's title, preceding the
+beginning of the body of the text.
+
+
+File: gnash_ref.info,  Node: 2_ VERBATIM COPYING,  Next: 3_ COPYING IN 
QUANTITY,  Prev: 1_ APPLICABILITY AND DEFINITIONS,  Up: GNU Free Documentation 
License
+
+A.3 2. VERBATIM COPYING
+=======================
+
+You may copy and distribute the Document (*note fdl-document::) in any
+medium, either commercially or noncommercially, provided that this
+License, the copyright notices, and the license notice saying this
+License applies to the Document are reproduced in all copies, and that
+you add no other conditions whatsoever to those of this License. You
+may not use technical measures to obstruct or control the reading or
+further copying of the copies you make or distribute. However, you may
+accept compensation in exchange for copies. If you distribute a large
+enough number of copies you must also follow the conditions in section
+3 (*note 3_ COPYING IN QUANTITY::).
+
+   You may also lend copies, under the same conditions stated above,
+and you may publicly display copies.
+
+
+File: gnash_ref.info,  Node: 3_ COPYING IN QUANTITY,  Next: 4_ MODIFICATIONS,  
Prev: 2_ VERBATIM COPYING,  Up: GNU Free Documentation License
+
+A.4 3. COPYING IN QUANTITY
+==========================
+
+If you publish printed copies of the Document (*note fdl-document::)
+numbering more than 100, and the Document's license notice requires
+Cover Texts (*note fdl-cover-texts::), you must enclose the copies in
+covers that carry, clearly and legibly, all these Cover Texts:
+Front-Cover Texts on the front cover, and Back-Cover Texts on the back
+cover. Both covers must also clearly and legibly identify you as the
+publisher of these copies. The front cover must present the full title
+with all words of the title equally prominent and visible. You may add
+other material on the covers in addition. Copying with changes limited
+to the covers, as long as they preserve the title of the Document
+(*note fdl-document::) and satisfy these conditions, can be treated as
+verbatim copying in other respects.
+
+   If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+   If you publish or distribute Opaque (*note fdl-transparent::) copies
+of the Document (*note fdl-document::) numbering more than 100, you
+must either include a machine-readable Transparent (*note
+fdl-transparent::) copy along with each Opaque copy, or state in or
+with each Opaque copy a publicly-accessible computer-network location
+containing a complete Transparent copy of the Document, free of added
+material, which the general network-using public has access to download
+anonymously at no charge using public-standard network protocols. If
+you use the latter option, you must take reasonably prudent steps, when
+you begin distribution of Opaque copies in quantity, to ensure that
+this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+   It is requested, but not required, that you contact the authors of
+the Document (*note fdl-document::) well before redistributing any
+large number of copies, to give them a chance to provide you with an
+updated version of the Document.
+
+
+File: gnash_ref.info,  Node: 4_ MODIFICATIONS,  Next: 5_ COMBINING DOCUMENTS,  
Prev: 3_ COPYING IN QUANTITY,  Up: GNU Free Documentation License
+
+A.5 4. MODIFICATIONS
+====================
+
+You may copy and distribute a Modified Version (*note fdl-modified::)
+of the Document (*note fdl-document::) under the conditions of sections
+2 (*note 2_ VERBATIM COPYING::) and 3 (*note 3_ COPYING IN QUANTITY::)
+above, provided that you release the Modified Version under precisely
+this License, with the Modified Version filling the role of the
+Document, thus licensing distribution and modification of the Modified
+Version to whoever possesses a copy of it. In addition, you must do
+these things in the Modified Version:
+
+   * *A. * Use in the Title Page (*note fdl-title-page::) (and on the
+     covers, if any) a title distinct from that of the Document (*note
+     fdl-document::), and from those of previous versions (which
+     should, if there were any, be listed in the History section of the
+     Document). You may use the same title as a previous version if the
+     original publisher of that version gives permission.
+
+   * *B. * List on the Title Page (*note fdl-title-page::), as authors,
+     one or more persons or entities responsible for authorship of the
+     modifications in the Modified Version (*note fdl-modified::),
+     together with at least five of the principal authors of the
+     Document (*note fdl-document::) (all of its principal authors, if
+     it has less than five).
+
+   * *C. * State on the Title Page (*note fdl-title-page::) the name of
+     the publisher of the Modified Version (*note fdl-modified::), as
+     the publisher.
+
+   * *D. * Preserve all the copyright notices of the Document (*note
+     fdl-document::).
+
+   * *E. * Add an appropriate copyright notice for your modifications
+     adjacent to the other copyright notices.
+
+   * *F. * Include, immediately after the copyright notices, a license
+     notice giving the public permission to use the Modified Version
+     (*note fdl-modified::) under the terms of this License, in the
+     form shown in the Addendum below.
+
+   * *G. * Preserve in that license notice the full lists of  Invariant
+     Sections (*note fdl-invariant::) and required Cover Texts (*note
+     fdl-cover-texts::) given in the Document's (*note fdl-document::)
+     license notice.
+
+   * *H. * Include an unaltered copy of this License.
+
+   * *I. * Preserve the section entitled "History", and its title, and
+     add to it an item stating at least the title, year, new authors,
+     and publisher of the Modified Version  (*note fdl-modified::)as
+     given on the Title Page (*note fdl-title-page::).  If there is no
+     section entitled "History" in the Document (*note fdl-document::),
+     create one stating the title, year, authors, and publisher of the
+     Document as given on its Title Page, then add an item describing
+     the Modified Version as stated in the previous sentence.
+
+   * *J. * Preserve the network location, if any, given in the Document
+     (*note fdl-document::) for public access to a Transparent (*note
+     fdl-transparent::) copy of the Document, and likewise the network
+     locations given in the Document for previous versions it was based
+     on. These may be placed in the "History" section.  You may omit a
+     network location for a work that was published at least four years
+     before the Document itself, or if the original publisher of the
+     version it refers to gives permission.
+
+   * *K. * In any section entitled "Acknowledgements" or "Dedications",
+     preserve the section's title, and preserve in the section all the
+     substance and tone of each of the contributor acknowledgements
+     and/or dedications given therein.
+
+   * *L. * Preserve all the Invariant Sections (*note fdl-invariant::)
+     of the Document (*note fdl-document::), unaltered in their text
+     and in their titles.  Section numbers or the equivalent are not
+     considered part of the section titles.
+
+   * *M. * Delete any section entitled "Endorsements". Such a section
+     may not be included in the Modified Version (*note fdl-modified::).
+
+   * *N. * Do not retitle any existing section as "Endorsements" or to
+     conflict in title with any Invariant Section (*note
+     fdl-invariant::).
+
+   If the Modified Version (*note fdl-modified::) includes new
+front-matter sections or appendices that qualify as Secondary Sections
+(*note fdl-secondary::) and contain no material copied from the
+Document, you may at your option designate some or all of these
+sections as invariant. To do this, add their titles to the list of
+Invariant Sections (*note fdl-invariant::) in the Modified Version's
+license notice.  These titles must be distinct from any other section
+titles.
+
+   You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version (*note
+fdl-modified::) by various parties-for example, statements of peer
+review or that the text has been approved by an organization as the
+authoritative definition of a standard.
+
+   You may add a passage of up to five words as a Front-Cover Text
+(*note fdl-cover-texts::), and a passage of up to 25 words as a
+Back-Cover Text (*note fdl-cover-texts::), to the end of the list of
+Cover Texts (*note fdl-cover-texts::) in the Modified Version (*note
+fdl-modified::).  Only one passage of Front-Cover Text and one of
+Back-Cover Text may be added by (or through arrangements made by) any
+one entity. If the Document (*note fdl-document::) already includes a
+cover text for the same cover, previously added by you or by
+arrangement made by the same entity you are acting on behalf of, you
+may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+   The author(s) and publisher(s) of the Document (*note
+fdl-document::) do not by this License give permission to use their
+names for publicity for or to assert or imply endorsement of any
+Modified Version  (*note fdl-modified::).
+
+
+File: gnash_ref.info,  Node: 5_ COMBINING DOCUMENTS,  Next: 6_ COLLECTIONS OF 
DOCUMENTS,  Prev: 4_ MODIFICATIONS,  Up: GNU Free Documentation License
+
+A.6 5. COMBINING DOCUMENTS
+==========================
+
+You may combine the Document (*note fdl-document::) with other
+documents released under this License, under the terms defined in
+section 4 (*note 4_ MODIFICATIONS::) above for modified versions,
+provided that you include in the combination all of the Invariant
+Sections (*note fdl-invariant::) of all of the original documents,
+unmodified, and list them all as Invariant Sections of your combined
+work in its license notice.
+
+   The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections (*note fdl-invariant::) may be
+replaced with a single copy. If there are multiple Invariant Sections
+with the same name but different contents, make the title of each such
+section unique by adding at the end of it, in parentheses, the name of
+the original author or publisher of that section if known, or else a
+unique number. Make the same adjustment to the section titles in the
+list of Invariant Sections in the license notice of the combined work.
+
+   In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications".  You must delete all sections
+entitled "Endorsements."
+
+
+File: gnash_ref.info,  Node: 6_ COLLECTIONS OF DOCUMENTS,  Next: 7_ 
AGGREGATION WITH INDEPENDENT WORKS,  Prev: 5_ COMBINING DOCUMENTS,  Up: GNU 
Free Documentation License
+
+A.7 6. COLLECTIONS OF DOCUMENTS
+===============================
+
+You may make a collection consisting of the Document (*note
+fdl-document::) and other documents released under this License, and
+replace the individual copies of this License in the various documents
+with a single copy that is included in the collection, provided that
+you follow the rules of this License for verbatim copying of each of the
+documents in all other respects.
+
+   You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+File: gnash_ref.info,  Node: 7_ AGGREGATION WITH INDEPENDENT WORKS,  Next: 8_ 
TRANSLATION,  Prev: 6_ COLLECTIONS OF DOCUMENTS,  Up: GNU Free Documentation 
License
+
+A.8 7. AGGREGATION WITH INDEPENDENT WORKS
+=========================================
+
+A compilation of the Document (*note fdl-document::) or its derivatives
+with other separate and independent documents or works, in or on a
+volume of a storage or distribution medium, does not as a whole count
+as a Modified Version (*note fdl-modified::) of the Document, provided
+no compilation copyright is claimed for the compilation.  Such a
+compilation is called an "aggregate", and this License does not apply
+to the other self-contained works thus compiled with the Document , on
+account of their being thus compiled, if they are not themselves
+derivative works of the Document.  If the Cover Text (*note
+fdl-cover-texts::) requirement of section 3 (*note 3_ COPYING IN
+QUANTITY::) is applicable to these copies of the Document, then if the
+Document is less than one quarter of the entire aggregate, the
+Document's Cover Texts may be placed on covers that surround only the
+Document within the aggregate. Otherwise they must appear on covers
+around the whole aggregate.
+
+
+File: gnash_ref.info,  Node: 8_ TRANSLATION,  Next: 9_ TERMINATION,  Prev: 7_ 
AGGREGATION WITH INDEPENDENT WORKS,  Up: GNU Free Documentation License
+
+A.9 8. TRANSLATION
+==================
+
+Translation is considered a kind of modification, so you may distribute
+translations of the Document (*note fdl-document::) under the terms of
+section 4 (*note 4_ MODIFICATIONS::). Replacing  Invariant Sections
+(*note fdl-invariant::) with translations requires special permission
+from their copyright holders, but you may include translations of some
+or all Invariant Sections in addition to the original versions of these
+Invariant Sections. You may include a translation of this License
+provided that you also include the original English version of this
+License. In case of a disagreement between the translation and the
+original English version of this License, the original English version
+will prevail.
+
+
+File: gnash_ref.info,  Node: 9_ TERMINATION,  Next: 10_ FUTURE REVISIONS OF 
THIS LICENSE,  Prev: 8_ TRANSLATION,  Up: GNU Free Documentation License
+
+A.10 9. TERMINATION
+===================
+
+You may not copy, modify, sublicense, or distribute the Document (*note
+fdl-document::) except as expressly provided for under this License.
+Any other attempt to copy, modify, sublicense or distribute the
+Document is void, and will automatically terminate your rights under
+this License. However, parties who have received copies, or rights,
+from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+
+File: gnash_ref.info,  Node: 10_ FUTURE REVISIONS OF THIS LICENSE,  Next: 
Addendum,  Prev: 9_ TERMINATION,  Up: GNU Free Documentation License
+
+A.11 10. FUTURE REVISIONS OF THIS LICENSE
+=========================================
+
+The Free Software Foundation (http://www.gnu.org/fsf/fsf.html) may
+publish new, revised versions of the GNU Free Documentation License
+from time to time. Such new versions will be similar in spirit to the
+present version, but may differ in detail to address new problems or
+concerns. See http://www.gnu.org/copyleft/
+(http://www.gnu.org/copyleft).
+
+   Each version of the License is given a distinguishing version
+number. If the Document (*note fdl-document::) specifies that a
+particular numbered version of this License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that specified version or of any later version
+that has been published (not as a draft) by the Free Software
+Foundation. If the Document does not specify a version number of this
+License, you may choose any version ever published (not as a draft) by
+the Free Software Foundation.
+
+
+File: gnash_ref.info,  Node: Addendum,  Prev: 10_ FUTURE REVISIONS OF THIS 
LICENSE,  Up: GNU Free Documentation License
+
+A.12 Addendum
+=============
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+     Copyright 2008, Free Software Foundation.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with noInvariant Sections (*note fdl-invariant::),
+     with no Front-Cover Texts (*note fdl-cover-texts::), and with no
+     Back-Cover Texts (*note fdl-cover-texts::). A copy of the license
+     is included in the section entitled "GNU Free Documentation
+     License".
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License
+(http://www.gnu.org/copyleft/gpl.html), to permit their use in free
+software.
+
+
+
+Tag Table:
+Node: Top175
+Node: Introduction1113
+Node: Audience1907
+Node: What Is Supported ?2235
+Node: RTMP Protocol4767
+Node: AMF Format14538
+Node: Authors15514
+Node: GNU Free Documentation License16215
+Node: 0_ PREAMBLE16978
+Node: 1_ APPLICABILITY AND DEFINITIONS18284
+Ref: fdl-document18509
+Ref: fdl-modified18800
+Ref: fdl-secondary18987
+Ref: fdl-invariant19632
+Ref: fdl-cover-texts19881
+Ref: fdl-transparent20094
+Ref: fdl-title-page21384
+Node: 2_ VERBATIM COPYING21773
+Node: 3_ COPYING IN QUANTITY22753
+Node: 4_ MODIFICATIONS25110
+Node: 5_ COMBINING DOCUMENTS31170
+Node: 6_ COLLECTIONS OF DOCUMENTS32667
+Node: 7_ AGGREGATION WITH INDEPENDENT WORKS33558
+Node: 8_ TRANSLATION34786
+Node: 9_ TERMINATION35689
+Node: 10_ FUTURE REVISIONS OF THIS LICENSE36344
+Node: Addendum37484
+
+End Tag Table

Index: doc/C/preformatted/gnash_user.info.in
===================================================================
RCS file: doc/C/preformatted/gnash_user.info.in
diff -N doc/C/preformatted/gnash_user.info.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnash_user.info.in       2 Mar 2008 16:32:21 -0000       
1.1
@@ -0,0 +1,1974 @@
+This is gnash_user.info, produced by makeinfo version 4.8 from
+gnashuser.texi.
+
+START-INFO-DIR-ENTRY
+* Gnash User Manual: (gnash_user).   [MISSING TEXT]
+END-INFO-DIR-ENTRY
+
+
+File: gnash_user.info,  Node: Top,  Next: Introduction,  Up: (dir)
+
+Gnash User Manual
+*****************
+
+* Menu:
+
+* Introduction::
+* Using Gnash::
+* Installing and Configuring Gnash::
+* Reporting Bugs::
+* Glossary::
+* Authors::
+* GNU Free Documentation License::
+
+--- The Detailed Node Listing ---
+
+Introduction
+
+* Audience::
+* What Is Supported ?::
+
+Using Gnash
+
+* Gnash Command Line Options::
+* Gnash Interactive Control Keys::
+* User Configuration File::
+
+Installing and Configuring Gnash
+
+* Requirements::
+* Downloading Gnash::
+
+Reporting Bugs
+
+* Get a Fresh Binary Package::
+* Determine if the bug was previously reported::
+* Review the bug writing guidelines::
+* Filing a bug report::
+
+GNU Free Documentation License
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_user.info,  Node: Introduction,  Next: Using Gnash,  Prev: Top,  
Up: Top
+
+1 Introduction
+**************
+
+Gnash is a free SWF movie player.  It is available as a stand-alone
+application or as a plugin for several popular web browsers. It
+supports playing media from a disk or streaming over a network
+connection. Some popular video sharing sites like YouTube are supported
+from a wide vaariety of devices from embedded ones to modern desktops.
+
+   Gnash has a better focus on security, allowing the user tight
+control of all network or disk based I/O. Gnash also supports extending
+ActionScript by creating your own. You can write wrappers for any
+development library, and import them into the player much like perl or
+python does.
+
+* Menu:
+
+* Audience::
+* What Is Supported ?::
+
+
+File: gnash_user.info,  Node: Audience,  Next: What Is Supported ?,  Up: 
Introduction
+
+1.1 Audience
+============
+
+This manual is primarily focused on users interested in how to get
+Gnash installed from a package, and basic usage as a web browser
+plugin. For more technical details, please refer to the Gnash Reference
+manual.
+
+
+File: gnash_user.info,  Node: What Is Supported ?,  Prev: Audience,  Up: 
Introduction
+
+1.2 What Is Supported ?
+=======================
+
+Gnash is known to compile for most any POSIX and ANSI C++ conforming
+system if you have all the dependent libraries installed. Systems we
+test on, and which Gnash is know to run on are Ubuntu, Fedora, Debian,
+OpenBSD, NetBSD, FreeBSD, Win32, and Darwin (OSX) primarily.
+Occasionally other platforms are built, primarily by those distribution
+maintainers. This includes BeOS, Haiku, Syllable, OS/2, Solaris,
+Slackware, and Gentoo.
+
+   Gnash is a capable of reading up to SWF v9 files and opcodes, but
+primarily supports SWF v7, with better SWF v8 and v9 support under
+heavy developement. With the 0.8.2 release, Gnash includes initial
+parser support for SWF v8 and v9.  Not all ActionScript 2 classes are
+implemented yet, but all of the most heavily used ones are. Many
+ActionScript 2 classes are partially implemented; there is support for
+all of the commonly used methods of each class.
+
+   Gnash has implemented about 80% of ActionScript v. 2.0, and has
+begun implementing ActionScript v. 3.0. Gnash supports the majority of
+Flash opcodes up to SWF version 9, and a wide sampling of ActionScript
+classes for SWF version 8.
+
+   As ActionsScript 3 is a more developed version of ActionScript 2,
+many of the same classes work for both. Support has been added to
+Gnash's ActionScript library to support the new ActionScript 3 filters,
+which get applied to every class. Implementing ActionScript clases is
+often the easiest way for new Gnash developers to make a contribution
+without a deep internal knpowledge of Gnash.
+
+   Gnash has included video support since early 2007, but this is an
+every changing field of reverse engineering. Many of the popular video
+sharing sites use SWF v8 or v9, which Gnash still has imperfect support
+for. This is improving all the time, so often builds from a development
+snapshot will work when using the older release packaged in your
+distribution doesn't. You can find daily snapshots of the latest CVS
+tree at: http://www.gnashdev.org/dev_snapshots
+(http://www.gnashdev.org/dev_snapshots/).
+
+   Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+should work with Gnash. Gnash supports the loading of patent free
+codecs like Ogg Vorbis or Theora from disk based files, while work is
+being done to support these codecs when embedded in a SWF file. Ffmpeg
+contains the codecs used by the current SWF defintion, FLV, VP6 (ON2),
+H.263, H.264, and MP3.
+
+
+File: gnash_user.info,  Node: Using Gnash,  Next: Installing and Configuring 
Gnash,  Prev: Introduction,  Up: Top
+
+2 Using Gnash
+*************
+
+When used as a standalone player, you can play any Flash file from the
+command line by entering a command of the format:
+
+
+           gnash <option> <flashfile.swf>
+
+The only required argument is the name (and location)of the file to be
+played.
+
+   The available options are listed in the following section, or you
+may view them in the terminal window by executing the following at the
+command line:
+
+
+           gnash --help |less
+
+   The source code download of Gnash includes several example .SWF
+files.  They are located in the `testsuite/samples/' directory of the
+Gnash source directory.  If you have installed Gnash correctly, issuing
+the a command similar to the following plays a short animation of a car
+swerving and crashing:
+
+
+           gnash
+           /home/<username>/gnash/testsuite/car_smash.swf
+
+‰PNG
+
+
IHDR6À˜Sh        pHYs:ÊduhtIMEÕ Eö—H 
IDATxÚì}yœdU}ïï,w¿µvWwÏ* Âì*”Eшã.ˆF1Ä$ïÅ|address@hidden 
A†m˜¥g¦»Ö»ŸõýQÝ=5ÝUÕÕQôþ>ý™©S·îrÎ=ç{¾¿åüŒñYÏ;ÿ˜íÇÃyð‘=6mA€Ðü?¹ä’K.CE€ÖöìÙ}ü¶Í«»ÎÃ=pç7+¥Æø}øè9ç½hzúŽC„©É
     øìnáÆF¥‰±ãÓ$ñ’IC±¶íUã(ô=+XóÀ°Kq^ÊdˆÍbµË¥Rœ)¬" ~µ+•jœ
+¢c…½,i—ËÕ8a1‰žvüb%I2“H–È×/%Ij›ˆ+*Yd¹Å4I›r‰
ÛÏÒص-&‘–       1¼,<address@hidden:,<ßg\!•jì°4,Š)“2…lÎ"×-0&
+LÁcÛñV)Ór9ãER%Rj:œ3Ó Ra-3B-ΙiR(†ˆ%8³,SH
Š6ÏlÛR!-42¤È,ËæBaè™iZBJŒ´¢$£†%…$`-9¡¦‚¤4֊cbH))ÁJ#­ÆT*A       
Q€¨R‚ª4€–€ˆR‚ª%!D+
 a­$&D)ݝ´Va¥Âz¾ZBZk47Ui4ÿzèÇóçv»îÜõAkèw»ù¢Âé…
¢Rw‹-Tg¡vRPÚSwÉ©aJ©RÝ¢!¥šojN
C
+5×Ԋb)kj!(%J#­&¦àÜ4
©æÞ¬ä™e[Bj¤¹F¦à©m»\HE‡IT`HžZ¶Ã¸ X+ R¤¦åpÆŠ¥&J$†é2–Y&
+k™ÃeYbۖÝnì²,ò\—     T
+Äaiäû…ŒK¬S…–……B1ͦÍ³Ðó‹iÆ
,%˜sƒ(Í,
+B’…¶[L’ı     
—DñÈ´I{®ÅÒ"¢f!I‚ïeLƒŠ0õ“¸ÓÂDEšøIܪVÇ¢DPˆ$ò³¸Y®Ö¢851ತU,EQbQɵÅӎã•ã$5ÊÂ=o}Í`f¶Î[Ô]&jã†aÀþ¥”‹ºÒ†
“·Ýò­¾ÿ·Ðóιàò±8
+Î:ã$4OŸº½4K³[¿ßD­öÏ×߆,î|/ˆ™0Çâötu|¢ÙN}+“¤št¦ËcSÍVXrU¦‹,Ú_ªlh¶ÚåI„ËãýÅʦf«9V²‚ÌRÉ~¿²¹Õ¬•ÝNJ«ÛÅ
A{¶Rò;  Ù1ÝZÔË¥b'–Äت$a£T*u"n“LÓR×ÅJeŽ!$òYÒðÕ0J<˜rDÚpca\’JS¦M§0…
AÁ3nhÖ´½ñ(êøž•0‚D`8å4<ÏI2À:&V1‹×s“LQ”!ê±4t7ɤA„ÆŽÈBÛñҌ›T+°mÇO3f 
´!ydÙ~šf¶E¸$ZD†UȲԶ(address@hidden)2Ã0¹P+address@hidden
+!AJ­2B-)%Xj¬#ԔB‚»Ð†±!¥$w‡7ÂT)I0VBD+‰0Öº‹5´BÍ͒õC+=wÐóX¥»Ð3ÁnqávswÇK¥1Ò]$"„́(Å
       5¤”ƒÒd¡v” 9Ww[fR"ŵ8ç¦A„ÐSKpfš”ÀÀ55WKÀ¦`©iYœKŠ•B¦ä‰e9ã&Õ
ÉcËò2–YŠ*™v!MÇ¢L-BÓ.¦Iì:fÊR1µ
+Y¹Ž•rÀ:%†Ÿ¥ëºI&
Āú,鸞Ÿ¤Ü$Bc—¥×+ÄIfJ"W¤-Ç+Gqâو)[¦
§0…a·«¬ájaÐ.ì(#ˆ7-¿­RÁ
S„UÛpÆã°Y*úA¬ˆˆ]‰ƒ…A”‚QNÂÙR©Ú  
Sײh¦Xªµƒ¨àèLû<:P¬LµÚ²Obáˆîn6ÆËv'3U²ß¯li5fjU¿cÄgœâævóÀxµÔŠ4•MÓßÐi«Vڑ¤b³$£]¿öº:ö)'n÷<·jÀmwÞkÛ^Ggœz‚i‹Ž~ëæ;ÇÇkïÿŸ¿N.xÑKN:å
Ç&ž_ɸT
+„„ŒK­Aixr÷^ÏóôÀ®N¤Çi‡Ì„„ãrМ.–Ç6"×ÈR]ŽZû
+剙َgːûI0í'gê­¢‹;©…ûâÔìl½\0‘!âýVaC}v¦\rê!Ré,u'™RÁ«ñ6²ÆÚ͙BÁ¯w8Ñ¡¢å 
=ëùÅz;3PÊ ³ŽWnt‹ðTºiT·Ýr³نŠ¸•ÅuÓ©4ہkã ¥,iP§Ún·]›v"’±«íNËuÌNŒkƒQ
+ƒŽíXHi)âGaDzìN,Jr“(0,'ˆ8δ•Å5 Î’©4²4 †F)Á:儥!6¼0JŠb†x"袯 
address@hidden  f–&ˆÐ$Zq¡h–%Ó$Z®ËÀFšq
Š       ÌX
address@hidden
+YÆ ÀyªfÓLh!˜Ô$c\0®„àRcƹÖÝ¢1.¤FŒ+!¥ „
+¸PB*!µè~˜/r¡„ÔBj!UϟR)…TB‚RHÅ¥B
+       Œ©º'Î5â¼{1Î¥F—JI.cL>Tä™’1®µf-Ôæën¦iŠJ™î6E’f£„i)3    
Fš¦“$SZ2Æ¡¦Ö\(š¥1&F”rВ)ÊÒQ+J2ŒT&K#L(I     F       Ç,ë¾èØ4H”!‘ÈðÃ(2
¦ZñP/
+CÓ4ÃDi+ìFÑB¿Êr“¨mZn'Êp¦$n›¶ßRƒÈTØiÔ4íb;ˆ,"n²¸a8åV;pmÒI‰H†SmµZ¾gµ"¤²&¶ÇÚ­¦ïÙÍPƒhQ
ÚuÏsÀ*P¤´ëž_¨·3%£ÎŒç—ë­Ø¢,U^Ì8~µÞ\K…ÜÍÂN¡6Ûh]ÜN-îw
+fêõJÁªGTÄÓvqóÌÌÁjٛé Íf
oC}v¥\œiK,ȞjÖ§Ëåòl[QJ“ÀÐÑé'=3K“­[·d¬Ûs@(-¥Vfëu)address@hidden 
T›iĞÁR]ŠÛӅòÄL=(Ø*â^ì÷Š“³õVÉÅíÔæѧ85;Û(ÌFDU|Àò7Ô볕’; 
Èf©;Ñl̔‹^=PX´5ÖiÍ…FGPIRÛ³¾_l´3g
+IXw½R³[D¤ÒÍ¢†å–›íÈ1uÄ-–4L§ÜꞍƒ”Š´iؕN»ã9´“`™5‰SítڞcubмƒŒR´ÇìD
+d¤‰‡Û²ƒX`•Jä¤QÇ´ì0b8?„VŒ"•Iƒ§a­(Ñ)'<‹ˆáFQbRœ0$X„©G±Iqœâ7Žcƒ’$SZ¤YiSB“LiɘYb$©-„2X–"b$™Bž¥iÆ4˜ó.Zqš
       $x¦‘‘e¼‹V’gŒŒqÄ8Ε¦œq
À¹–RH…ù<ZI)¥B\­s©”’„RRJ%¥BJ¥…ÐBuÁKJµªæqM*!ô¡S¤–BIBH¥€K-e÷ús·“RJÕ-¢î݅
D‚s
˜s¡çŠLɘ­¹Á3š±¹ÊÎ×=Ãe¤È42³4#§Lk™)0³4#„¤Ljɤ6²4ń&©œoê3NÉáYŒ©•$Œ    
ÂYÜE+Š!å¸ûf£(6)Ž2,D†…‘eÐ(address@hidden
+-Ë   2Ñ؋£À:¼_Y–DŒgÚNã¶ey 1‰Ì„•%-Ó.v‚Ø6 
æOš†Snwææ`™6©]m·ÛÏlEH³&±«V£àÙÍP#Ñ£´¾ï5Iu¤h9ìÔ}¿Ðh3§âά뗭Ħ<U~̺~¥Ñ
=KGÜaáAǯÕí¢KÚ©)¢ƒvaª^¯W
+f=¢*9`ù›fgŽ•Ý™6›¡î†Æìj¥8ӒT6‘=ÙjLW+åÙ3!P´‡mÛq%6Ž 
„ŒºŸ{¸:‚z½uý×nþôg¯ÿþ]?VJõ¥‡>ôœçžúo_üf¥\ܲibÓƚš×$µÆa,LÌ8xi0S*UÖゝ%ªÂ‚ý¥Jíàl§ìé€û29P(OÎÖ[Õi'–Îx¥©úl}¬d7BŠùA»8UŸ©U½ÙP9Kü©Vcv¬â϶¥
     
°kæL¹\¬·¹Mb‰+i{¶T*5ڙc0¦‹<˜õ‹åF;ö,•JO¦u·PiµÂ‚ƒ"f)Öp¼J»<¤xÓò*v§è™#Ñ4ݱN«U*ØíH€]ƒvÁs:¡¢(QF1
ڞçv"nb&ˆ'¢ŽãxAÈ-*˜rdÚ±/Œ2ËЩ0•-ˋ¢Ä6QÊ©¡1W$q #jyQ;¶e€UD
address@hidden,address@hidden  SBÍ,å”BÆ  ¨S3K¡˜qabʌQŠ3®‘æ‚1‚1ãi0QJ`Œ…
ThΪÕ-J4gf’c¥Õ\¤A£®Mj¾ØW„—º&°EWÐ
+c$¤D °Öc,D×¢‡µæÁF ƒfSÁÁÀ8Í0¡YÆ)AŒ£neÓ43(I bb±45)M2…kbÉ$5Lš¤’ 
!±%ÓÄ0Í$•t¾©MÃLN‰bÂP"6,;N˜I!T‹Ø°œ8N-%
ƒŒ¨åÆQlÛ4ÎɈX~†®c†‰":Õ¦GëXa,)dŠúiÔq'ˆ¸‰¹ 
®ˆ:ŽëuÂÌ¢’+G¤mÇõ;aj›*¶bmÛ-v‚ȳQÄLÍ[–[î´ߥAB‘hXnµÝj•‹v3DD5±3Öi5KE§hmWƒv³TòaáXârÚ®KÅF;shÆu‘uê
…R¹ÑŠ}K¦Òçɬ_¬4šaх
¹*ñJµz£U)Ðvb›q‹“õz}¼ÜÂŒâÆúìÁ‰1ÿ`L5CýÍÙµ±âÁ†°Q[;address@hidden>I¨ÞhÝsïOºHtÎÙ'—Š~/`ÕÆË[7M>úøî—^üJ
        îéa¸÷Ó¶£¶\yŋ¶lš¸üÒópìi--*€z2ëT*•v˜–]®HE$«cí 
®4ƒd³åêd§Ó/‘D:˜Ï*SN«V±CnP9ë•7„íæä¸×I°©Nq*îÔkc~'¦WË¢ÆXµ&Ò¥1±ª<iV*å0æ¾É-ª¬Y*W¢8+ÚJaO³V¡T‰ã¤äam¿PMâ¸ì&M"Ûn¡šÆa¥`¦‚RÕqü±4îTKv°
      ¡åUx”‹NÊÁ"     µŠ2‹7eÊ¡›¾â‘ï{®)€: 
"Ïó箥[HÅ®ëqÎ<+0°Jl×<ó"H-Ǘ<ó]C(L!5m_ŠÔsL¡¹aºJd®cJ©M,ˆiÊǔJYTj"address@hidden
L±f¦e)--"qÃ4µ¦‰ ‚¸a˜ZËÄE‚a¢HRJ(ƒb„€bMÁh¡„`Œõ\‘!cM Ƹ{a” 
Œ` address@hidden&c¬ç¾ÄzþúhþvceP‚6àîýEIîÂ#ahi™0Æó•µM¢QÄÓҊ;U€
Ì©aiÅlÛP"      address@hidden&‘¨ÛÔ¶)•´ˆ‰uf;ŽÂ1Å:µGæÚX%:±WòÌs
©Ñ©éø‚%Ïä(5l_²Ø÷l&ÀČZ¾äQÁw2¡lʱáén¿bÂ5%¢Ž¡ï²Œy–ÖȺ~1Mӂƒ„¶°
\¿œ%QɧLTµ,IÂjɎ6¡m{ãiÜ®–Ý8C·ÊâVµìG‰rHL­2OZ•r1Š…
g2d”DÚ*WÊa”©ˆ¯²F©\¢¤ìñF±Rƒ`¬HaÑ(”'ƒNk¢b‡YwoÛõ©šßŽ±
u»¸1ìÌLՊ­H»¤møSIpp¢Vm²`†Ä®±h¶\*Å©°(7sjDQôãŸ<ü£ûþñOîòbt°P³Ù¦„\ýúËw>ú¤V
+õP,ô¦·¼ëõo~ÅbÛÑÛº<mž¤!)åÍ·Ý511ùÏ×ßê)–†®ëvÂÔ5˜À¥,œ)UÆZ¤`Ë
+"®Jã­NXòP"•ÕÝb­Óî”FÄ,`u»8Ñi·ªE§“,š–?vš•’׉êuÆã°Q*úX™(Æf%š…
b1ˆ¸M™"·üB1Œ˜cJ<‘¶]¿F©gÓ¶Ê:¶WŠ¢ØwH*MÍ;–[Š£ØwiÂi׬žÄ¡ïZ1CX…
†½P¢lX¹®Óµ²õx9Ž“dÒÄBa[²Ø²”    
“(–±i¹YÆ»Vv-bÃr³ŒY&撀L©é2–Ù&aϳ̶h6gew8Ë,“²9Ó¯-xfšú•Ý4¹i¨’¬ke'æœ\ÔRRŒ¤Æ
 address@hidden<gt_deD´Rc­5­ç¬ìÝ"address@hidden<† 5`zÎ_ 
jáv‡î®”Â4`Ða¢”嫮 »îQI0R½u§Hªnє‚SJ„¬"¦Ì ”KÀÐ[ì6µ!ë65EJ!C‰Ì0-ƅ
A´C‰Ô0mƸI‘ÐÝ7ë0Æ,“ðCo6ul#åë„ËÇ6S2D]žÅŽm¥LSĀº"‹ìù~¥±#Xd;n’2‹j‰,É"Ûñ’$³MàÚÒ<°œbœ$®M2AA–SŽãÐẅ́$Ã-'aPôí0CD
…Ô.'Q§XpƒD›#«”EíBÁbi‘LÓ‹Û…B!ˆ˜c
+‰|ž6=¿D©g)®]™5]¿Ú     £¢‹aiÖtýñNÐ)ûfÈ(â
۟촛ce§"êVaªÓªWüf¦nSw"lÏV+ÅV(m"k,ë•r9ˆ…EP_EOþÚë.贛Ï=ëT)address@hidden  
óV«®·þø“jããŸùÂ-‰®Ø–¤Ì"Ba/‹…R¥$ž¥òXÒ,« ò”)G¦M¯0Ö       
‚¢GajÖtüZ´K¾1‚xÛòÇÃN«\tƒˆ
+
§‡­bÁE!!f)‰Û…‚&ÂD…,i{^!J˜M¥Ä®H;®WŒ’Ô1€ƒ¥X`»Å(N\3ejZn1ŽcϦ™ 
ZF¦]LâÈs͔c‘a—Ò8ô\+a€uBÌK#DZS¦pL–ÅŽí¤LR,ۂǖådL¤ë9J-ËΘ0(HMµH
Ëɳ(šh™Rc¡O#PŒ6c™e\R¶`Ì4)—s#Jf†
+#ؐ‚ÔRa¤J2B
)ÆZéú॔#X+Aˆ!¤8î@%!X*z®ˆ       V
+!€h×
§4 ­wðҀ`.v#¤æâ
 Ûuô¡" 4 ÑáøÕu("@zñ)€z"æ‹!5WÄZ˹èŠîѹg›/­%ÆDI…1R€ˆR
+J°Téù"ÅR"¤9"¦”Ü DH@ 6¤à¥BjŒ$`C      F©Á¥"address@hidden     WTF
‡±Ì6)“©Œ.c‰m™Œk¤1\ž%–mf\àˆ:"KlÛîíW¶å¤ŒD+dIY¶—¦™e€Ô¦ä‘åøi’:fÊÐ<4b’Äžm¤ƒŒL»”āïÙqDÅÔ.&qPðœ(ÓT§Ø,dIÇ÷¼(•ʐágIà{^˜p›
+…=žv\¿E™c*ŽÈÚ®W£Øs0“–b-ǯaXtiÂ
Í[Ž?tZ墦‰–åO„F¹ä1Ý1ñ0hTJ…
v$Ma«šõR¹Ü‰¸E8¢>g‰N÷¿íõ/ît:“µ²i‹â:}bo¡XŽ£pã†1BÈaGüt瓵‰üä_¡_ûõß¹æí¿¥µÞ7½ÑäHš¬À§þùdod\QÄõXÒö
…(fÚ(dQÓ/”¢˜Ù¦”ÈcqÓ+”£(qm$´ÍӖëWÂ(*84S¦H›Ž?…AÑ·Nk[n5Ž‚‚o'
!N9‰ϵÓy4I“Às»Q¥ãzi&"address@hidden'–SH“Ô¶    
—Tñ°ë‡vmƒI¬ElX~–&¶m2JçûœÅ„Æš!ê–X–ŸÂH"l
+žš–Ÿ¤XkdHž¦Í¹0(( =E¤4‘"5L‡sfX*¢eF[pfD*¤#t¾(€ÀØ‚•R#P€©’œÚããç„R©y¿ 
„Êy2¢•À„.‘EÅyn¥0FZ£CÌ!
æCŸP÷h—UuÁfQ‰j-±h-¥»ÁXÁüÝÒÝH1¬ ®UKIL°RzPe   
¡óáèð"ÌÑL)!JA·©¥ä´^ݦœ],S€¨̘cµZ#*EF
KpA)hM¥è¾h>÷f»1z,3M*ÒrË,“ò9,sK-Ëàœz¾_$€Ø<‹mÛΘ4ˆÒÈâ,²m7eÜ¢ 
Á,²l/͘mb¡¨ä¡å’¤Û‰âéÓ8v]“ñ®‰­&QÏ ò³$t]'address@hidden,±0„]š       
SdCØL8UYËöÇ¢ 
],ºqŠìN%Ûł¥šèÅ,,Ûî4ž|÷Õ/€™ÙcÙâ8¬‰šA)ì?0#¥Xttã†)address@hidden)ŽrÁ\rÉeˆ¬û¨™]y±|×åÜűM;ïtñ'¦Ÿr띍º²K³6=bcñü36nüþíôë+
    
À‘yÈ%—\Ö&·ÿÍêΟÿëÁ9ï½÷¶"ÎÛ0—\ryºHX¹ä’KX¹ä’K.9`å’K.9`å’K.¹ä€•K.¹ä’V.¹ä’V.¹ä’KX¹ä’K.9`å’K.9`å’K.¹ä€•K.¹ä’V.¹ä’V.¹ä’KX¹ä’K.9`å’K.9`å’K.¹ä€•K.¹ä2‚м
      žF’øÜ^CÙŒ@(˜Ž¡ÃÁÄP2 ¨Ú+؇+—\rÀúE¥¡•ׇ¾if ÔÜ!‚Ì$p ¡ÊL
+ address@hidden@iD0R¦Â³)<ÖDH¡©…;îOÀp<BHÐéÅsw 
b9V¡¤‹¥´œÅhm9ŽMlZ®Ž§{åI¥ë)h€2Î
+¶Q¶Àæ!æcé¨ÈÔ¬b…¡æªAP4¡fƒEòמKX?Orx"€‡Zpÿ,úò›    
åPdxEÛ¶)¥éÁ™$ŠbÓ°s0©¹ª´¥µ'%˜›B)¥À žÂ5M«•ބ     ]BlΜßÜ*Óp4BÈÖz!eš»_ö
address@hidden £QI¢”ò<¯[´gf'address@hidden:H»‡fŸs®pÀRíW¢CžÙ¦„Ï_GJ 
hi)ÕÞùHøø ­dl*ùH«€(¡ @êìÛ„¾Ž(Qª¸0B.†1G
address@hidden,0,%J&L:P2¡fCÁ̇R.9`­YbÓ142x°:address@hidden)¢ÁŒ 
€Œnc!Dñêí~Ç÷„Úö…¯Œz&>ü5 Ùý¿öÐNMHŸ‹/}ÍaD
—š‡Œ…uÈ4hгÏ9=:b+(¡µPªÙjeiÚh4 h·Z õ®ÝÆ Pz!àDíÕRmRóÏÄÛ
ÂðÍÇèŠc6T-¨ÙPÌá,—°zeo?EÖäS˜‹0Kˆ™á) Sšœ®h
cÝÝɶqè|Ùå8JðÓ@;²êýÞd 
p».0õÃ{á‡÷.wš†{HSˆç6šzás+ÖO„êIP‘(Üõ}ɑvMš)žÕF*$J Ũvm³f«s'D— mrÁ 
€le+¹üB֓!|áIszê쪷áŒ)ë…Ss:°2u«Wúú7‘ùË^Á>ZP}Quþã€ñâ>%1­™&´Ô 
˜nÄÐÖj÷“âq-ïCJ-A‡”& g‘Ú)RŽÐ6GýÊ&½¹¤ŸUm% ¹+;—§;`íáÏîEb¿wéy]ø®wáñqà=?H{>ϼåM 
õZnWú֍ƾéCãPÈf«ÇQÐ    ×õ}oçÎGâ8"=¼Ì²­R±4¬£Þ1 IDAT7È       VR9>|ˆ§Ô²ƒ¨ 
,@E„{¡„Psþ3гjÎð^ÃØ4·ã»©¨DãšdZÿT
+       `"GÔ06
+ÐÏØ[HBV—Ñ!€Ý¯‰q˜Ž«µÔÀöƒßPʏ`êQ²OÉûÜäz¡H‰—kâèŠ~öŒÛù˜Íëi%4áïv•w?ÂG{§ 
bÜú=ùŸ?2ª×Tª®Õ킅
ZK¥5D'¿ïˆ­­VKBˆf³I)圷Ûmq8;3Mc|è˨¥(471¥‡CkŽƒ!BZk<1‡_JiÁš2º‡”#¼.@)
 ¸ûQH¹P;-„A(address@hiddenzB*¢¡¢´­uÅ×UÐ6º
+â8Æ&dŒaì#TA#p›’€€Dk녈"°ŽF`®²UŒOH
ÎêpVýÔ`ŸÖ1¥;Æ7ËçLÀ3
+€¤¡rÿfX?¢5|g¿ñ¡Ç/Q…
ßם±ùáD‚pÑ/J5´ªkµO©H«Çì%x7%(I(eR(ËÒ/Ðõ·؃t­1ZkBH¥R!„ض=66…
B”!d†çy…BÁ0‚`Û¶mãããõz]÷P¹v»Ç1`ŒÕ<KÛ¶+•J÷{J)c¬ÑhdYvˆ˜"¥ìþ 
Z­vï‚RJÍÎÎ*¥´ÖÝ1Ƥ”Û¶m«ÏÎ
+)…Zë(Šc¶fÀÁ8NÓtg!<ÏcŒaŒ ! AܹÆÕRRBB µâ\K©…“ª¨õ˜Tµ¢|©\¥1FJkhj[è6 
²       “
Oa²Ž¼¸¹@&„s.8\è4‚Çv‰ïh–xœ•¤c06¤—mWS.Œ|Pç€õs 
RÃgö”?ûcë#‚–ÓÖÃZTŠ–•šÁˆa¬AÏÜíZ„RaRk     ¤T†Q«Õ6ÕjµZmÛ¶m“““¥R© 
¦¦¦°!ÔeFcaŒBJJ
€BaŒ»_€Rªûå¢gF£idý¦5t¿_ø°ô€VJ`Œ{rѺ(©¤TZw¿‚ ‚0;ç|vvöPKY¯×¥” 
u'²,ët:išîŽ¢iš$ÉÂÓv1c¼ððc¬5Ñ 8ׂoârR*W©ŠÒR™mD¨†ð8Æ„'1Y5êú
NBÆI`¨Twʑ0ý„üáãìÃ*©•¾ãx8²í°~vòÃøÄô¦öƒñ§½R$Ñø˜ã¹c­µÔšqÎ9—R
+…Z­V.—K¥R¥\>ò¨£&'&6nÚÔ
³"„ƒe¸:ÔÕ¼–²ŒG½È"ôbY[øÙÒk"´pԅÔyYô<K¥P(èáæ<address@hidden;KëÙz½K        
»¼ïŽ;îˆã˜1Ön·ëõz«ÝžN’ &&&Úí6F 
­1€BqN4J•”Be¥Ç„8Bê’Ò]崊ðÆǺq(Yë0لÉ&p.%η¦ÑŽÇ[gm'¿µ­³ÕÏxXÿýhÕ4¿qô[ýðáÿ?ö¼‰Îd­X,nÚ´©\.W*•
6LMMMLLÔjµîÌߕ¥ÒÕwú£ÀR"address@hidden/„Ð|C
¾­®Û{Ú¶mÛÈ]WºHwàÀ 
ÚívgfšÍf—ÍÌÌ4$I’$éro½N06-«Ëg%ç]h+¤Ùv.ŽÍø©˜Eè1„Òåzó%B‡ýßOjØtŸsðþ·çƒ<¬ÿ>¹¯Iÿ¼È{âà›~øã
 ŒÞÏӇ7Ô¦ÆÇÿôÃv=ÍË
+®8âP_‘Ž¶†[?µ²–;v¥[Ù¥¬ìð&ë%w½0wÄG,:u_ë~BÌÎÌÌÖëI’tÍfóñÇ?xðàC»wߺ?Ò”"Hn“z;ãÏòLÇ0vMa¼ˆˆ‰Éí™yš¼ëØóvÞwëOŒÌÜ$ŸÖZ‘*\áí
Þrç-ÛýGž~­Vñ|ÿø€_(Œ¤…õ—¥$k8-¢WkAAüîçVæëŽPi¸V»š÷`(¥›·lÙ´yó 
åtßÞ½?ñÄ®]»öìÙóàÁƒ_ݹ“3fƱ
+ZPr\È
Bnàâ
JÊq„ß÷äþ/˜¹ï܋ÿ÷ƒ7}ðøɗƒç€õ”ÊÍûÉw~›ˆ×ÞyË6B¿#؟–=ì8ïyÏ{jãã0ÀP:ìPߟ­+^ 
åÆçacÍdpeÙð´y:T‹¾Zí £k    
[PN6oÙ²y˖sÎ9gÊZÍæÃ;w>þøã»wïö§§÷îÝûÆwÝÿ´mŒñÞ={nÓOsçKß¼ù³Ï?ë]ü×{Ø½ÙËÇ{XOÜ´Ÿ~có7oÙú©GŒ¥øŸ՞wõÕW?ëYÏZBhé
 7­4,ƒV£é›h°°/
CL騧¹–jvË`
+Bý‘wD
º÷ú«V¥ûÕ¨R­žyæ™gžyæBÝgff~øáÔëuø¯ 
øëÝÓï¶ýGpρ¿zíƒ÷|hìûǔò!ŸÖzËÁ¾3ùŠçœó+{ßó?.ÇF]«wR”Ê—\tÑyç7,VdÒ^‰"³šA 
aUy©Eê>zèˆÏ¹¤FÝæ:
u´†Ã4½¶õË´g÷æoŸI¬ÕjµZ­[<ãŒ3Þÿþ÷ÿÃXéÌvr­aþÚwn>ñU¯øóo>ñçϚ¶s{ÖÓY~î–iþbß'œwÙ=üÐÛjýûÀ÷ŽUO:é¤×¾öµ‡ù­–sÏ?%Ê×ȗս¡
Ë_U{ª…
ë,X‘ziˊj´¬¾¼Ž–¯!f¬~OŽ—Eš>êùÁ2³B'Ÿ|ò»ßýîÔ4ÏđT˜žýé7Ÿÿš=VR:õ9`­“D>´kë‰WÿÑÿá¯Ý7
 ’›Ç«µZío{7à{™Q1Ș²„ì ृguІFŒ·ê}¶®ûl•zO_аAØȘØçIôÏnì"¤‡>[Ãߐ 
“~rþùçŸ{î¹3c•ß‘ÉL®ùÉÃví~â˜WýÅCŽÌ1+¬µK&á/žÜðœwþùýßü֛ᄋ„ÐGDzÆIÇq~ó7³R­®unb§y
 
H¶2˜CóDnK:ä4èëÜ\ädVÖ·:‹4µ1¬!è¶*à[^£ï½r/©±gc|ÕUW=Tÿû,~¦§~çÇ+ì9é͟Ûeç<+¬5‰Òð¹½¥¯ú_ÿாøÕíÄø[™ýÓäuì·½ímq‰k'ý‡ÇÒÐÊQ˜Ëj-ú¨—5ô¢Ï=náoÀÅêSKHJ¯z՗衾¦·¡ñ#«¾ACß+÷2Ðîî8Îoÿöo‡ŽýW•Â»Fôå¯VjSl½üë{òœ59`­V4À7÷›Ÿw­d♟þ§Ö'yrÝx™Æ\ð¼ç>·¿_
     3øËA±ZCæ|ýs?;/û„=0·”"v‘
ˆ°´jÅ;”{ÎáÑ`ÃZŠÚC+ûŒ­[wìؑšÆŸ¨¥ÕµõÎcÿþùÒ3Oú7rÞOšùðÏkUhuÓ4¹cëkŽxæ1¿ú›W
+}ƒ`^-¾üñÇïرce³úJfûÕx©
ý4T-VgÆёº6Ù\ê~ý–×ÒûPË^øÂmÛ¶í«¼Ofc_»ûÀýß¾ñ„ç¾ðoÙÈrÈk¥hµŸÞxä[N{áKûã?}ÏLsV«šØ,øGyä;ßùNÃ0ÖâÌBCŒë_®Z£F?¢.ùs‚w£<F—Š.K0{±fu/n€ÃtÁåºÒiÆ´¬ßýÝß­T«÷×Æ>ÅÒ0yõ}÷?xÿÅç½ú/address@hidden
zãW_¾ãMw|èsρLë?–ÙôxõÈ#|ï{ß[­TÖzƒ^B´ÄzrHY6J ï 
F¿ä¦ýYÀ‚Qi©Ž¶‹¿ïž¸œ¯sÙ*èi¾ƒìh#»ÖÖ+´rÌ-—Ëïz×»:–ù7•Â­‚]䬛ncq’闞¤¹>¬‘äÀøæ3®~Í[Þùåëþîí>i"ôO"»arÜ4Ík®¹Æ²¬5vñÅG—Úk–Â^[ûºÐŸUÞ¥è°`t›‡¹XŒV`SIóèéëÎ"ây!¼cûöíW\qEb[6Ñ>%_—
  
¸þ«öÔ3o­¼èîÙܟÖr’Iø,Î˯ú{î¼óä/í(B‘â/}ÆÞð†-[¶Œ:Vž³xð?XóÉõó¿óQ1Ä^pï×æh°©~œÐèD¸·>_|ñÅGqÄîñ±?R
ÞÕ
+wßð­Í'=ÿSá³w‡9ä€5Ôtõ·—N~Õ»›ÆÃþÈ+€dZÿ1])Ÿzê©çŸ>2—ö°T3ZPÍúž2|B~j”šeNY[AG[ŸŠ
Zu¸¤õÈa+›*–]“¸ôñæCÛºÒ
è+–Ë÷Unl&oyø±Goº¹vÆŹgcœo«”Ö ¹qÚЗ¼÷ØcýêÇþúÚF|A°ÛÇ+årùꫯƏ%F 
Á‡^;Ê,Ò,address@hidden<Ô²³>Ð95†?áS‹´õ!)X—‹×ššzë5× øcŽ1«ÔYˆ¼ížÏü×Oà´W}òɲÈ
ð9`-•fߨ^ö¢‹_òƒ;î8ãßGx§â[–eíر£\.¯³‘¨™Bë6ˆPŸœ6‡àþñ3?
[Ø|ÈÐ>ÜÑÙsÍ¥-Ó«‘¡ÁJÓH„eĐúÿ6¥xä;.ð¾N<ñœsÎy¤èXe
ôiˆ÷–ýÀæK¿¹ßÊíï9`-î]ß5~ٛ~½Õj=þ'v9µ­I]­œrÊ)Ï]ˆV½¢Q1<ÉÁºääAÿ4xVvëeY'address@hidden
}´Ú_åù
+„Wýê¯K¥ïŒ•¿Å¸2³·~wۉ§~Å:ïÞFžÌ!¬ùîl]ø®ñññ/}⺷·#øˆHšœ 
„¼ùMoêŸD|i}*2¢¬Úð´rÒ1ÌÁ7äôeÀÏ£ÕbžÕ»ÒhHþÕµ¡¶žO¦¼RÅüK]k`ÀZ¤¹webrò¥/}ibš×Y¸£Õ$Æç=ôèîÇ;æì?Ó8ªÍrXÈfSø¢wы^rù]×_Î
7nÂä?xúoã…
ÑÕW_=6>>ÄJԟ¬Z¹[;¥ê56÷5$Í#Ú2:×(*í(ƒy’p]´ãáLvpâ®oçaíٗºöói\pÁGyäc•òç$€—h
·|èI—|mÚÉð€+øÄ̑W¼õw¦§§÷~â“/z·’æšÔuÏ>ûìç?ÿùË°ªî„¼’q´*3v_µe 
i8òCÏàQ:0„jxάe     address@hidden<«£H}{Q
+ÓÞ·0Ùûa¢ëº;vì}Ê·’¢€Ð•{î¼ó›Ÿqä­ô”½QŽ¿ô€õ¯»ÝWüžçûßüƒþF”qАig¢666vÕUW
ÙQj¡S¢¾0±Àq–5©¬"âq-$hÙ!4‡ðªÃA‡äŸìd\qÕÊë;ÒrŸe™×ª–:»}ûÙgŸÿI¦õ˜ǝ÷MOž|Þç÷—óœY¿Ô€õƒ´ëÔ·~æYßúÄuoûéÎ"BÿÊÒÛ§&B¿uíµ®ë.ßŗ;2€—õ/®(3̐Œ(£œ§HW]EžõÑôµQUÑõRÃ%tîg{t¢ÑÌw¸PøüòË]×½}¼òEÉ0ÀëRÞ¼ñÆb¹²sâ¶óð÷_VÀšIáKö
…¿òuwÿûϼþ?ŽÁtŸ’êY
+ào|ã3žñŒåÇâ ÄE¼iÙ}Ö¢’,%J«ÈÖð3JF<ÒéCZi”©×©ºg‡Z=`u¬hÂè–-[.ºè"mYs͇¥¨ 
|åc»¾ëîgœü¼O՟ò~ùKiøĞɋ®ùI’<öᏼ\ý^•©±êi§vÞyçõ·¤Œ˜t¨pX8ûRwÏ÷¥Ê®H®/Y/CRßo–M
 1$Žá©©êq\ Á«V¼[ÏÈï!tÑEmݺµ3Vý¿ZDZ?Ó£¿wgèċ¿°Ï×¹bøËX· 
•K~³61ùû‰w6Ðu<ýÁԄmÛo{ë[çLW£Xe…¬(¤h€n2,&`¥X6Ø6µÔ¤Õ;ºø¬¾®€¡™Âôêžsí
q¸¡j)Ãê     
’XýÎÞ#X-=×}ík_K(ýQ­úÉÀk¢lß-ßÝ´õˆÛüç?+†¿T€ÕÌàëö¹gŸÿ¢û~øÓn¸qá;ûx¹ 
´~ík_[îͳœCŒîZÍÌ«ZýT¯:^š¾}„5
+‘éGІš¬¸m‡/Q\òƒ!­0d×Å!g{챗\|qÓ4þŸMw)¹       “òà¾GÛvÆyŸÝåk
IKiøÌôøùo¸6Š¢‡þè×IاäR åÒ        'œð‚¼`5êCßî>@s]%¦7âpCWí­6™2Z8[S
+ªžÅÃì\xœ^6AÕ³¥1zøØ*6v›>4”ß^ré¥'œp®JùŠK€KÈoÒZGÇ]òíýV¿€õÅ=¶uñïLmØøÕ?þðÛfš‚?icÃTµZ}÷»ßMY¥e¤oˆVßøƒÑ÷œgz)ÑXÈÀ7ädìe[vÏ
…•¬JU!]]ÄÖèõì߃–
‘”uot=}D'à¢í‡êƒ‹¦Çq®¸â
+Ó²n(û÷Hî"ôÆý³ÜqÇÏ<æ+âÙÓq¿è€u×
~ðYW~Îßøëï¸ó‡þgwNMDZ]{íµÅbqejÎr‘h=ì/}u¢åþ®hg„%ÑK÷F]
¥s‡ôª8tûQ䩜ˮŽZõ.Ük1”Áàõ¡K÷Á>¼ÑŽ>úèóÏ??²¬ë°´>‘ÐÓpÏ̾}›Î¸ð3{«yXÖ/2`=ÀWJ/yñ«Þô½ï}ïô¯|ý$DZ}Ô¦ÀŽ;¶nÝ:address@hidden
+áÁºµÒý´Î¼ïð³F#´ŽÖW¢ó®ýՌŽht…
½§vzž^vÙe߯ü£Ì4À¡›_¿¡X,=8yþ=õ|Qô/(`e>Ý9öÅo~Bèà'?}®Bà/D:address@hidden
ß:ÀÇ"sۊPcè°Ó‚KõT&‘Z‘—p¸Þ7ˆöt¤R©tùå—#J?Sp(ð[ö|ø{ß?îÔ3?Y?*Èò~!ëkûÌ®üí±ññoýûç_ñä^à‡‚}¥ZJ²ìíïx‡mÛKÕHv5†V¯vÇc4(²±÷R£[–Õמµyæ¸œF©ŸºpüQÈڐ«—¾»ÖW÷8묳Ž;\ú
 Õ
­NÁôÄïßÕn4Š§½äßöòí*~Ñk?ÚzŶO;pà€ñ¥/Ÿ€H¦õŸŠÅO<ñ”SNDȗU
+ô‚i|­G©atf‘ªµ0€—êSK9ßûõàŒ%«V8ם£¨C8U
JŠð3‘µ,EìחÇyýë_ï‹ûjcŸà©ØÁÔþ›n™Ú¸é»þ9yXÖ/`}±±á엽Þ4Íï|ê~u¶E>&³ŸÖÆÓ,{Ýë^G)]:ZÐ:
r„±‘aõp:=Âèy¨öؽ˜8p˜õµLõÈÊÆç*°cEۚ­â.ËBÛpä²Êe 
oÙ²åÊ+¯L(ýjÑÛ­ä8Æ;~쁻î:þ9/¸îà‘I–õX·ìƒô¬7oÞ²õÞ»ï~Ö·oފ𽂦èjŒ.½ä’EkѪ³}N݋VîDkö¾Î¥!òÃSD­(g^¯Ùhåh8×X֗·Äx·€š«ßW¢MVlÑýý
+cÜWŸðð£guÖI'Ô*®Ó‚ƒ>ÓgßzG»Ý6OyÉçwçi”!+äp³Þ¹—\‘eÙöÑK™Œ´~Õhl¬T*]ñŠW,address@hidden/F}µR¸G
+ð®¿ó7oý9u:ϖõXߘ¶¶½øõŽãÜòùÏ¿|ïþBŸà铓µ$I®¹æ×ušB†g¹[ªS
¿ÎZXÌè{!¡àèükEzÖ"Ÿé(crHº«µXyFi¢!)ÉF„ì5Fê„–Úã‡5ŽÖ°}ûö³Ï>yÞ_ 
k=èù?º¿~ðàQg_ô¡'¶äŠáÓ°fSøÑą
'žrÚ®]»è¿|þL¤ÄgʞÆøÂ/|ö³Ÿ½Ô¨‡kLC²²-¹ÎÂßúŒ–•0¬¹Ù0wèK3ou9¢÷p)>®-nve¨1Ü 
address@hidden/address@hidden;” ?ªU×u_ùÊWÎ)ƒ}7ÚZvò_ãæ«È¼òìýQi(è¾`7Ô?œ
+ˆï‹›ÝK-±|¤svº¿ú½V}mÄùc“í»Œqsþ–-[Î8ãaddress@hidden 
>ãGõÌïûÛç~ÿîI„?ÃÒ'ÆÒ4}ë[ßZê®Âé7b‡uèux‡ÍöÃ-?Eù™ÀV‘G¥7þ¶_ö.=Êꢕ,Üéph8Yp÷ÃBü×þ–‡äκñҐlY/ùËà‘ñê×€×*¼ûƛ¤”αç|address@hidden/¶6ŒóÎ;ïä“OÖKªïøTãÂ[:ɏâÁ\£5¼YVZÁA{L¬º}êEB룁2ÏÁ2)ÀNK˾­§¦¦.¹ä0Í1q
 
µ‡Ðe<¾ç‰'Ž=î¸o=ƒç;address@hidden,Ä[FŸ‚>Î5=\ËXo¸™aV½šr¸Kqˆ÷Õ°æíGzÄ¥H«N³ˆ.61\%_èƒÿ’‹/.•JW?-R
ð2lDß¹YJi{î-ÓyéÏ°ny„üùô#?ÄßÜ
£¯™:˜À}.>ù´3¾ÿ¥ëß²ó‰B_âéjcq_y啕Þü|«›çW:ÒFWyz¬ë¿Þïîƒ 
address@hidden:ô\i¶†A‰%ì½¼lþu½¬Ãwu¯~ž8âbý®àùþ«_ýjBé§={¯’B/ß?ó؃n;þĪoÍIÖÏ°ÎMýßØ?õŽ'68ß«}ìߋ¸Áúؽø§ÍeNþÙÊ/}}§ÓI¾~јì”âCžEþQGuÎ9çŒ:„FÜó)Rûîí¾*¥×Ãòµ(\Sî]4(°³?.M‡¿w†>9ʘúïüÜÀV£»6[ÞÊTûzÈsžóœ7fÕÊ_ÊL¼QyãMBç¤߸/'Y?ÀBÀEèÔú=«ø¾¨ö†G§¾ó­âu÷#6`¹gö=û
ێÙ~×õ_~徃±Ö¿‹$LMrÎßøÆ7.,ri¶¼¾^kMú2—áQZ}³nõnA¼jånÝQxuÆ 
¾qáC6²†e<¶¨_lÚa¨úTWvĄ+‚B„!BÈ+^ñ
+¥ÔW+şHÞÜ¼ïGÛ·oÿ·ð˜<UÖÏކ…
Š¿“O~`üŸìÓb_eÇ]øò»žxÂý●!ôODòÈÆIJéùçŸÌ1ÇÀÎr=Ä©>V¬-.]€2DsÁÁ¨”p-»Ï¯»Ê¹R-ixÛÁñá1¨«2áûÍ(ÊïÐ+\Z´¢‡ÔN;í´-[¶Xåò‚È´>“š¥ïޞe™±ýœ›ö¡G~ƀµ[§«ý·gÉZ„/NûG½òw“$¹ëøêVpÏn¯ÚŽC)}ÙË^¶ü6ÎÃà(а6›Å°ø¦Í«Ï÷íQ‹<
kw„­„-b—}ÛvÄ Û¡øˆ­åʋÌö‡Ôõê<¡«n´%÷ºêª«”RÿU«~M0xgüçí·{ì±ÿ\ߜ§ù¹, ¯…
ÏÝwX–…
Ý!ì:æU§ž~úMÿÉ«zÌGøsÉbAqÕUWU«ÕLjc]bFߟnhxçºk1‡™Ÿ¥Ä¾ÄdOëer<Œ¦Ó-“õxˆÛ´wá˪1¥g9ºî65bòøµ¾©¥p9ÿá裏޾}»ãû¶I]«£}Á÷îj6Þé/»~™CÉÏ`À&•Yg_ÉúQàuæ¯<öØc›n¹}3&wvw¹$ÉË.»ìä“O^ìÞZ¹N´¼k|E™${gþõ
Ry—ňÑÝg‹p+}þ^sþh‰uÆ2= âÅgxìÛ`ÍQ¯ã‹ðû+®¸‚1–LNü=OÀ€Þ{ÛíÿŸ½7³eV2æ 
IDATë¨îEתÚәºOênÍóìI–-c#›`Œ§`c›Á\àq    $—address@hidden `À
&¶Á’,K$K²ÔR«Õêy8óÞ»ªÖû£ÎÙ½ÏéӓÔ2-÷þý!³»ÎjWýjMµÖš5k¾VØ1\šóÉ<9Ng`܅
¬‡‡àéspdÆ\(
+(IˆD¶D¨ÙÑ\2Ç2¬+¡ 
ëÃÁæ›ïÞ¼ù{öçωñEÉdƒmßôö·OäGSՊ¹¤î­4§!8C`ÑÂbæóÏiIDacÿTœûó^ºç›ûÍÌ00‚=Ìó4Ð<ÝtþÐéV‹JûM›6íÞ½ûСC_oHܝ÷·sãþƒ/»þºkn»ÿo?ñmËÎpM_A_
âkCÈÆ,3c¶H#CÊ\Ïx„#†x²àÈ<S²Õ½eº¢lV䇜/a5å·øã¡Äêûî?×ÛÛñì/address@hidden|ßðÁ›››qæ1‡HuÝÛ3ÉW€Õ'
Û2°Þ¶ÕY_°ÿq^¢Y˜j/À
š9X7ßÖ+_M½ÕK)2÷Jb3n-À™ROU¢ëq"Í«ˆäœ9îþûïñōö¶¿;qê/Yâ¦óџ?û¶îߗ¼:ç?“4ëúãðƒ—¬Ö‘Ø6ißÎ
Œ)“OØ ¡ØOÿ~Öýšãõ¥JïÜ*vwP,Ú4G•,’Œºp°ñÆ«®¹öÀ7¿ug¾¨þ46´¶¶ÞpÃ
sµ8÷ª™7ý¨nšù7žUH©Ò¡¦ÙÏ%ξn憟f]13 
¹çÛº˜MÎNs3$ÃY5|.kbu°M—°;¼6uttÜvÛmJ©'»–}_¸1Äkß°ë¦|£~n¿“ãøo?I|b¤õؼÆ0í9Üa

ñNËùuÕðßÆÛJ?oþ³çù™\DVs&,address@hidden<ݘô}ÿŽ;îH¥Ró[óZåæeºèÑ\gpÏ!/͙5¦žª6F´nì(QÝxѹøìgƒšk¶†
…R™k˜bŽçÊ;몸ƒêY9qÆôú¿»îº«¥¥%‘Jý³‰Я?òåmhh|µñú㵿ÈãOÅ’ԇ1ÄÛ
çwÆZ~:öÒ0D¦­9VrWÂ`^i½eÓ¶¾ñÍ;rEð
ÐÐÐÞÞþ¶·½­ÎˆœW|ÐÅL€9
+e³n«'°`ÝÎ+V\°¤3kœ™Éh.™Bg½ùH²3,Í+"t†¸°¹ùð`*•zðÁs¹Üétúid¿3–=vìØú=·ýõéæðí(‚;Â?ì74âE¢š=ãwŠMßÿYüÄøRç¬9õã(IƒÁcCWßý‘3'Ovüø§+™äBˆÛn»mR¼šÙj3ëîùùFŠ^pA„Ë׬ß̱yÝðÅïvžù®Â5H2š!§;ÍLó¼Ê¬îKª«5ÃBðBfš—*ZïOW]uÕÖ­[Y2ñ%òÀÛ
+ûâK¶ãL¬{çѐ5áwÎic`6wO¦¿ÿóø¹|DX³á,ŠC#ø”yíæ-[=öø»K¾Gô7$(nmm½ñÆ/\†ª6À¬â̅
NΪu(
+EEםEÀ˜%]ÎÝÊôä
L=·SáôšZ­zä#žB—t)ìýӇM-Œ¼6½‹æ½ï}o±XüiCbH)xGwÏØØØÆm;žè›´¥ÅmEg¡žÕA¼ÝOü´)"¬éàõHñLÑû›îôÆëné=uªñ±­aü9éH7À;ßùÎ:Ö«¹O¹–Ê™Çe)„DߋI¼4Qk¢š.Òz1`Zºœj‰š¯.6Ÿ
        Iiš¡”ô¢v_ê 
Ï9rnÝǚz’Yeÿ)ëè¶mÛÚÚÚb--_ð‹p/38`ÙÎËÎvQÙ~{twæN×mÊúÎËFa     × 6f _sÏ      
±ýš›Þõ®wýðÿýÿþc¾”Aü+ ±!¿-p.ˆ7O-«E 
"ò<¯Ô¼]ärRJð<¤Ràû¾’2˜f£ccž7q®œTÒàFïk¯I¥Ý¥ÖMå2ÍTkk!6¥­XŒ#ê]¯Ü4R--û9獣¯—Z7ƒé
+‰B„'Šâ¼$¯ `ƘeYåÙ®q;6Y̑mÛä¥T>ŸWRZ¶
œ1Ó²æ§Ü]|Ë°S§ë        
‡bL÷N§‚ûeÄÄá£ä¦pÖ­·ÞúÈ#|#é|ÊSË[ýÒËôŽw4l»éG^yp½€³\Á8áN™811~UkDXõ`#~ÄI<Jüž{î8ս­`ü_
…
{¢£|ÿÝï~wsKËBYI\×%"ß÷¥”ú+y¾¯”%7?6¦e”üȨ>ø®›C½B–JcãˆSÊÈdì’k•\ˆgs1Æ<á@<WàBc´£©
 address@hidden… 
ˆŽê–`”ªVd”*™€>‚ñêdéEËê‰;`†/+¹¬X¬zؘ/y¶m\˜“¯€˧’È’_’¥T“ëÄô‹p‰±J:œ
 
€¤h’ë֖HJåûØÉd,•€&Ë¥ÖµˆÐÐÞn†$""+™Œk¡¸B1šµóÌ´,ÆcÌ4MƘƒS†3;—M—Æo.ÆÁù†•ÁŒ›¦ÏqŠ!—M½â-·ÜòðÛmm_<Ýû_¬ø}®ø§#G6oÝú?Ÿ\~ÿš³Ö¥‰œºž[oLàU­V}U¢}ïMË;;Oÿ?ú5Wô‘ú‚c؉D:~ûÛß.„B(¥<Ïó<O)¥”*ŒOäÇÇ
       ¨8>áWÏU¿T*ŽW×b13>DÉ\IÅ
+%Ë÷P©T6ñBÑÂFlC¦5Ø42,ÀÆÊÐlb|ö'áð’/•¥4nά3tAõЛË@,ׁå8ÉZ%Ä6ÊÕ£ò£U_‡‹³_ëÌùš¢<)'ò`T)address@hidden&g

2–qlipÏ4Kñ˜bÌŒ2L»sé8ŽmóDÂpìÀËÏM3ÙÒȂZ3±Æ+sGÌdÉѹö:õ˜a¦e9Ž/\]&jt^ù.ظ–L$®¿þúÇ%n}ʧ¸ùOÏÿ‚oßÞ¾e×÷{ÎÞ·ö’ÌØvÆ^(’Å,ÓÜ%zÈ6n~Ç;þý3ÿ÷<Û×ø7n>Of¢§·©Pzô³ãz\ÊD¡+–JùÂo)”V(R
ˆ5ar6`Cõ‘²Ä·†e"ÌqÄ8rh›#Éz
+ "#æêlŠËîv‰`‚È      (ZºO÷Q        
ªÒ¥$æéK€œ3ײ†Ö¬ÊÅãžïśšm­‰––Ô²öxS“SçÜqœÙs~Ôsž`]õ­ZiŲê¥'¼ÿþûŸþy³µõKgÏÿ¦»opäñS§v\yõ¾üÄÝ«ÉK
 
Þ.c<7bHò9F„5¤jÃÿ¯ÿöÊþÁÈ<¢Ñ<ÑhŽä`äÈô,ñÆ[)d)¸ˉ§ÀsC"¤cG4¹LSj‚Ô(©qÄÑD<›ˆ'âÊ2sñ¸0x

0æ8²¥%ÞҌŒÅ››-Çvš›íXÌ®°›eYVÅr‡ÓÅsÔ­üzqöSÎŽŽ«¯¾úرcÿl’êÝÜ|øgÏ®ýØGím·üàÌcÀ2a!©E¼žEV-JDŸG¹apä/&
+)'address@hidden)€1¥r¦1sò‰x6ÏÇ׶ãËÚÓ]]’(ÕىO´µ!b,³,Ë0
ÇqLÃpb±™<ÑæÖD|address@hidden,ûBwï±ã7góGϟßqå5ò…ŸÞ˜ô^b‹a, g
(i§$_ªIg"¬÷Ýs(ΕRˆð#Ï]Éͅ
uÓFˆ0DÚë,§Jɀ§£¥|€QR’hœH1Ì$âYÇÎF6™Èµµ”Š¥T[«‘J9-͉eË[Z|ƀ!Ɖx,‹Çãñ8c¬Žïr¹ŒˆÖ¬^½{÷î×_ýËIç×<u®ôk¯¼ºçÖw:«¯üّýÃnöwœä
悙5ú”|[±ˆ°jP$zA¸k9Šà¸'Iþ–fQ„ÅЌ¬™Oü] 
n`$£]y:‘%•!#åiçƒàl<ˆÇ;–eI9Í͉ŽeñööX[[<ݘˆÇ㉄f³zÀí·ß¾oß¾x[ë?œîý¯V|ç+Gä;n¹z×®½ôÒ{,gÙ
+žôݏ,_º¡£eÂzܒ(u¢ÑÉX#2       address@hidden  Eã¤&
>–ˆŸÇ†“‰¬m9­­±ö6§¹Ùikµãñ¸Ö:W¬Xá8Žaš¥â¿Zð7ûò[OüxÛM7:˗¯É.ì#æîoÛK÷
–       kÙúRßÞácìûçŒ#)Ca‘Ô-V< 
¯ºÅ»¬XdºŠð–‡.¿Ò€lrHÁƒ‚ÐyýÔQŽÔQ`<f;vÆ4eÌyûÐèIR=¤¾âo7íß?ôÚߎ­Ú¼ù«Oýü&sÁæôÞ±Íw–°G«LXí1X×
    Щ܍ÞwNžÞŸü]+‰
+àqÏ]ÍÍ+(¶ ÂRG²„É ŸÀ/”²FŽèç¾;̍½¦
ËÏüýÐÈ¿rPrÙBÄ»gH=Þ4ñ[Û[ÂzN­ÐÄFÙû¸ŽŸzIøýDwÚ±h°Fˆ03’ˆ·YÎ9¢óJÀrd¿S]À¾ê^T 
§tBŠŸÊÒ?4Œ~à:/µ´^UFwEððë¸ýtz
çpRŠŸ
+ïS±”
Ææ¶þÄIüK1÷ßbIhCöif~¶”{¿›×¦B8¯d’¯™¥¤»²C^Ñ©>ÙH
K^Ï1Â}ô£3h¾Òø+Ü€óJþ›_úO±T#C{„sE'ãóßՊá݆ýM,îÞ
++6+I
)yRÊnÛíM¸Ír{‡|G­H€…aO%¬ƒpbâ7yÆH}Û+}ÈN¤12´Gˆ0 ÀÝVì/
+™k+‰è þïNòÿYݕ¹õådڕ
D¾/r¹\±Xt††Ú^Ù?ØXjmR+šåžfêJ€‘Ô
„u.ß}Öùï2À7¼â»íøé‚"Ì1ÄûøÝüï:IØaë{zŸݼy³”ò\Ïé³Ç^n¥‰N[í¸Ë˜·*-V¼Ë_ƒX4áæHX'NZÿÙO;
 _É,Á†ˆ­"D¸PláæanþÄwo5mðÿ`æŸ>ú˜xá©RºtkÓèÕ]^«I3
+kœ7Êß-èè0+ðˆWzŸE´GˆpQŠá½VlŸôû”€&d—äóžÿs{ÿ}+½µ)HElu1„଒
+qu$^Eˆpqp?î$ÿÅ-
+ ØÌÌMçS/
G³p„%¾ê>‰W",:¿Î´¿ã•ôL»‹bO¶³~Ô1DXÏøîvÃjc‘"B„…Qo¶ì!¢) 
Ù»ÆSß8yÞ‚°ÆHýLø¿‰W",LÀډó‹y"¸ŠYþñÄË#QÇ\aÀWÝâpâ‘p!¢™±Lç 
¿à}2ñè~{̍:æ"뤀<JÎ!ÂÂc—aURçÅoBöL㿼Ä}u̅–ð©X*êŽ.bˆ{
ûi¡ëÁ:flïiüÁÉ(°áB k›a&£=ƒ"\2ì6­£R踅
9ݯƻ³QÇ\aEˆᒢÙfÃ|Ö/YÀ~ò«¼ˆú&"¬®7íçä¤åjã·6þ¸;šƒaEˆ°øЌl'·^“‘£× 
õúqk<òF„!Â"Äu¦õc1ÉO&àMÙÄÓ½‘ù8"¬–1¾œ¯ÉI!ëZn=aE–¬ˆ°"DXŒ¸ÓŽ=æO
+Y6âî‰Äsç"!+"¬šÅU28ò6f¿pĊ6EG„!ÂbÄu¦u0dzwo™H>y&²"Šaña#3©*«ÕÃê=m0Œ+B„Ňfƚ‡µBðŠ‘Ä琢މ+B„ņ]¦µ¯²µPãzÃê>˜|q0ꛈ°"DXdØÊ͓J†ÕBñ?Pâéc†ˆ²8D„!¢Bq
3ŽUQ4 k鏟ÊDÝV„‹Û
ëYËp3Å^8Ã#KVDX",.läF‘ CUàƇO9çòQ÷D„!Âb‚ØÂØ鐯Pã6/ñäI    
YaEˆ°¸°‚½Sk;72§bçrQ÷D„!ÂbB;ãçT§àmnâ‰ã\FRVDX",t0æùPËL›¸‘<•<ÅdE„!Â⁠   
ØŒã²Nr™;)þÔQ3J;V„‹WæËõ+xUꩳю舰"DX4ØÀóJ•¨Ž½êWçµ£öh´#:"¬ 
,À•Üèžâ+àÖ\òÑ7PEÖ÷ˆ°"DX<Zák²~ú¾«™5þzât´Y'"¬       
–!PÓîx~P&9lú2꧈°"DXhb¬P úŠ_c«z“OžÈ°"DX°]˜–îµœ£û¯EýV„‹ 
Ä<MKX&àÇ 
ùÝ,J•U&¬Q”5,B„_eh&•/¬ù\ü̒ß`X&¬¯0õ*ý‰,}Ç/Þ°Šè+B„7-Œ•hÕ½"ñí#K}ƒ¡Q–H×®õw]ý•înÏu5Kµ¢T¼AÁÕÀ6r£ñhHEˆp退4‹#°ñ–¾xo.»:µä
     ëCúÐ>ðžžž“'Oþä'?ééé9øÆ?Ëç㈭ž¿Ö-햰
address@hidden B„…Dcûåì•Tï‰~µð_÷H¶T§ 
|jllܹsçΝ;ï½÷Þb±xæ̙ÞÞÞÇüôéÓÇz{Ÿ:ÞAl’*åûW
+u uŒ­bFã‘ô!ÂEÏÃ:¾”êV"address@hidden<a…
‹Å¶lÙ²e˖[o½Õ󼁁îîîC‡íß¿ÿìÙ³öõ}Gˆ$bÜõ:</-äjÀm’¶1c›aF~Çæ¯#5ªT·’¯‘üÃÓ3˜‹lw.ÿy;±‚qøÿý+
…ß»Q,M!˘µ…eY+W®\¹råÞ½{…
£££}}}ûöí;xðà‰'Žž;GD,ë[R6Š³ù’¶näÆÆ-Œ”ÇêÀ%:§dŸ’çHzÕŒþ
+ý‡’cV¼}õê;n¾9‹mܸ±·çì?=üo¿u²§Y²ø¹Ø©LvÒ²Œùµ6Œöööööö«®ºJ)566Ö××÷ÒK/:tèèÑ£§OŸ0_˜&“Ò.–b%w³WKڎl#7–3#b¯K0ªÔ
   
%N+qá8ÒbÎ4F¹QR67·uuuµ´´\qÅ»víZ¹rå²eËÒé4V–üÃ7ï}âî÷~P|Œ%ÿüïïr¥§ÎüKÆXKKKKKËΝ;?ò‘LLLô÷÷<xðàÁƒGíîîÎ:ö¸eýˆ¹^"_hõJw»¢“ñÜ\ǍhGxk3Ô°’g•<ªäQT‡Î¼³|3æ+%¥lhhX·nݞõ믾úê+®¸¢©©©¡¡!™LòilÂ;¯¼òÇïú•üc?I
 &Wæœþ¢»"օiàˆét:NoÙ²åÁÌf³ÃÃï¼òÊ/¼ðÊ+¯œ={vˆ(ӔþAÞ÷ZòÇ+íêm„»
ky3á2Ç©SRô*yŽÔi„ÓÎ1,Ü3­,³”RÐÕÕµaÙ²µk×nß¾}çΝ]]]ÍÍͱX
çf6aŒµï½éÜcOlÛÐ<6a-
y544èäž{îÉçóãããGÝ¿ÿáÇO:Õ+„ݐ:oß÷<3—_[*ìt7wrӎl^7\¢>%Ï)yNÉ ã
Þ`Pà<›°¥w•’R*¥š››»ººººº6oÞ¼}ûöõë×755%“ÉX,vÁ—ÞyõÕG
c“$ØÀøs°ä¢H/¹j–H$‰ÄòåËo½õV×u3™ÌéÓ§÷ïß¿oß¾“'OöɾÃ1çˆi~¡Xl+”¶¹SÒfláF{$yEXèWògÂû9¨nÈEÎ|‹Ӓ¦)ˆ”’BÈööö՝Û¶mÛ´iÓÚµk›››‰D<glÁìL›6mz®9­†Æ@;ãÝç9mKm
…SmI¶m·µµµµµíÞ½û“Ÿüd.—>tèо}ûŽ9rìر“®ûcÓ´¤ä%wµï])ÔuÀv֊ˆ¼"\zH€~%OKÑ­Ä     
 ãÇ8º¦!R       
²,B!,ËZ±bŊ+V­ZµgϞM›6¥ÓéX,‹Åžê®ýüŽwçÿå¡"¤‡¢ÜRÓI~iÆoÃ0´ÙkÆ
<address@hidden<qìرƒÊfXÖ7‰x±´Þs¯ê&address@hidden&ü³Jåì ‡œaˆ˜IV8WJ      
á{žßÞظjÕª+VìرC»ðâñx,3Œ7{úì¸ûÎ}_y蝰RšGÇ`{sDX¿
Äãñx<ÞÑѱgÏß÷³Ùlÿ£>zìØ뇿|xhèuÛúšP,®rý»Å h†–ÐΘÈÚ‹kŽØ-Bµ
Õ-ÅkÂï&ù4ƒŽÍ†y27M“]ß÷}ß±¬U«V­ZµjëÖ­Û¶mÛ²eKKK‹ã8¶mã/[ž¹á¦›>¿móͯ7næö×O³íÍ*"¬_2LÓlnnnnnÞ¶m›”2›Í¾úê«?øÁž}öÙáá¡‚?•RZ–
…JQh; address@hidden Mк´؀ÔEŒ!´"³›ÅSÈ
address@hidden,’1nš®Bˆ³¾¿¼¥eóæÍ+W®¼òÊ+·mÛ¶råJÛ¶mÛæ‹o×çܼîZÿÕcb+cãÖ"{Cétú¦›nºñÆGFF>address@hidden'I
 kª,Â&¢O´Œñð-ڀ­Õ$؄,ùF¯Iÿˆð)y’Á1¤ó‡˜EVJ*åºn{[ۆ
–/_ÞÖÖvÛm·­Y³&;Žóæëwձ̊•8€ˆk1[[[?ûÙÏ^sÍ5ôGdF&“™¯”Ϋi¬¢„ˆÌ0'·¡†InŒèçӑ]
…°€kR‰i*¨ê:sŠ0Ԁ,` ø@
á= 0üÚ€6dá«´2æ„2j˜ˆÕªq°FV¥±1ó²MÂ1Nê ðŽIñ¨—8fm14ß÷…
ÉdrÓ¦M[·nݽ{÷UW]ÕÙÙiY–axy®k7l8‹XÅ%gñ¸Ì"ÎOž<™Ëåî»ï¾Ïþó±XlïÞ½>øàÜ]3ƒƒƒBL®H¾ïW
ýññb±p”r||\…8(ŸÏ
4aI9™ÉÈuÝl6kFp!Dæ"c5º"2Æ|ßß±cG©T:vì˜n¯O²aˆpgÖV¨r?n©DD–e±š\K$¨†X…
+Ós ¥úœ-á"address@hidden|¢ Š¶hZD€à2£…
P3HUS3l‡*jŽ#¶àä»îzd7b¿Á0ns3&”ò}ß4͍7êÝû7ß|óÚµkMÓ¼|ªëׯÿŸ&^eXôbÉ(F„µx±iÓ¦W^yeÕªU/¼ðÂÑ£G=ÚÔÔÔÒÒ2ǟ¯[·nÞxõÄ&¢írêך####žç
…œ?> 2¥T.—+
+>úè]wÝ%„èîîÞ¹s'cL111Á9'¥tãb©”Ífñ'≄Öbôåôuóù|©Tҟ=Ïs]·±±ñ™gžq§–%«!zÎy0¥
…
jZì›F´œÚcu[N'5ϱåd¥ôÿù|>™JY¶íyc¬³«ëꫯޱcÇ5×\³cǎËZ†š©TêÛ~œ°ˆhÂ5$Lj°±bxÏ=÷üå_þåý÷ßÿ¹Ï}nttôù矿ûî»/Ý/>²¦«««Vª_»¶æˆëºÏ=÷œ”òðáÃ+W®dh9Kÿ‡z’‡d®0Kª
+H)©Ô+/¿Ü?0ÐÚÒrüøñ¯|å+CCCaI°X,NLL„O266V*•&E.!FFFÂÊårZº
¤ZìííÍd2M•ÃlX£ŒOÇ_õ_?cúN’

–e¦R©?þã?¾ù曉ÄÔK¼%ÑÑÑaÛvyÁàfo–TÒËo²išýèGzè¡ë¯¿þÙgŸ}øá‡o¸á†¹Y‹:(±¥¥¥X,address@hidden(¥
+Ÿ!‚šZÉ IDAT̆Zðtm­—J¥L&#¥ÔçB¬]»ö‹_üâ†
––Nd×Ý/{®ð˜ï»a-ztvvvvvÞxãû÷ïùÁ~ð‘|ä²^]¥”ÅbQ±|ùò°éKÓVeZ‡•AUᡆ‡‡—wuêîîïï_@
   w.Ǘ-[6,y‘èïïÿô§?=22ÒÙÙù©O}êàÁƒëׯÇ%æfåŒqP ÙpiI=úe[—ðÎ;ïô<ïÞ{ïEÄGy¤§§ç²~
Ùl¶··—3–nlª%,Î9cŒóɯ0Æx¨IgΜY¿aƒRʲ¬·Æ`%¢ï~÷»ÃÃÃ+V¬øýßÿýS§N½÷½ïÅ¥"+vÕÆûa]hllܺuëöíÛ;::|ßøá‡ÃšËrÙä|tl̉Åt¬FÎ
+óT…
ªôç©låºnooïêÕ«‡††ÒéôÈÈÈ[`°>÷ÜsO<ñDGGÇwÜqäȑOúÓ¦iÂÒ¯„òµ"ˆërÁm·Ý688xûí·#âÓO?ý‹_üâò}–T*µbŊÌÄD2™´m[Û«´28ILµ¬Å¹aÔÈY
+yúôé­[·Ú¶],çåH]´|ôÑG‰hŊŽã|ò“Ÿ´m–$¨’@,É¥õì—qæO˲Þóž÷<üðÃ---ýýý_úҗ²Ùl*5idŒµ¶¶†Ý|‰D"™LB(Ôsj(i[°¦æ‘K!^uvv
+)ã±X:†À~2]æ¬Àî˜ÛµÑŠ…
T§S§Nµ··3ÆÆÆÆn½õÖ·€2øõ¯ýøñãŽãÜsÏ=íí흝°T‘õ}‚ŠµÀdDX—vìØñÂ/|øÃþÜç>wüøñýû÷/_¾<<ʳÙlØ]*•´¯*‘HäóyDÔâI˜j¶h†QÃP5>ñx<̒ÐÖÖ¦¥!m·,«©©)ˆ%¢ÆÆFÇq¼É9/
+étZksýý+V®,óU…¨Âø0a)¥°zn3ÄL&£ÉºP(ìÝ»÷r¦GŽ9pà€eYŸøÄ'ÆÇÇ?þñãÞÏTò}`
t|®Ç"ºœpÍ5×>|x×®]/¾øâóÏ?¿wïހ_8çRJ¡£Äb1Îy<×Ää8ŽfÝ *b`Δëºa‡=twwcL
+!òù|ø–
+…‚ïûaތÅbgϞ¸ï¾ûcÅR)¸Ÿ²z¶R¡ 
R!ñ*ˆlđ‘‘={öèh€3gÎLLL$“Éx<~ºt:¶ý0ƒt9µ»ôù0ˆè±Ç›˜˜¸ãŽ;’Éä
7ܐH$–,[
Ž(©*½ŽbiíÎ)Ö÷¾÷½W_}U[:Ѷí+V¬[·®³³S)¥¥ŒX,address@hidden
+LP*•8çù|>¼q‡1æyžïû


RÊx<®ÉŽs^Ž*òKN*m†>³\§I*•JúOˆ¸ê4QÚ¶]C™LæðáÃ:address@hidden
ÚaŽÂBdˆ===÷Þ{ï™Ó§-Ë*
+…B¡T*¹®f\.Žã×ï]3i]Â"¢šàÌ©
+u[[[ð˜BˆX,V#~jé2¸®aÍÍÍúTú`ð€Zö4ãøñã/¼ðBGGÇûÞ÷¾îîî«®º
+–0~ò“Ÿ4Ò¤úo”–$a%2þñ‹g€FÞ0x†HÅR
9·Tôýæövö׭[×Þޮ礶tttX–¥¿"b[[["‘ "=MÓÔs,üuáÀ0¶nݚN§;;;ÇI$

áD2ÐÞÞ^ïwï¸znçWJéxîññqMvzvss³5Ú}ž ²}‡1V,uÀ·FSS“&¯t:=>>^#—…[*¥Þxã
Û¶s¹¸ž[AEh
+È(²”Ršª« •:}útGGÇ#<ÒÐÐ000ô•®z 
#3uš'­árÎõö­Ì†¥KÍs¦2™LX÷</¦kJ©À¥«w&iá7ؤ‰ˆ¦ijêB¼þúë…
Báºë®ëîîþà?ȖvŽ³þþþs“:ˆ¿Ä’$— ëW˜ù«†SV9¢‘‰âR#cgûóp²ÇWj˜3ET 
€DY€P}Rfˆú…
ï¤RR)]O­¡­Õ²,˲mÛ¶’‰D"‰¶•njJ&“­­­:üš1ÖÕÕeš¦6÷Ԙ¢MÓdŒ†¡?Ô}†Ûo¿ý™gžB„µ¿…
cL‹uˆ¯­mîµ,g
4ïíí=zôh¡PH$Åb¦è§å¯c<address@hidden
1Ó7n4ãôéÓ˗/ÿЇ>ÐG&“        Kó‹ïûúëèè¨Voµ 
V(4õX–åyžçyŽãär9˲±±±1•J!¢ïûaÁ-­€kîSJqÎc±Xx9  
HPsâT•¾õ­oõ÷÷ëdÄ«W¯njjZÊlEDǎÛé      ¥)aME1‰|õ<3Ø
+%A¦ƒãg&$        `H)0th‚`œ”K꜖mŸõÜt{»GD€¬aP2‘ll4m§£«m‹ÆòÎN‹s…
¸¬³Së§DÔÙÙù™Ï|address@hidden" address@hidden"ÑÚÚ:wޜ£ÔyâÄ  
}“ŽãhÇëÔ©¥Ù0Põ^îp­qJD®ëj7‚þÉØØXOOϲeËÞÿþ÷ŽŽ^ÒM£—[=ôÐC~ï{ßäv0o  
K§¢jùÁ} ‘sÑ*[kHꀲ›-ÆÏNAQ•ˆÆIÀ(¹b,—ëé/yðÒ‘ 
’R9ėò‚hHH™ŽÅ6Ü°çÙ¯=ôlåd–ã$šÒÊñ”ln6m8gR*DLwtTI©¤š{Œ1˲Â
+N ÞN>RµÜ¶UÍBˆL&Ã9/‹ííí¯¾ú*„Ù
+‘ª¡*IˆBÁ
ú¿ÁÆÆFD<þü‚0ÔT©sóæÍoÂè<xðàSO=å8Ξ={úûûßÑdÏó8ð'ø‡ï,address@hidden ؈
Àä   À¬…¶K9ˆÈ`Þa6¿8Te$"š ¢P’§1"tZY¬N“#
ӓi”R^¨0ŒbªJšÉdјäeÅy!•Ô.<ít’I§buFÓ²bé4r0Æm+žN+EÚ¤¥Yrlll’‰”RˆHåô*JSX 
ì¨j.€b©ÔÞÖ¦•µÁÁÁËwtjƒissóÁƒï»ï¾¥Ê Uø\.÷óŸÿüñïÿЁ׏Müèù  
¹itéÖÛ¸õ;address@hidden)!Ž)"$€< ˆ”¿id)ÄädNtf#š6¢
ÈboúX³ÛkväNm4«¾›«ÙZêA¦f+Ä,tP ÊUe8 a"Y¡Q'ÊùSrE—¶a†áyží8,,SU
U4%«†µ&&&öìÙÓwîç<—;¶oŸÔ7dVcƒé8‰P)Uãù5M³Æ¤V5†Å7ç%®^½ºµµ5—Ë]{íµ«V­š›â¤ðÔs´þ¦Å£Ç
…³PÔìAÊ\ß÷g®Ö”÷ïßÿ£ýèì™3فAsdôVÆ?ŠüFÃi¥0ü–[¼…
/Œ-¡ŠªF°øëg¶ڑ°åÕÝ^6‘Ô,€(ƕʒ*Œ‘êWê8‰)Mg0d4"ڀŒ5 :€ÍŒqÀ8¢ 
k>›Vu¢^ñ²VÏãˆñê~›n-|C”þÚ÷Ϟ=»k×®††!¥¥Ã¬”BDU‰` 
ÄÀÊf³€¶”R===<ðÀ¾}ûc›JÞÆÿþ,Äa¥ÜÊàf–å    
1^mrãŽoÙ2°‘!æqÉ'_‚ošÅxUùâDKQã<ÙÖ
+¡÷è¤Rv"ÆX²µCª´–+kXR7|âŸø»¿û»ï~÷»ÍÍ́ö],‡††(address@hidden&`@
ü•™Lfll,`–:«çAc)e___pªÀÅ©ÃhÂþ_-$B%ÝXÏ¡}Éd2•J1Æƽ¡áüàPvx(ž/´2¾Ò0nbÆrÀÆvØÉô”y0¬Ô
        éÿg;ö­>À_rFw
þ‚ÚôÞ85ßwpÈhe¬0ô«ò0t*`B©Pž(GT:*}È#PnŔæÄŠTþ¡b¥¬æÍ5 
Z•áŒ!2€¢hj_JX5iËã‹IǸ¿*¹ýýýœóT*588¸zõj­ª 
؊hjl©”ö´º®ÛÒ҂ˆgϞ•R~Ø´o2§7«JÕc½ädçuçã¤üЯ€FªÓfåIªSߌUkë¾aŒT“`.‘AïýÅBæ¿tà‹_N#+•
+½5<KR0-·æˆ2÷<ßJ&çŒóq„˜ë¯.ljR¡¾ˆIÛ\œËÅ 0Z-°xS{!F“æB 
°¡zúPh†M+­ǙeŒ¥yâ³öyèoJ¹Mo       9
+ji*UÍ$íV7žú¹ªY6É×^¢NwäL”„—‘%
+D%¥Î“rI—
+•e5_=‘ŠUõ! address@hiddenaddress@hidden(ˆ±¢…
¡S+3‚:‚ºjÎ2d¾¯ã¼öîÝÛÛÛ»råÊI¶ 
DÎ.¥|íÕW‡GF¤”™‰‰‰LF‡¿íÚµ«¹¹ù¹çžÛ½{7c¬¯¯òù÷Æ/y@:4u§Õ¾gE©ºúK©ÊŸ±y&©³+Ô¨;-ˆOÃÚ±Ëlµ.Oýu·p37:€
Ò,ºí±%GX\¼ØASx‰&õÎÙOÓ#š­Xµ„µÎtœ²Ê՜ŸBÜ
+>@†æIi«C†”O zH *!À*f،)¢Ѐ"„€1Ä"QžX•UW¸Õ´è  Э\8O
+= address@hidden<‘БZyòÉ'ÇÙ¾}{6›=~üøjƋDÇ¥°­êç#ýÃâQ©±Å
+(address@hidden ïfÆ«£ð+˗"aÁ<…¬šö4IyÐD™kþ‚î/ôö¦•øªO«-hԂ[€…í#U0 
address@hidden"]èSÕѱïÞïe²|íkÐÑÑ¡c÷'ÙJ°qýúõ5Z!)•J¥î¼óNîôÕ¯~5Ó×÷Qf½(}p¼m€62–µ€
Q1†Øˆ¬Ь,. ¤,ÀfdSƒ`
+DªÕv«b£\´PE"µ`C…ŠŠZe
address@hidden(„IDÀà·ær´Â#.‰xÂ]Š*Ἁ?0{éý!ÓÓÁ…Ñ_]+^ôÙ¦§©w;­u©م
æ-<NÛcX(þúÀØÏþì/¾³ãk×(Æ
address@hidden,Æ8WJ%‰x<žÍfOì? ††‹gÎü+ö›v|:!³ê æHˆ2D.P9ȝÊ\æÆ‰Æ刲SjÇ
DÊV«Þ>‘xK ‰h2í
0ӌ!DŽ˜4*Ã8€7ýÇÊ×Ë4à)Qýè 9jÊNúÕƪ¯k¢;½)
+l€@qªÚ°*k\ÑÌ) address@hidden
+¹      ˜¨?'EpTIFK—°pžjéÝ"S&Ö#ˆÎ\-ˆMÑR/à` ƒ ¢Àœ†õ°.mÕAÙÀIÕêó\Ø
+먺.µ3ÞÎø^Ã.<ÙëV&¿¬x¤
address@hidden p?̌ÆÚSÍ|–g    u)"$‘%±Ö‰Y-–Í*êÒloŠòš+çT~Lя€y 
—€U¤<VvƒÕa&1¥ºÀ³        
冘äÕC$§ºžiöuŽê'˜ù{=-„§ôçÏSÇtó¤ïý^ÂúýÒR‰l(ÖCL=Ád+‘Ф(ÐÐ,TŠ¡v½%‘%ce'=Õ(SSHŒB†sœM暎)ð"-kTq'¹¨êÇ!¥z”´P”¢Î‡G´U¥±PµÖ8ÈìÉ®˜™â±OÍ¢íƑ­álÆY¢t¡œ>wAuZñ9¤>address@hidden
[kgoiS=Û§¿I-åÕ,4Õ1#¥Ò4kí̦†i¨§,yc=Ë*VßcxpÎ΀åŸ|CCkÛ?w~{{a 
V¡­mh˦~)‰H§X!)-!²D†ï[RZ¾Hø~Ú% EmI‚UR&¨ì)‹!¦MÄ$bj]cs30M'address@hidden    
¨€8 ‚B)©¬
+1¥d6ÌÎ
‘ËA¨<*´z>M([Q‹T"t¤YS§9E¦H1‚6¿J‰#‹Ú
+Ë` 
&ªgcИdœÓò<×6ÓMª¹ÖòìBVÕj„5l;-_Ќ,SŸ1ô«¹kêÓ®©3/-T­L¢qn6Šiõi˜«|address@hidden)ÖØØXoo¯iš:ÐY'H1'¨·{¸.ÀçDtNJ"%¥²„
 ¥òDLISHK®Ôò’'•dˆMJ5´´t%Ú¦‹˜¬·oqfY
gÇfÐ=ëN€òÁç}ÏalÙÚµáT¥½q7ø*¤<'DøHçé±´¡¼&Ï–Jàº2ø)Êå¡â(dˆäû²’°Ü$—‡J¯2OÉ´'04¼R&dù
&¢PªÅŒ‡˜T©Pý^֘&µi˜
+gŽ ˆ#³ª'o#ÂäOfd«Š8FÓHÐ4‘|:ñ«…M„EaéŸn(N;&ç ,“v+ÿ      ÈÆÆÆ|>ßdãÒ",Äó<Œ«”
+ªUÉÜ¡AqB
ƒs>‡˜T¢µ•AʖʑÊ”ґªƒ H‡Á´Úå+DFÔ“9…ÀŒ¡¾cÔNú$2¡‘–×R
+ÇpÑ\ôÊ-Üeü™…èÊŐÝP)åUË}®…
+é—rÖóÂ4*¥'í㈔Ë1y„„¤|>¬©b‘\/40es᎒)2®JMd~SÐjnLªç!çÅ´SzNR 
Î8ùi!btæâ9™áBXMÓpq¾©²z®þ^‰}m-†Rãããmñ¥’Ù݆²®¿2žÊT€çy:P¨¦A S€a
+3
g¤°v̓ÁŒ
address@hidden ÂIVDò?Sà\­Ña»[•‘qÚh•¹
+qÓ¿g&Ç)Bå
+ÁÌT0AêËJ|­¹Ñqœ¾¾¾Ïwօ¬2*™oÈ 5
+T§s
+Žë|Ô4W2—Ó#ðZ8£yhöê#A†õ`ó]ƒT¦ù\þO­¸óV©3ºx^ü”R%/lP©vÆjLK8îOu½Æsw,`]{¦&œb"¤:fÒÊ©g÷®Ìpoág¡t‰3òl²¤Fˆ2Dϐü¡c
&TjttDJiš¦¤ˆ°.¥p±VPú§ð‘štQZÐÓÿÆ#ýï(€/DÆs{uD0—Ô„C”*°cF}Sô4D€X=gqVëXUë” 
address@hidden;¬Ç,TÏvVçvʁ5¡0 address@hidden@ê,ÃsÏ# óL^2
eYË4-K¸îøðp.—Ó†“E„µˆQ#I͗é4Íé­ùmIyÞQ¢®Hͅrl*…
ÍãzÊ6"¡øÑ(address@hidden<¬        m®¹%A4Ny "M         0QY
«iL¯ÚûA4‚T€,address@hidden(…¾ïsγiÒ ˆ°ÞŠ3'ÄtK¼–Á›Ïy¥¯*_Ï1ÉP`yÞb`° SJ
imHĀ$gí’F
+Ô:(ƒs!±j(“:3#&\,h%°,Æ˙ÁàiEçMNŒ€08!–¹c2poº]¤°…
>ÔÖÒÆÙ°‹ˆÆËRŠ”
+‡“2HÎAD$¥—ó\×
Žú.Ò¾¥þ—äsŒë­]4‘„ué¢ô2¨ÛD„ 
+dÈæÅ+ž£ü5LŒ±‰Ê´’Ré”
RÊàTáíâˆxººˆYõ¢Eض¢†¼DTS.7ìÒä2ùt†nXK¥Rê2(T“Ãoª ¶†žf5«§
address@hidden 2¸a®ëJ)§¶™ùHøë́¹èøa֘z6ý§šâ¸“… §\%pMýnYSQ|aqc»XZ*áõ¾L½PN…
)︢…?fgX1Ñ¡è:1—ø G­Å¢s‘bY².-až/FôVí7¥XôEÚ
.³VrO›Z"éLX¿0ù¿Æ.Ê»?Žø¢1×xéØêf_n/‡eOõg‡?Ó·-ã|=Þ\¥h—8}Àà¤?Pô:Ày¥´M#b–KGX1Ï÷‘\
+­
—€°ÔÚÔRyØSKç.z,>mò§Í‹Š‚B|an¼9Ìú”´ˆŒB1÷—Ž°lÏ7…
xAq›f—°6§#º<QD(ÎmJhŠÊµŽûÞ²hà_¸®ÛâØcRqè^Ä85.™®-–çy¹\Ž*e8ç†aè]ÐoÙ'7%…
*Zö/J¥’m;}ùü’ÚAòf¢+&—ÎÖ        «±±qåʕD¤”Ôai¥’ëyžR*ؽ¬Ý«†a†ñ 2]WJEÆ«K
Q*-ËEo—RÊÿe¿tž·LXù|~thˆ™¦ÞfY¶ã8圼D:MgpݒëzRÊ 
æEp×\v=ùbH®°à•J­€ÝÖ%þ'·.¡U·L1ÿ©äÿ¯Å~ʏM€ Rg•’`‚±qnd9cœ#ÃÁ
+µqÎ5s  !ŠÅ‚RTÉKCZ.ƒÉŕ¼tŒ•ÓÑT‚â‚ß|•0Â¥)€PŒ1)eÔí¦|g)©ÚåÑã6"¶¢þZ•§QUê>ë¤ 
R(address@hidden@j€ÔyR㜏›<8Êi3‰µò¨?Tv𗷠ÀBý!ÈÊtýAә¶¬i,µéý
RÈEÛt.%aH¢!DíÖ®F±xG|i5j
+©ÂÔ}ó¬ü7ª¤]cHs¶)Ô^‘.æ‹ÊWÊ'*
+oŒèg&/J!…T¤†
>Œ8ÄY‘ó~†Çõ ÖUá£ÉDJ‘”šÖ„ë–„Aª½‰!Xæ£`H°g¢†˜
>ÃPB䔪IUa‘ÏdZ%éºndw¿pÕ¯’IiÏó¶ù'Vl_ƒXŠ„Eõ3j—™<”oÚÄlr»j¹f_°™3¸ž˜¥«} 
>)"¨ëò>WȜQ"H×6LT„IåÑSjˆ…
>S¸aŽáDåÂgHYfP€€s#¼þH)Ť”JI]>GÃ4M(¹Ñd¸´3MJè1˜çyaÍLIôfF­XÓ4µ¢™
+úíX"†ðbƒ\Š„…3T
+Ñ¥HªJ}à”d‰UùÕBµÂ”Èkºd[y“þ;MÀ¬I,¾ª­D0™ÕH’:ï‘ 
²êz^yáåÆP~˜‰HA<˜séH¼ÄçUh—ò’¥¤`5
Sày7#‹™¦É+W "ÏóD¡À‹¥R¢T¿¥ðm†DÉ%¬B!Ks
Ö-ØN‡V]_¯&Ñ,õ&f.S›”CDɐ­Â ËmäF½0YŸ¹Þ|address@hidden"
¦lº®ÉvöU¼Ì䐙:ŠÂ‰´%·¢: 
iZ–e!¢ïyžçù¾¯”žç¹nBªvE1%›¤B€f€­„»¹±Šq`¥nj’`IU%­Ë5T—¤.0µ~Uº¡r
+RAÙÊ)
)\Ò\¦—!(¯DA
+-à«.¤       M€!„T*‘Ê¥C”%陦i”
+¦$Œ­aá<×aWL8™X–>y˜’ ˆ‚è2H_¥ý9á6“Ó£rhš&Vª‰€ð=”ÕU‘¤D
+“RúRæô>J¥ÒJq‚6©\0(©¨SÈN€UŒ¯BÞÅXVÌź4òðì¬[³£›‹k—6aMO3Ó埞Ž‡pzŽ"
Ÿ'Dè5á=*ý'MÞc.QP$ŽÈ¸á1V<¥¤Ñ1©âD€å”°L© 
öTŒ¨Q)h—Ägœ1dÌàÆ9á?räµ×^cŒµ´´%d1‘ɶý IDATH„3¥1ƒÉdxL›¦™H$jÕ©Ëì¼¼õô 
õÜø„çI‚W6¸H !DJ 
`&èdƒ>Ôéú€qNŒ™–Å8"%e%ýguílDná‘Ç8g‡”R:xPÿ+„þŒ$år_0¥ZÕµ±ˆ<?N”g,©–3ÆZ‹
…Æy3²–ï',UV4°œC4\»^ãaFËÐæÉ–ÝB½o‰KXsŠpµn¶º’StºðÀߗò­È¿m¢­-    à¡”
+¬éˆh…TŒàxeÎûàWN{ë߉VO‚,kq£÷¬eÙDÔÛÛn¯›…—t)%Ñd>‰ 1›a:˜Öqì
+£•WoÇq8çA(-h„o&sÐqƒÉ¶íX,¾ád2æMÓ4ãñ8„’4%        
«º”Æ\X²&aÓ%B>“Ùč?‹¥ê‰ÖӍ®r½6ý!+ÕOôr‚€t°ÉŠØÄ+‘7’à<)ý{È̑×5‚CЂh¶3æ¶"Ɛµ`Å%Hí
VTۚŽ?ªËµÒ|fМt‘ªÂÚ5mió%MXs©ã†Ó<œ†ÎæôþJ>Á}¶ó˜_<
¤e³ÙT*ED5ÙÔ„Êí„íZÎGDÃàa©óÉ}EœsӌUΩ 
MŠUrqFQH¦:RgMãJŒ‘ïûᖺ6ÚÄÄDàͬIq'ªUàHÿ!ÊÌ>address@hidden 
«†aš&"Z–‹Å’É$çÜqœp­°1ª³KŸÃö©¹èÿ3Ž®*q>…ìzú¾Ð,Ä7
+¡ÙŽã”A^ýqº
+´…Ë%­ëNO[Z.ÂIÂê%i)ـhM;¦{:¶`V…qJ©ËŠÕR€z›aÙ{í÷|"
+l
+œs=¯Âójb¸žÃDÌö²õ¡2·u0K j…
«aoN 
Åh£©žðzz×LÔÐj[GUi©:UÈqêÍrÎjÜÿÚ:;å1kŠRÍnƞš'Ó÷}ß÷5‡ê¾ÒÞ+--†{2|˲ô½++Ødª¥?Ínº¯,ËûŒ›/
 ƒ`$Bbt1fŸ4`Ãä$ì`Ì$-cä
address@hidden,à´¥nf¦šé¢“ÊD表îÍÑté'%W‚·k¯—PK”°^h…o.wO‹®‚jCÞJØN¸Ù
+ÆW!oaÌà.ã¡
[ j´é¾úÅĐ]oZ°q!„iš£££###5sl:hyª†_j„ÅýW˲ôôa6øHÏg}Ð÷ý|>æµRúÖ      
ה
address@hidden
ܪâͬV™<•–¿lÛªyŽ©™«ï<address@hidden(e3Q«T]ÈV![¬™…Gýšú Ù¯s)
_;¤«ƒsÐHp
+KN­zeĦHôåè¢òAd$–ª„µgm|óíËtŸdü¬ʉ—ó⩼ê/gæU7š 
[$–3¾‚ñõÈ:9·³®?‘j‹Ð!àÌ:#´Ú%—Çã®ë)=O¤á_©P„z 
„§Á\â×kêNå¯É.ü9ÄFàÆҒÅTù¨FŸªÑ°‚9f½i)Ì;¾/jXOˆ\õ=+D<õÆXñDљä§’æÔÍ5<î8N|Wo!
+ívÒ½Q#´j‡Gø<b­Iè
+`ˆh¨ò–Ëe¯|¿(Är_ìÈç?ÀÌë
Ӝ6xfµ´Ö#©%i>¬7Ílº‚²9¯zŠõ)µ<       K”°ÂzJG£ÙÑX;£¤¢‘¼ΉþŒÌÉçs4žñ³c…Wu1s
±Ik€oçÆ:ÆmÄ$ ]oɟþ=Mš6pã+ÿ<“‘“•×&¥Œÿ¿½o–ä*ïû}çôkfîÌ}ì½wïîJ+­VzDB 
!L0d‡¶‘)WÛ$$))ÊÄå`§âTªœr9NA%¡HåR©rl%eãÄ 
address@hidden/ôtÏéçô¬Vàìö'•4·g¦§ûô9¿óûÞY£NuÃýHn‡Ó—(Š˜‘¢[j,ÏíçéµVqÚC
+é‹têäŽ4'SUÄÐ<˜ËŽLÙVú™œ»=—+kgÉWt
+4Ï©)TÆA‰æRÛT]Ó;Mš»‚Rjww7ÝL¾fÞN’ýŽ†Ô¸~;1£ŸRfjÚæ¤Zël—W2¾rþü_†XŸ 
YƤJt=±èM'«1Ti|TnŸšWçদC=jšÝ›cKD\Àµ3ZßØ¿æ«Rá´Þ·ÖûÖÇ2ÇýHïô¾¯¶Õ¹Ãè±Cµ?
+··Ãµ}œÔⵑõ:ËTŽr6uò§~ÚñžÝ=ø·ÑØr³e¬5$NmpÞ艔³(¥Q6©I%]ùq|éŒ#‚eÙI¼ŐGDq§&$¤ãå˜ñEQ”N²ë½`s,ö®1–qÓ¤x沌՟Ròuy¸Yõn.)address@hidden|©±­->ÉÖ֖RZq³<d{“¤‹’ž%ƒ§7³b
     «šÎR£ã<Ó{ÑΈÆ~-’k¡Ú´ó†°ü©&?ô¼Vonk^ñ,áõÅzß:½–kg¨þè[ûŸx|address@hidden
¿¸eFk2m+)@č2‰¦ÊÈx<.¬Xmô¹„‰)Dæ|ÿÂèû’.×8šq\ôÝ¢
+Æ…
áCŒ£+´6[|Rß%L”‰’Hâ*Rh8åùÏeEÅü™çÌ9[µÖ#¨PÍꋲW1©•+šðÒÒ¢É2äx7RJ¹®»à8?¢2y‚0]lSÄ1žr96®õcÖis\çR/&cÚ´蒓?ŸçV%¼¢²Ü•ïºwit×à3ß:øG~ðQ÷f!‰Šy²ÍàX[_
 ú—ÞÂ>5èû¾ïû¾eY_ܲj¦Ž¢àÉü™ã;qA­ÞA©9NH§gNN9Q²ÞtúS³‹Ö¹vx9ú“#‰…
×ÓI¾ã…
jX‹Ä9êtà1rDÆt𙑂]¢ú±EÐQðd0¡*v&º®ëºN)ӝjZÜâfÈAäÐФW5Ó¦Õ_d)ÆÅ?3Ð^¯×ï÷­sçßl99PÑohîv%Ƨ8g¢Î€Uúg¹¯£
+€48d(`ÌglxDNãff­ö”E-`]iéØâíw
¶Nuóûoú¶ú!áR‰Û%ðҝø!~1ðÇÞÒÒp8ÜÝÝMxJ‰ï&Q+Ò°ç*—Y.T*NsÄÇ “Ê«3µ­Ò½4ej&rÅ
͈}j¹ÎÃÅ»6+ˆQ†Ì¾¹V͕ŸÞWښ8ílbk΍XIß÷SºÊÌñ1#Z,address@hiddenÖ
àˆ>À6ëCð–Ö‡à3ZŸD¬Iâ퀘! 
Ž0Qú½Ò¾-ëTå2¦EÝk±&Ò÷¨šÚê‚õŽXþtwwû›þ;µk×Eɛ3ŒÞ`9ñƒ_Þ¾È+ËBˆÃéF
˜s“Pnq¦íÔ«øNZ]¹až©å2àbž’]«ÈeÃi­3VÆ7—|‹‹­Mc_•æUô­9;\üŠyÞ 
˜uü­ø.ÍðÝ"n撍+®$†°ŒªžûLΛ)„ àFáûl¯ð”s‰ú
,JM’}žDÞÁs( dX?££§•Ú,J¤1ø<‚mÙt¤'mIž%i   
tl±hQÇ}OÄѾ£PõåaM)uçæÎm3g¯ë2µ€õ²ÊÛ^µø•þá'½2T‰#¼ÅrVÃðon9²²°°pxx˜ìØ3›¥Îœ
 \–#‰ÆÞnT»Jî(%Ys2rtÃÐ
‘È)¹BÇeŸ/address@hidden<9$;’Ä>‡ÜYS¨*½’¢.œs/æ~(V…
¹ˆªëÒ¿¡ðÞn¿:êjFQÎi½ËzSë'´:«Õ.q`Á±h$Y1°      
f¡ÇƒéYBHê9Nǧ:³„gQ¿#tm!’]…
˜Á3’0=ˆ·›aˆ?z>È«pOæŒd‡ƒ­JørË7÷¾$ðÈüŸ„W旙j™ÆïWZöÐâƒ[ŸX;"„Øßߏ㢨­“UkB–©Ì\Š9“'¨ÌàZc~nˆ†Ì\z*0Ó¦ì2WY¿ÚR>=ÖLáÅìOUÃháHI„Wò\òßÒZäºîküñ¯v­â­°a™OjŸñ5ü>address@hidden
ë{"ÞÔû_¾úÃ/ß*jI'D7 ä‡5>¸uñÛG–;ooo?­£*¬èP
;2/‰u‰f-û)address@hidden&~ª><ïL†â¯ 
ÃÕÕU×uw>âõû;W“¸§Éã²þBþ–5Ö§ìWÞпɖ4ùgòÄâ²E”=EYÞ8™ ÿŸyb¿Ÿ<'õ&_SD€'7C
÷îÃýû…U1»¦7òç*ºgõ4a}Ÿ:??tÇàS{;ǏþŠ´+žM‰óø!ÿµÂÏmm?¶¼Ôívͺ.1™¶äÄL»ç&¡Œ©'kâÂ7
#Qi­rø•âZn¢§•—S0,address@hidden&T†/3Oų’êóG¢(ZYYéIyß¹ÍBÖ
ÒªÖKµ~<¯Õ¿Ã§­ûoZZ]°ˆÒR·IʁdÃ$iα1EŠåyð2þæ’ÁÉØÀ‹»Á×/ÈÞxôs/ș.|G«·¯\Àµç«}_/¸â{Všé¡û–>ráÂû6q¿e7_º'¥ü¨v>paósa
 
»Ýد‚ƒ©h»ÉC¦±T˜&߈8Z:²´åbí™"Sü¥TŒu¡{EÖ+gºÏ§S•²éºeL5>ò”VõƚZÖ3±µ—ˊ_©ÐsøÂW„-•Ã0

ú!~ìâî/JÇí°þ“(|«íP¦ÕÁ[n¸³ÿªMu×T¢‰"¥`”)ø2!O”‰Lue‚A©LÃí´„Í—ŸBôîÝ'«ëØã-Dy
Ögÿ¯þýÏö–„Õ.®[”«=±Ò=G¸uáY$ŕ3Ç¢7½véÝÿõÂçÅÒjêñɦw–Ê       
!?éö—üùþ3]áx^l´ŽÄÉ®àÝH9¥fÚÒ´ÛÔ䜫„‹B¨¹®÷«(address@hidden:öQÆ·SÔ¢«4ª–j•šS[ûÚÚZW©woï¾Ïv%èIýNà?ìx4ÃûA|ðïÐø›·ÉWØeϔÇ$~šD6SÙ^@)dqʘc’Ï<Ý[m0’7cS˜ÿìŒÿøE{Õ÷ßE¡Æp9
?±—” 
k°dȗ‚Î%¶„ÏùO/2³àŽT©Ž{Ru,Z_«]lôÅRG<Ñq„k‘u¹#wóš{ú&ï¿<ç¿ßí¦O¢ÉvÜ#ñ7Ýî›m÷?ŽG¿yxñ¢ët:¸\Œe±z8ÅåbIMΆr7‰À\qù¯}ò¹ž
  v¹e\“ZËQWmRqÉOcîkLãÅãf×ô)&•|…D¶3ŽH­u.]Q){Z“BÃÊ VñWâ†CÂtÅ
a€lpÅõŒ4ƒÉڏ·‡tŸˆ9l\˜,MOR¨’¨M„2{1Ä 
:«««Þpø··wßãtóÿŽ‚o¨ð½^w%C]Ë'Ñ6ëçú‡w¸wmxB¤…CÌo$ •4‹ªUÝ„L«Èpö-6µB2     
ZüÉPñçŸ>ú‚½1ÿY 
N,$•9‰ž¦k°~2P÷míî;„³„‹DˆHôŽO{îÓ=¾¥kmSÔ³´+µgA–<ò,¬tÅÆ–;b±+ž\ôdý˜
address@hiddenÑ6é•ÖzsÈÚ¢   
2\žçÕ7um²µŒcyNtÔ£¹éû†§<ÁÏ­2טFYq+ñë1¤¦?GºšH7jÀñö~ðľS\91Î稨™Zhæ'[Þ¦ƒfÔYϔ?Œ#fSÍ:ÞNÒpü8RßÚÝý¥½Ñ۝NÄøÏÁÈ#z¿×µË£R2q¡ç´þ°çyu÷Î%‡*#³’Ï2Ž¼ÌfšyAÄÊ“ð(©ÇÃ(þŸO
address@hidden@«$NXNnÑÀžÖC¥ƒ`´‡áˆ(Ð:6 c`›è;–Üa:/ċŽ9’ƒH{b¼hG=›7úrc 
ûîd£v-\aK
+õDµ?»§¾ãڛZ­%e…
Éð=%¥kŒ)t›´?Ö]üÑÐÿ÷JŸµ¬A0-Ër]·&CÂdX/Ç°žõH+\N­‚sÆX墛.õñx\$n)Š™cŠ|ߪ¡ŠEÅ9~£½öHþtic˜‚Ínz3É1–\Vc•žXš¶Í̡ᅥä?
 ëm–sÀü‰ñðË~½åÐl‹=©£ßX
+ÖïêíÛ0 ÆDýiì¡,^!®š-Tœt(0ÉUË`n%     
횜ò<>úúv÷–áð_D¸sZû¬È­2à<ë.p-V’ÿ`‰Ä’iYÌjZÐ,?â]Ö/„ÁX©ØdÞö   
çÁ¾‹Â¡%¤¥Ü—"±¤â‰=[0îƒô(͟2³XªÃyۄMôãNç-¬_Ôü
}êsÑø…ÑÈqœ8$—R÷=–çG/Õ›BFCqA÷™¢µ¾¤Ÿ-:"fÑZqÓbžÍ;ác»V¬}_ލ\ߍÎ
çXßtÿ!Ë÷ØÝÑ.ëù‡?áx·Ê|:]izö9­~Ùþà}K]GdAÈøß4Œ&è±=uRړ)ƒWL Úeý
FÀ•¡‚‹‡ê³OŽ¾¾Ý½þpøë!ß"¬¢[ƒ¨ªÐ é„7-rXõ}nJs>      
€GðHl"φ$”å‚÷˜ýˆ÷B>ð,‚=àŒ ¡õ“|P¸ýÔúG³üGØ
H¼Bˆw‚¾ËúÛ*üã 
ú,Âgm+î9GN_;½<¯8y|&ìt_ÚÆ®45©X±ÕZc4zÄÏ۝{¤«¤;Þ-Ò.K[ΛüñptâîNÇfÅÛédžf
Rˆ¦'™jæÄ&#Aj¯J"Ñ<
+ù¹‹á£ÏFg„Oý£‡¿ê[„ݺã_v¬\jVF{¯uõæ_çj¿fD
@2M”É…ª³ÄFN)Óì†Åh’À)§,÷!˹ 
ùÏtô{}•ø,ñöövZ#Ô,štˆÈZy95å*‰ËÌ[–åyž-ÄÝûßî¼Q:î4¤‰²]Yٕ7 
œ×ü?ìðÝ)'ÉBOnÒN-Æô›ÀÜäHâ
+E.!ȎDšG>address@hidden> 
Û¤K‘§àu¢ð´ð¡Pß7åV5mò›ô!sÏnk£)†;ò<Efs¿Ñ«»¬äõǪ³­zH8oƒsFGÛ”Ó?MÀE­ŸQê»îÅþ>!öC!ÁûÌ{ZI
¹8>Ëô$Ûm¶òÒ%¦TãñXêõz=!Žý‡ýàVgqÂ>™ÖꝑO…þڍ®”“„›ç¬TkTÉvͅmYiÞªPñ0Ð
ìùzÏ烀Ƽð®QDŠ…‚T¡¶˜Dœiµ<½Áߘä
B,K‹¦\Œš.ðÁJ`QXµƒd>²4ÙµŒg¡ÚL^ƒ}9#ZÊòj>‰f™Ï?ÎI!O¸¿¤2˜}`Äz\bÞb¾Àz;ԛ:zŽÕŽ”—mÚMÚ+ÄÅUrZX˲dMP̈¬=ÃË¢ë}¿*
Ã8¦!‚e­o#±º×rnÙž$:FrÙö(Sis¶ù"W¯*b<
+ÞÓù½Ð¶È³D­.u²1°ïG~8‰AЌáXBö#½3Â(œlÌ´ç³øҘÆÚÒ ID!˒
+9‚˜YÁjàŸ‡w1nî#yÜrÅìy[zœ~\Ewܨ,ÑVõeBG&æðúJTj\ˆ+Ib^Œ)W_בª)^®àòôEýïõ&× 
‹¿¤ÀûŒæ=Ö[¶³—œ÷EÖ!·§&ÂPó¦Ò8 ¸õà9úÈäæíŠiÄ>06Hƒw™™@ ¸`À|Iç˳d3‡2õ…
{Bù°rí¯rWôÍQ²7̓f#È4:F„g±Haî,æ;"õÉ×K÷–<*d¯ÄÕBYveS¬²B’ø5B~tÜû­Ç5˜Ò¾`†€Šk8†,4„RŠ€Hk¡
…
fbK(3úJ‰É(ɞҒc»­DJ4cA)address@hidden@´^n#±*l§$I‰¥5Ÿ§àF-îMUBªÍ*­kÆ=ߪ)˜pÖ¦0“FÉfwÜ̚cã/Ea
     
Z",‘dFi˜†é˜šn5ò9Sž%diÑA€QÒ¾X'Xés&¼c‹Õ(™õD4f>¯U:address@hidden&J“'address@hidden
 ²Ãev5{ZÑ­Bú™`ÌIÆ%Ñ$ýk™Ä…uÚvI°ám™õtjŒ˜åäú§-÷™ýlëEǶ53ÐSÚf^Ò:×`Z€× 
xԁ^u3‘ðšà‹v™l]XqÄhWÚT6í9¿LPè³;ôu4XrÑVÃeÜ°%}áêf!5;IžUUØÈCU’ê¢Ì•ü11˶’¬Ëèå²K4TQ
üñÛx3w1yªfs6JÑM^DŒ1kÂÔp<GÆ  µÆØ2bˆˆÉ à9        
ÀÆߒd6(×ðgãNsËi“}1ߐf‘ða§;address@hidden X"s´áö\£Ì{¶É·žÓju]Ij«nëgÍ#n…
”‡ÊQ/Gµšs¢Ò™Ñd.å8ßÌþÕUï›>r62<Œûâ\Â,ßfñ¯2´B­J¿bebPºH¡VTü"g+'Ÿ 
"ÝFÙʤw×pvÍ|«8©Ø%Ú 
jFܪ‡TÕ+ŒQ–¥WEßz“Í~ò­?¥àÁc×®>ˆl$(Í㪨ßÈLÔ,ûb]{OC¡ãZ’Å(dpÕlÚ<©ï˜~óò|rÛ1—,õâ
…€/˜Òræ
+hų‚Ë~…
²xWÀôº!¦Ââ,®RnF»9ãAzƒœµ-TŠjÙ:7~Ê\V†kж€V\¸*.{¬ÜàzàçœèÔàZƫ˯‡UUxh®Vºf%ÉdµÐÌ-hæ.]S³¸\ý¬ÞË~¥
 address@hidden&ɀó­I›´t/ë«4­3U¸ø     
õãìC™Y›k#¥³yÑ3&F“Þ«\£s°öX®®Ù¬"ÃjbM¨26Í$_¥Û—¹#Ñ,m´ –V&©¬hlœÔXM rvR© 
™{$WðžËÌYe2µJ´šI®îRúÀ¥L‚³·Êù'^ån°ë0WÃA)WÊRx¢f¦ÏÌs¬l¤ØÈFÖ྘«)•!~ݬ{B©ûó5Ð,æ×äy&UW>âŠ:¼LšyÑίâË?-gg-×LVž[EðâZ,ã2ÒT¥~ÎüL
…²Ÿç1©V–SÏLÅ<‡,¹´Zh¦Rµ‘Mú™2Yžƒ¬Õ‘©êzÖTJ.(q
L(ÔÄhÕÔ&ó%׿s•ÑV“õÉuQ0œ§ïTÿHJÍ+sî̵`JÕìÊøÝlX-psQ«+P›l17eyCJÎÌyÂS‚ª3v¥:› 
5BÍØky±¾²s]¶z³eų®ŠmžW¨ÞÐð$Užq®šíg´Z?,;h
¸´9_ˍYJ@<cI[&Sa÷j`¦Òþ(5vÍٓonÂÅu˜EiSrÄ{¨ù7U      «ÎƙsÕèt
‚-‘mj–Y<š«`ÅNÁµŠä܁K\>‘¸±íÕ®ó龛ü
+•cn`Qipœè÷¬ÑC7ë6ÃUd·ã9Çqö^=§ŽÉV•¯nÉR—UÆ).¢l…^–;Zê°«äYKS
l5ß¹¹˜t[¡0re”CåƒæjÓ¬-5t;address@hidden/éÂñ}¯ño裣CzS%¨4:÷Pé²z´pÆNPºË0Ï\~eÊBî
ªÐÁP¤Æ(bV6~"Íb1¬ç\C£²ÿ`4C ãæ¬åÇDÜë¸IDATÀÚD™šëc\xT°a¡éìšÑ      
•&†æáå}™¦Z˜nHšêÓ×r(V 
í/hõ+ì¿rÛú!SÀڃžŽš[7].HaþôéƒËüƒw3ª!4{­åxV¹Oð2¬(œ±_MÁmgÌc.ÉaF¹jǜ·š{•Åjg²‘ª”Ø9w/#Ü
U©úÑ'YPDÍ£,à97õèÉ͍ÊП¿­¢Ÿ•Ü_ïx²+ Ãú
[~ÒRǕވÔIÍ×'@×y½kBÖ*ÿj \5'ŠyT
+aShyW¦`=‹*È•NG*g« º"v‘«µìË S\ƒÈu1"\§åΐµ„2g
+¦¥³ÏY5s¦ŽæiddtlN¹P¯i#ÞJÖ_™§D‘
Óëÿ\èÝ£wљ°2€ew:½õõ]ð%Ʒ⢴A Â0
+/ŠN(½¡yUé
ͧ…|À²7„¬öìÒü'u3ɜ ÔùõxžÜìya•æĬìí§1¢Tk¹+rFžiÙ¢û|…
·œ2T_sRpŠšeæ”ý28k`5°’8ϾçÝJ‹­„1UŸ–ŠÙiMtˆé…ÿ¶
+¾³¶"   7v·,°rƒL$σçƤæ<ø|RÈ)
+Ý­-IR±Ê8=ôׅ°z-‰E¢5+$Ž”Ôlâˌ¥Ëè
+išÅèhÎiáٖ¾bæ`¦ên†4ÐLਿ;ƌ„F³f˜¹ljè5+ݨ#.û͟:#÷šìd¹S%Ù¡U܉îVGü‰*
address@hidden/©†FÐ2ãP¶LLvžå÷pÊT``*ÉAÅæœ"]¾Jʨ°Ó5‡ªÜ‚¹Œ‹á‚Áx."6‡öûҔwªÖ¦õr   
    ³ÉQujñ.êS“þípüÑ¥gq Æw,éª2€51▰-*:•‰&ý´tœÖúÞ#ú
ÇÌ(@åÎyöãùC\ã)ÏBEľ`_p 0b,4E€Z&1N°
:š­)7 
Z‚X¢O‚¦¬ƒP’>“¯Æð,nõñYÐ<Dy¶uÅ6Mæqhª7Ͳã4a1Ù´P6‹`Å9yz+çå?#®dá5©™Å°¨«r™½•›aqi˜ÐÀEÖ¿¦‚ÏY´{½˜(è(ºq¡eX*aa!0J)®09{½
…øP©“½ÙûÀñœ\È=ÈhÛöqhôW5Î
address@hidden"@ŠŒ¯?æw˜‹ 
"ºŽ$ÀË$ú$ㄔ`IU,‘,íxóF+àÜPT/&.Év&\9{ófwj^"&¥­0P½ÆTRFaFV97ÐÙ©        
„ÏF7nô>³hR…®j"fٚîÁŠ 
çµÞf~J«‹¬?mËovÜÁà¨mYéº[¶B§m!P¬æqÞBÖ¬µÖš­dd£0¼{åJ×#ŽdœÔl\IyÎY²`73ÎÀ¹1ž
 Fò­ðX "f°/™…$B€}ÁŠ‰c$I“"`„XDq¹OhuÂõ&Tc•D'address@hidden
+s)address@hidden:ÞlCWÓ:address@hidden'é:éýÅÀ6ë! 
Á›š¿¦£¯KzÚ±ÏI)address@hidden,:N‘NŽL%ÐØA3ˆ 4Ώ1$!¬Q„oú“O:Æ¦Q”Yzz(¢ 
,I‡ÆddÒ¾L‚j`ƒNp1N¤G4 Y‚XHºªÇÿÝ 
¸­p¬(k³éEêziãæ˜fÎ67CŠr5­ÆMó€lU™úÒ1\Ç;c*½MJбšS$`õ%æY_bކÞeÞe¾ 
EDtQŠC!ˆö¥IiÇ&
)¥ëºñN¿RX_Å×}KÛ-`lXs”. ûû{–e9r$ØŽ¿æ]åƒåœèMÿ¼¬T    
õ¯a;‚!ãÂ(^E¹à»af1~fˆÈà¾V$Æ㉕/M address@hidden&¬yÄ­w`íYEýið  ²Ò 
~‡ÈV Mî·FÂ1l‰h&``ŸõžÖ&,ˆd¯è–¦+9FÕØO—r-‘ÅK™Ä»0sÖ †Hĺ< 
&hfvµÞk”€ù¼–ÓÇÃ=ˆE¶¶ /1GÌûDÛ1…
áØuömYdI)-˒RHiÅ-/s¬tÛ±ívÕ_+jë%1,˲\×[ZZšvaö$·Äõ{ G
+»Â©¹qS7ÐPcs4Ÿ#:~d¶À…
”1)F¶Ç™¯_a¬2ätˇ#á+€úi·Arµ#(F¸d1~$X‘G%M•Õ(3ÕÔXèhb\sªç±?1WM]íô”
r%l 
O$]Þèó"ÀÍö„t§râR€ÿ³_}z]x–eF#!„çyaŽF£ÅÅEK‰2\\,4±²‚aM^.9ºµaÍmÃJߍ{=³¦xÏdÇo<µ£y5‰-&
 Ã+cÙ(ô¬¿y¾Óó<dS_.QÕÖ³FÊÄnÛõÈðƒˆ¢(îž5üåá)nuV™PÖô¬ôO¥¢uWµE¦Và²Gȅ
ÁÌìÌlYV©T‘ôôè7T;š­\MÒµ5نmۏÇÌEQlºM“´Î¢”#ãL´2%ŠÔ­ƒ6«Ä†UU<¨|H…
桛;£ëÚÁl媒%6¢9nU«”bÖav»™¢ŠÔ¯Y˜ÅÕ¥Ç&G”R§Ú 
¬R•°VÌét:é&EÑGƒžÕf+W•¬zð(0±m;'íh3-é+“>§V”庖TòÒÑ¢Ó>ŠÀâ†6¬âñ 
ÞØꃭ\€Õ§p/!P½^ïÒ¥­‹ThFþe{Êë1Uëþ…
½Z†eêvUʸR´J¯[£›íH¶rÕmæG]'uÄ!µ½ÞÑ$5-kÚ-eúà´ÒZßÐ Z†UX¨õªwãÃZëWF×uÛM 
•«PN/D±s0žíDdÛN™C°‰]Å0ÅsÆN_\bñŸ£Ñè¡ë”h]„e*aÊQçhÍÀŒ address@hidden
+—e¥ðáÒ|õÉ/¬ˆÑÝË-(,“45ÔÃcY"ÿÕGZ·k+W§Üµ¤ä3>¬i†¿mÛÅm›¨i͏Iƒ€
+¼y\k}ßâpµÓ>„:†…¹ÐŠ™oï
Ûf­\­rï*VÅp‹»1Ù¶mYVú€s§
‚à­7EV«»de¶
«ÆŒ†á‹Ú¼V®VéÛ¸wq¬ÔD‡°m[Jér£r‰yl*[eÙ¿£ð•+­îR
XÅQI²=~`µ
hhåj–W¯„Z©‡`u¤{
`.4UÊ­°ë]ÿh«V©„±30ët§
hhå*—[lsÈ°Qa®šË†ebSše‚nêøƒ6 ¡
+°
+8•+V‚fJ©X–Ú1måê¬ElXóÜÁ¤\X~#Ok–Ì«&_GÚg%•(R·¯µEj«¦       
E)Ãê¨á;N¶Z¹Êåh‹2zAåŠ)s¾˜ýüPe°-ν¥¢ðµÖØR"¥Í¸f§˜kýرýW®´ØÊU.DxýêX)…Œ+Šy
address@hidden>‰òÑL_k­Oʽ÷ß֖šn嚐׭kKe[û•”t•)¥^³¬zíÀת„Mh¬RŠUx{wô¯î=¼±
¿jåڐ» ã!vœ°ø2š!UY¾Â0|Ûñ6{¤°b\P3ÑZ+uÞ¹0zE?zˆºw•‹'[iåj•÷Əµù…
FaÍCÞ+ƒ±«cmrn=`ÝÕ;x×Ú[ÐSûd<‰|ëR$=¡oêGïYÑ×/``·#Öʵ(o>~ᩈÈÎ郆‹p¾úËU˜ÅÌöîXj«°Þ~½þ©&.¿Hc¤0Š‚ˆáŠ’®­´r­É›Žó¯?éag™TÚmÚìEFMxV¥>address@hidden|ðÎhAT÷4_ðLÀ*E«(ŠÚ/»íx·€ÕJ+/MnàC·ê`Tîƒl`fFc厐
+îëîüÔMm¼èœ*a+­´R*?s³R|ñÓgíÇöÝ­Èu'îÑi0,³ÎŒÙº².&3GQxʾãúáß¹U¯·        
Ï-`µÒʕY-ïü³·[~ðøÎÁž•ÿý¬·¥;®ëCÔ÷úÔQØCpÌ  
îè¬ë·Ð]´¡W-`µÒÊGàxÇ»ü–ÑϏ>ÿâá#ÏÙ/Ž­ƒHµ°       address@hidden 
m«•V^v!àhﺉßqCà« ÔP<Õ       ™¡Ð0I#ºeÀvR-`µÒÊ÷I\       
W6ül²ð’¤õ¶ÒJ+-`µÒJ+­´€ÕJ+­´€ÕJ+­´ÒV+­´ÒJX­´Òʵ&ÖO< 
¸ñuÚPÛVZiå/ppãƒÜ¿xÜúêW¿úÈ#<üðÃã›ßØL+­´ò—Syä‘×éOèºë®‚àþûï¿ýöÛÛAi¥•VþJ÷±'üâWÞ$íÿ­»†ö;gÆIEND®B`‚
+
+   The above is useful for playing Flash files downloaded to your local
+system.  It is also possible to play Flash files directly from the web.
+To do so, use the `-u' option along with the URL of the desired file.
+
+
+           gnash -u http://example.domain.com/flashfile.swf
+
+Note that this will not work with every website; some embedded Flash
+files are difficult to play.
+
+* Menu:
+
+* Gnash Command Line Options::
+* Gnash Interactive Control Keys::
+* User Configuration File::
+
+
+File: gnash_user.info,  Node: Gnash Command Line Options,  Next: Gnash 
Interactive Control Keys,  Up: Using Gnash
+
+2.1 Gnash Command Line Options
+==============================
+
+No options are required for  Gnash's default behavior.  However, there
+are many options that can be used to that behavior.
+
+
+       gnash <options>
+       filename.swf
+
+
+   *Gnash Command Line Options*
+
+Option                               Function
+`-h'                                  Print usage information.
+`-s factor'                           Scale the movie up/down by the
+                                     specified factor.
+`-c'                                  Produce a core file instead of
+                                     letting SDL trap it. By default,
+                                     SDL traps all signals, but
+                                     sometimes a core file is desired to
+                                     assist with debugging.
+`-d num'                              Number of milliseconds to delay in
+                                     main loop. The main loop polls
+                                     continuously with a delay to adjust
+                                     how long _Gnash_ sleeps between
+                                     iterations of the loop. The smaller
+                                     the number, the higher the CPU load
+                                     gets, and of course, the more
+                                     iterations of the main command loop.
+`-p'                                  Run full speed (no sleep) and log
+                                     frame rate.
+`-a'                                  Enable Actionscript debugging.
+`-v'                                  Be verbose; i.e. print debug
+                                     messages to stdout.
+`-va'                                 Be verbose about movie Actions.
+`-vp'                                 Be verbose about parsing the
+                                     movie. Warning: this can generate a
+                                     lot of text, and can affect the
+                                     performance of the movie you are
+                                     playing.
+`-ml bias'                            Specify the texture LOD bias
+                                     (float, default is -1) This affects
+                                     the fuzziness of small objects,
+                                     especially small text.
+`-w'                                  Write a debug log called
+                                     gnash-dbg.log. This will record of
+                                     all the debug messages whether they
+                                     are printed to the screen or not.
+`-j'                                  Specify the width of the window.
+                                     This is mostly used only by the
+                                     plugin.
+`-k'                                  Specify the height of the window.
+                                     This is mostly used only by the
+                                     plugin.
+`-1'                                  Play once; exit when/if movie
+                                     reaches the last frame. This is the
+                                     default.
+`-r [0|1|2|3]'                       ? [undisplayable block object]
+`-t sec'                              Timeout and exit after the
+                                     specified number of seconds. This
+                                     is useful for movies which repeat
+                                     themselves.
+`-g'                                  Start Gnash with a Flash debugger
+                                     console so one can set break points
+                                     or watchpoints.
+`-x id'                               This specifies the X11 window ID
+                                     to display in; this is mainly used
+                                     by plugins.
+`-b bits'                             Bit depth of output window (for
+                                     example, 16 or 32). Appropriate bit
+                                     depths depend on the renderer and
+                                     GUI library used.
+`-u url'                              Set the _url member of the root
+                                     movie. This is useful when you
+                                     download a movie and play it from a
+                                     different location. See also the -U
+                                     switch.
+`-U baseurl'                          Set base URL for this run. URLs
+                                     are resolved relative to this base.
+                                     If omitted defaults to the _url
+                                     member of the top-level movie (see
+                                     the -u switch).
+`-P entrymeter'                       Parameters are given in
+                                     ParamName=Value syntax and are
+                                     mostly useful to the plugin to
+                                     honour EMBED tags attributes or
+                                     explicit OBJECT PARAM tags. A
+                                     common use for -P is to provide
+                                     FlashVars (ie: -P
+                                     "FlashVars=home=http://www.gnu.org";).
+`-F filedescriptor'                   Use the given filedescriptor to
+                                     send requests to the host
+                                     application. This is currently only
+                                     used for GETURL requests.  The
+                                     protocol is not documented yet, and
+                                     also needs improvement.  Primary
+                                     use for this switch is for the
+                                     NPAPI plugin to properly support
+                                     javascript and target windows in
+                                     geturl requests.
+
+
+File: gnash_user.info,  Node: Gnash Interactive Control Keys,  Next: User 
Configuration File,  Prev: Gnash Command Line Options,  Up: Using Gnash
+
+2.2 Gnash Interactive Control Keys
+==================================
+
+While a movie is playing, there are several control keys. These can be
+used to step through frames, pause the playing, and control other
+actions.
+
+
+
+   *Gnash Interactive Control Keys*
+
+Key Combination                      Function
+`CTRL-Q'                              Quit/Exit.
+`CTRL-W'                              Quit/Exit.
+`ESC'                                 Quit/Exit.
+`CTRL-P'                              Toggle Pause.
+`CTRL-R   '                           Restart the movie.
+`CTRL-[ or kp-'                       Step back one frame.
+`CTRL-] or kp+'                       Step forward one frame.
+`CTRL-L'                              Force immediate redraw.
+`CTRL-T'                              Debug.  Test the set_variable()
+                                     function.
+`CTRL-G'                              Debug.  Test the get_variable()
+                                     function.
+`CTRL-M'                              Debug.  Test the call_method()
+                                     function.
+`CTRL-B'                              Toggle the background color.
+
+
+File: gnash_user.info,  Node: User Configuration File,  Prev: Gnash 
Interactive Control Keys,  Up: Using Gnash
+
+2.3 User Configuration File
+===========================
+
+Individual user preferences may be set by editing variables with the
+`.gnashrc' file:
+
+
+     ~/.gnashrc
+
+   Each line must begin with an action: either _set_ or, in the case of
+lists, also _append_.
+
+   The values in this configuration file apply only to an individual
+user, and become the default settings of the standalone player and the
+plugin.  Note that any command line options take precedence over
+`.gnashrc' settings.
+
+   The variables in the `.gnashrc' file support three types of
+arguments: on/off, numeric values, or in the case of the whitelist and
+blacklist, a list of hostnames as ASCII text.
+
+
+
+   *User Configuration Variables*
+
+Variable                 Value                    Function
+localdomain              on/off                   This value can be set
+                                                  to either _on_ or
+                                                  _off_, and controls the
+                                                  loading of external
+                                                  Flash movies over a
+                                                  network. This option
+                                                  tells Gnash to only
+                                                  load Flash movies from
+                                                  the existing domain.
+localhost                on/off                   This value can be set
+                                                  to either _on_ or
+                                                  _off_, and controls the
+                                                  loading of external
+                                                  Flash movies over a
+                                                  network. This is a
+                                                  stricter version of the
+                                                  _localdomain_ setting as
+                                                  this allows the loading
+                                                  of Flash movies to the
+                                                  same host that is
+                                                  running Gnash.
+whitelist                hostnames                This is a list of
+                                                  hostnames separated by
+                                                  spaces, or _off_ to
+                                                  disable the whitelist.
+                                                  The hostname must be
+                                                  given without a
+                                                  protocol (http://,
+                                                  https://). If this list
+                                                  is populated, Gnash
+                                                  will only load external
+                                                  Flash movies from the
+                                                  specified hosts.  The
+                                                  whitelist takes
+                                                  precedence over the
+                                                  blacklist. Because
+                                                  several files can be
+                                                  parsed in succession,
+                                                  each file can override
+                                                  or add to lists in
+                                                  other files. Use _set_
+                                                  to override all other
+                                                  lists or _append_ to
+                                                  add your blacklisted
+                                                  hosts to lists in
+                                                  previously parsed files.
+blacklist                hostnames                This is a list of
+                                                  hostnames separated by
+                                                  spaces, or _off_ to
+                                                  disable the blacklist.
+                                                  The hostname must be
+                                                  given without a
+                                                  protocol (http://,
+                                                  https://).  External
+                                                  flash movies from these
+                                                  domains are never
+                                                  allowed to load. If
+                                                  whitelist is present
+                                                  and not empty,
+                                                  blacklist is not used.
+                                                  Because several files
+                                                  can be parsed in
+                                                  succession, each file
+                                                  can override or add to
+                                                  lists in other files.
+                                                  Use _set_ to override
+                                                  all other lists or
+                                                  _append_ to add your
+                                                  blacklisted hosts to
+                                                  lists in previously
+                                                  parsed files.
+localSandboxPath         dirs                     This is a list of
+                                                  directories separated
+                                                  by spaces.  Only
+                                                  resources from these
+                                                  directories and from
+                                                  the directory portion
+                                                  of movie filename (if
+                                                  loaded from filesystem)
+                                                  are allowed to load.
+                                                  Because several files
+                                                  can be parsed in
+                                                  succession, each file
+                                                  can override or add to
+                                                  lists in other files.
+                                                  Use _set_ to override
+                                                  all other lists or
+                                                  _append_ to add new
+                                                  sandboxes.  Note that
+                                                  there's currently no
+                                                  way to *drop* the
+                                                  directory of base dir
+                                                  from the list of
+                                                  allowed local sandboxes.
+delay                    Number                   Gnash uses a
+                                                  timer-based event
+                                                  mechanism to advance
+                                                  frames at a steady
+                                                  rate. This option
+                                                  overrides the default
+                                                  setting in Gnash to
+                                                  play a movie slower or
+                                                  faster.
+verbosity                Number                   This is a numeric value
+                                                  which defines the
+                                                  default level of
+                                                  verbosity from the
+                                                  player.
+MalformedSWFVerbosity    on/off                   This value can be set
+                                                  to either _on_ or
+                                                  _off_, and controls
+                                                  whether malformed SWF
+                                                  errors should be
+                                                  printed. If set to
+                                                  true, verbosity level
+                                                  is automatically
+                                                  incremented.  Set
+                                                  `verbosity' to 0
+                                                  afterwards to hush.
+ASCodingErrorsVerbosity  on/off                   This value can be set
+                                                  to either _on_ or
+                                                  _off_, and controls
+                                                  whether ActionScript
+                                                  coding errors should be
+                                                  printed. If set to
+                                                  true, verbosity level is
+                                                  automatically
+                                                  incremented.  Set
+                                                  `verbosity' to 0
+                                                  afterwards to hush.
+debuglog                 Absolute path            This is the full path
+                                                  and name of debug
+                                                  logfile as produced by
+                                                  Gnash. On systems with
+                                                  a UNIX-type shell, a
+                                                  tilde prefix (~) will
+                                                  be expanded as by Posix
+                                                  shell requirements (see
+                                                  
http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_01).
+writelog                 on/off                   This value can be set
+                                                  to either _on_ or
+                                                  _off_, and controls
+                                                  whether a debug log is
+                                                  always written by
+                                                  Gnash, or not at all.
+sound                    on/off                   This value can be set
+                                                  to either _on_ or
+                                                  _off_, and controls the
+                                                  sound of the standalone
+                                                  player. By default
+                                                  Gnash enables playing
+                                                  the sound in any Flash
+                                                  movie.
+pluginsound              on/off                   This value can be set
+                                                  to either _on_ or
+                                                  _off_, and controls the
+                                                  sound of the player
+                                                  when running as a
+                                                  browser plugin. By
+                                                  default, sound is
+                                                  enabled when using
+                                                  Gnash as a browser
+                                                  plugin.
+EnableExtensions         on/off                   Set to _on_ to enable
+                                                  extensions. This option
+                                                  is _off_ by default
+StartStopped             on/off                   Set to _on_ to have the
+                                                  GUI start in "stop"
+                                                  mode. This is useful in
+                                                  particular for the
+                                                  plugin, so you have to
+                                                  explicitly start any
+                                                  movie on a webpage.
+                                                  This option is _off_ by
+                                                  default.
+flashVersionString       string                   Set the string returned
+                                                  by $version and
+                                                  System.capabilities.version.
+                                                  Useful to get around
+                                                  some flash version
+                                                  detection movies.  Note
+                                                  that the version
+                                                  advertised by the
+                                                  plugin is NOT affected
+                                                  by this setting,
+                                                  instead you need to set
+                                                  the GNASH_FLASH_VERSION
+                                                  environment variable for
+                                                  the latter (which
+                                                  doesn't affect $version
+                                                  and
+                                                  System.capabilities.version).
+flashSystemOS            string                   The string that Gnash
+                                                  should return for
+                                                  System.capabilities.OS
+flashSystemManufacturer  string                   The string that Gnash
+                                                  should return for
+                                                  
System.capabilities.manufacturer
+StreamsTimeout           double                    Set the number of
+                                                  seconds after which
+                                                  streams download time
+                                                  out. Note that timeouts
+                                                  only occurs after the
+                                                  given number of seconds
+                                                  passed w/out anything
+                                                  was received.
+insecureSSL              on/off                   If set to _on_, no
+                                                  verification of SSL
+                                                  connections is
+                                                  performed. This means
+                                                  that, although the
+                                                  connection is
+                                                  encrypted, the server
+                                                  certificate could be
+                                                  invalid, may not belong
+                                                  to the host, or both.
+                                                  Equivalent to curl
+                                                  -insecure. By default,
+                                                  this option is _off_ and
+                                                  connections will fail
+                                                  when a host cannot be
+                                                  verified.
+SOLsafedir               Absolute path            The full path to a
+                                                  directory where Gnash
+                                                  should store Shared
+                                                  Object files ("flash
+                                                  cookies") if they are
+                                                  enabled.
+SOLreadonly              on/off                   If set to _on_, Gnash
+                                                  will not write Shared
+                                                  Object files.
+URLOpenerFormat          string                    Set the format of an
+                                                  url opener command. The
+                                                  %u label would be
+                                                  substituted by the
+                                                  actual url to be opened.
+                                                  Examples: ?
+                                                  [undisplayable block
+                                                  object]
+
+   The following example `.gnashrc' file allows a user to only play
+Flash files saved locally to the machine on which Gnash is running.  It
+also specifically forbids content from doubleclick.com and
+mochibot.com.  Gnash's error output is set to be fairly verbose, with
+the debug log placed in a location convenient for the user.  Finally,
+sound is turned on for both the standalone player and the plugin.
+
+
+
+         #
+         # Gnash client options
+         #
+
+         # Only access remote content from our local domain
+         set localdomain on
+
+         # Only access content from our local host
+         set localhost on
+
+         # These sites are OK
+         # uncommenting the following line will allow load of external
+         # movies *only* from the specified hosts.
+         #set whitelist www.doonesbury.com www.cnn.com www.9news.com
+
+         # Disable whitelists set in any other gnashrc files, because
+         # these could override our blacklist.
+         set whitelist off
+
+         # Don't access content from these sites
+         set blacklist www.doubleclick.com mochibot.com
+
+         # The delay between timer interrupts
+         set delay 50
+
+         # The default verbosity level
+         set verbosity 1
+
+         # Be verbose about malformed SWF
+         set MalformedSWFVerbosity true
+
+         # Be verbose about AS coding errors
+         set ASCodingErrorsVerbosity true
+
+         # The full path to the debug log
+         set debuglog ~/gnash-dbg.log
+
+         # Write a debug log to disk
+         set writelog on
+
+         # Enable or Disable sound for the standalone player
+         set sound on
+
+         # Enable or Disable sound for the standalone player
+         set pluginsound on
+
+         # Make sure SSL connections are always verified
+         set insecureSSL off
+
+         # Use firefox to open urls
+         set urlOpenerFormat firefox -remote 'openurl(%u)'
+
+
+File: gnash_user.info,  Node: Installing and Configuring Gnash,  Next: 
Reporting Bugs,  Prev: Using Gnash,  Up: Top
+
+3 Installing and Configuring Gnash
+**********************************
+
+There are two ways of installing Gnash: [Cross reference to
+non-existant ID "packagemanager"] or installing from source (*note
+Getting the Source::).
+
+* Menu:
+
+* Requirements::
+* Downloading Gnash::
+
+
+File: gnash_user.info,  Node: Requirements,  Next: Downloading Gnash,  Up: 
Installing and Configuring Gnash
+
+3.1 Requirements
+================
+
+Before downloading and installing Gnash, check that your hardware and
+software meet the following requirements.
+
+* Menu:
+
+* Hardware Requirements::
+* Software Requirements::
+
+
+File: gnash_user.info,  Node: Hardware Requirements,  Next: Software 
Requirements,  Up: Requirements
+
+3.1.1 Hardware Requirements
+---------------------------
+
+One of the goals of Gnash is to make it portable enough to install on
+small devices.  As a result, the hardware requirements are minimal.
+Gnash has even run on an ARM9 at 200 MHz with 32 MB of RAM! (It ran
+without video support in this case.) While firm minimums have not been
+established, Gnash has been shown to run successfully with the
+following:
+
+   * 336 MHz processor
+
+   * 128 MB RAM
+
+   * Video -- Gnash will run on anything from a raw frame buffer up to
+     an OpenGL-supporting graphics card.
+
+   The following table provides a list of the Operating System/CPU
+combinations on which Gnash has been shown to run.
+
+
+
+   *Build Matrix*
+
+Operating System                     Processor
+OpenBSD, FreeBSD, NetBSD             Alpha AXP, AMD64, i386, Itanium,
+                                     PC-98, PowerPC, SPARC64
+Debian                               Alpha AXP, AMD64, ARM, hppa, i386,
+                                     Itanium, MIPS, PowerPC, IBM zSeries
+                                     (s390), SPARC
+Fedora                               x86-32, x86-64, Geode GX, Geode LX
+Gentoo                               AMD64, PowerPC, SPARC, x86
+Maemo 2.1                            i385, ARMv5t
+Scratchbox                           i386, ARMv5t
+Access Linux Platform                i386, ARMv5t
+Mandriva                             i386, MIPS
+Open Embedded, OpenMoko, Poky        ARM
+YellowDog Linux 6                    PowerPC, PS3
+OpenSuSE 10                          i586, x86-64
+Red Hat Enterprise, CentOS           x86-32, x86-64
+Ubuntu                               x86-64, x86-32, PowerPC, UltraSPARC
+Haiku                                i386
+Syllable                             i386
+Irix 6.5                             MIPS R10K
+Darwin (MacOS X)                     PowerPC and x86-32
+Windows XP, Windows Vista            x86-32
+
+
+File: gnash_user.info,  Node: Software Requirements,  Prev: Hardware 
Requirements,  Up: Requirements
+
+3.1.2 Software Requirements
+---------------------------
+
+The 0.8.2 release of Gnash has been designed to run on UNIX/Linux
+variants, and has been run on most of the free ones.  However, Gnash
+has successfully run on Windows, Darwin (Mac OS X), Irix, Solaris,
+BeOs, OS/2, and Haiku.  Gnash has also run on the following 64-bit
+systems: PowerPC, Itanium, UltraSparc, and AMD64.  For now, it is
+important to be sure that the following code, testing, and
+documentation dependencies are met before installing Gnash.  If you
+will be downloading Gnash with a package manager, these dependencies
+may be solved by the package manager.  Otherwise, you must first verify
+that each of these dependencies are installed on the target system.
+
+
+File: gnash_user.info,  Node: Downloading Gnash,  Prev: Requirements,  Up: 
Installing and Configuring Gnash
+
+3.2 Downloading Gnash
+=====================
+
+There are two ways to download Gnash: using a package manager or by
+downloading the source code and building it on your system. If
+possible, it is advisable to use a package manager to download Gnash,
+as it will resolve dependencies for you.  However, if you want the very
+latest features, or a Gnash package is not available for your operating
+system, it is better to download the source code and build Gnash
+locally.
+
+* Menu:
+
+* Getting the Source::
+* Getting Codec Support::
+
+
+File: gnash_user.info,  Node: Getting the Source,  Next: Getting Codec 
Support,  Up: Downloading Gnash
+
+3.2.1 Getting the Source
+------------------------
+
+Gnash is available as a release tarball (*note Releases::), a
+development checkout (*note Repository::), or a development snapshot
+(*note Snapshot::).
+
+* Menu:
+
+* Releases::
+* Snapshot::
+* Repository::
+
+
+File: gnash_user.info,  Node: Releases,  Next: Snapshot,  Up: Getting the 
Source
+
+3.2.1.1 Releases
+................
+
+The source can be acquired from a GNU FTP Mirror
+(http://www.gnu.org/prep/ftp.html).  The release version is intended to
+be stable, and is probably your best choice if the release took place
+recently.  If you need features or fixes which were introduced after
+the release, consider a CVS checkout (*note Repository::) or the daily
+snapshot (*note Snapshot::).
+
+   To download, select a mirror near you, then choose the `gnash'
+directory.
+
+
+File: gnash_user.info,  Node: Snapshot,  Next: Repository,  Prev: Releases,  
Up: Getting the Source
+
+3.2.1.2 Snapshot
+................
+
+The daily development snapshot can be downloaded from
+http://www.gnashdev.org/dev_snapshots/
+(http://www.gnashdev.org/dev_snapshots/).  This is the best option if
+you need changes which were introduced after the last release (*note
+Releases::) of Gnash, but are unable to download directly from the
+repository. (*note Repository::)
+
+
+File: gnash_user.info,  Node: Repository,  Prev: Snapshot,  Up: Getting the 
Source
+
+3.2.1.3 Repository
+..................
+
+The latest development sources are available via anonymous CVS.  This
+is recommended if you need features or bug fixes which were introduced
+after the last release (*note Releases::).  Look at the daily snapshot
+(*note Snapshot::) if you experience difficulty accessing the
+repository.
+
+   To download via anonymous CVS, first set the environment variable
+`CVS_RSH' to `ssh', then check out the source code.  The example below
+uses the GNU Bourne-Again shell (bash):
+
+
+           export CVS_RSH="ssh"
+           cvs -z3 -d:pserver:address@hidden:/sources/gnash co gnash
+
+   It is also possible to browse the repository
+`http://cvs.savannah.gnu.org/viewcvs/gnash/?root=gnash' on the web.
+
+
+File: gnash_user.info,  Node: Getting Codec Support,  Prev: Getting the 
Source,  Up: Downloading Gnash
+
+3.2.2 Getting Codec Support
+---------------------------
+
+Gnash requires codec support to handle audio and video correctly. Some
+platforms like Ubuntu or Fedora under the GNOME desktop will
+automatically notify the user that the proper codecs aren't installed,
+and pop up a dialog box to let the user download the codecs Gnash needs
+to make site like YouTube work correctly. If you have installed Gnash on
+any other platform, and video doesn't work, it's highly likely you need
+to install the proper codecs. For most platforms, this is the
+Gstreamer-ffmpeg plugin, available from your distributions repository.
+
+
+File: gnash_user.info,  Node: Reporting Bugs,  Next: Glossary,  Prev: 
Installing and Configuring Gnash,  Up: Top
+
+4 Reporting Bugs
+****************
+
+The Gnash project relies on the community of Gnash users to test the
+player, feedback is critical to any successful project.  Not only does
+it let us know that people use Gnash, but it helps us understand the
+community's needs. Gnash uses a bug tracker on
+`http://savannah.gnu.org' to manage these reports.
+
+   When filing a report, please follow the guidelines below. The better
+your bug report is, the easier it will be for the developers to address
+the issue. Bug reports without enough information will initially be
+asked to provide this information anyway. Adding critical details, like
+the Operating System you are on, it's version, and any relevant error
+messages from Gnash that you get.
+
+* Menu:
+
+* Get a Fresh Binary Package::
+* Determine if the bug was previously reported::
+* Review the bug writing guidelines::
+* Filing a bug report::
+
+
+File: gnash_user.info,  Node: Get a Fresh Binary Package,  Next: Determine if 
the bug was previously reported,  Up: Reporting Bugs
+
+4.1 Get a Fresh Binary Package
+==============================
+
+For starters, it's a good idea to obtain a copy of the latest snapshot.
+Although Gnash is primarily released as source, the Gnash build
+infrastructure allows the automated building of binary packages. Often
+the version of Gnash as packaged by a GNU/Linux or BSD distribution is
+based on the last official release, which could be months out of date.
+It is helpful if this is the case to try a newer packaged build of
+Gnash.
+
+   You can get a fresh binary package of Gnash, as well as recent
+source packages from http://www.getgnash.org/packages
+(http://www.getgnash.org/packages/).
+
+
+File: gnash_user.info,  Node: Determine if the bug was previously reported,  
Next: Review the bug writing guidelines,  Prev: Get a Fresh Binary Package,  
Up: Reporting Bugs
+
+4.2 Determine if the bug was previously reported
+================================================
+
+Search the Gnash bug tracker
+(https://savannah.gnu.org/bugs/?group=gnash) to see if the bug has
+already been identified.
+
+   If the issue has already been reported, you should not file a bug
+report.  However, you may add some additional information to the ticket
+if you feel that it will be beneficial to the developers.  For
+instance, if someone reported a memory issue on Ubuntu GNU/Linux, and
+you noticed the same problem on OpenBSD, your stacktrace would be
+useful.  Conversely, adding a "me too" note to a feature request is not
+helpful.
+
+
+File: gnash_user.info,  Node: Review the bug writing guidelines,  Next: Filing 
a bug report,  Prev: Determine if the bug was previously reported,  Up: 
Reporting Bugs
+
+4.3 Review the bug writing guidelines
+=====================================
+
+A good bug report should be precise, explicit, and discrete.  This
+means that there should be just one bug per ticket, and that a ticket
+should contain the following information:
+
+   * An overview of the problem;
+
+   * Instructions on how to replicate the bug;
+
+   * A description of what happened when you performed the steps to
+     replicate the bug, and what you expected to happen;
+
+   * Your system information: operating system name and version, as
+     well as the versions of major development dependencies;
+
+   * The release number or checkout timestamp for the version of Gnash
+     where you observe the problem;
+
+   * The file `config.log', which should be attached as a file;
+
+   * A descriptive title.
+
+   Include any additional information that you feel might be useful to
+the developers.
+
+
+File: gnash_user.info,  Node: Filing a bug report,  Prev: Review the bug 
writing guidelines,  Up: Reporting Bugs
+
+4.4 Filing a bug report
+=======================
+
+After following the steps described above, you can file a bug report at
+`https://savannah.gnu.org/bugs/?group=gnash'.
+
+
+File: gnash_user.info,  Node: Glossary,  Next: Authors,  Prev: Reporting Bugs, 
 Up: Top
+
+5 Glossary
+**********
+
+
+
+A
+=
+
+ActionScript
+     _ActionScript_, or "AS", is the scripting language for _Flash_
+     applications. It is compiled to bytecode, which is a subset of the
+     _SWF_ format.
+
+AGG
+     AGG is the AntiGrain 2D graphics library, which can be used as a
+     renderer in Gnash. It is faster than OpenGL on systems without
+     hardware graphics acceleration. As of Gnash version 0.8.1 it is
+     the more feature complete renderer.
+
+AMF
+     _AMF_ is the object format used by _Flash_ for shared objects and
+     streaming video.
+
+as_environment
+     In Gnash terms, the as_environment, or ActionScript execution
+     environment, contains a stack of objects, characters and values
+     which are in the immediate environment of the current fn_call.
+     Please refer to the Gnash ActionScript manual for more information.
+
+
+C
+=
+
+Cairo
+     Cairo is a 2D graphics library with support for multiple output
+     devices. Can be used as a renderer in Gnash. A useful feature of
+     Cairo is that it will automatically use graphic card acceleration
+     when available. Cairo has an experimental OpenGL backend.
+
+
+D
+=
+
+DejaGNU
+     DejaGNU is a framework for testing software.
+
+DocBook
+     _DocBook_ is a markup language for presentation-neutral
+     documentation, such as manuals.
+
+Doxygen
+     _Doxygen_ is a documentation generator for for multiple languages
+     which uses comments in the source code to create stand-alone
+     documentation.
+
+Drupal
+     Drupal is a CMS/blog system used for the main Gnash website.
+
+
+E
+=
+
+extensions
+     A Gnash _extension_ is a plugin (not a browser plugin) which
+     implements additional functionality beyond what is covered by
+     _Flash_ specification. These are shared libraries which are loaded
+     at runtime.
+
+
+F
+=
+
+ffmpeg
+     ffmpeg is an audio and video decoding library which can be used by
+     Gnash to decode mp3, FLV and other media types.
+
+Flash
+     The term _Flash_ is used to describe both the Adobe IDE for
+     creating _SWF_ files, and the technology itself. Flash is a
+     trademarked term of Adobe's, we prfer to use SWF to refer to the
+     files themselves, as well as the format, instead of flash(tm).
+
+FLV
+     FLV is a proprietary file format used to deliver Flash video. It
+     is used by YouTube, among others.
+
+FLTK
+     FLTK, or the 'Fast Light ToolKit', is a portable GUI library which
+     is intended to replace the SDL GUI. Currently in Gnash, FLTK may
+     be used with the Cairo and AGG renderers. FLTK has an experimental
+     Cairo backend.
+
+FrameBuffer
+     In Gnash, this is a GUI library that outputs directly to the Linux
+     Frame Buffer and so does not need a window system to run. This
+     makes it particularly suitable for use on small devices.
+
+
+G
+=
+
+Gnash
+     Gnash is the GNU Flash movie player.
+
+Gstreamer
+     Gstreamer is a multimedia framework which Gnash can use for
+     decoding audio and video. Gstreamer itself cannot decode anything,
+     so it needs some appropriate decoding-plugins to do the work for
+     it. Remember to install them if you use Gnash with Gstreamer
+     enabled. To get the best out of Gnashs gstreamer-parts, it is
+     recommended to install the gst-plugins-good, gst-plugins-good and
+     gst-ffmpeg plugins packages.
+
+GTK
+     GTK is the GIMP Toolkit GUI library. It is one of the GUI options
+     for Gnash. As of Gnash 0.7.2, this is the more performant and
+     feature-rich choice. GTK uses Cairo internally.
+
+GUI
+     A _GUI_ is a "graphical user interface". In Gnash, the GUI library
+     provides a wrapper for mouse and keyboard events, menus, windowing
+     (where available) and a drawing area.  You must choose a GUI
+     library during the configuration stage of building Gnash.
+
+
+K
+=
+
+Klash
+     _Klash_ was the name given to the stand-alone instance of Gnash
+     which used the KDE GUI.  It has been replaced with an
+     implementation using Qt.  Some documentation may incorrectly refer
+     to the Konqueror plugin as _Klash_.  The plugin was renamed
+     _Kpart_.
+
+Kpart
+     _Kpart_ is a plugin for Konqueror which is enabled with the [Cross
+     reference to non-existant ID "features"] _-enable-klash_.
+
+
+L
+=
+
+libmad
+     libmad is a mp3-decoding library, which can be used by Gnash's
+     sound handler to decode mp3-audio.
+
+
+M
+=
+
+Mesa
+     _Mesa_ is the free software OpenGL implementation.  Gnash
+     documentation will sometimes use the glossterms 'OpenGL' and
+     'Mesa' interchangeably.
+
+Ming
+     Ming is a C library for generating SWF ("Flash") format movies,
+     plus a set of wrappers for using the library. It is used by the
+     Gnash project for generating testcases.
+
+
+N
+=
+
+Nellymoser
+     Nellymoser is a proprietary audio codec introduced in the Flash
+     Player in version 6. For more information, please see Wikipedia.
+
+
+O
+=
+
+OpenGL
+     OpenGL (Open Graphics Library) is a standard specification
+     defining a cross-language cross-platform API for writing
+     applications that produce 3D and 2D computer graphics. Accelerated
+     graphic cards usually provide OpenGL at the hardware level. Please
+     refer to Wikipedia for availability of free software OpenGL
+     hardware drivers. A free software implementation of the API is
+     available (Mesa). OpenGL can be used as a renderer in Gnash.
+
+ORM
+     ORM is a system for ensuring the rights of the creator over a
+     piece of digital content. It is more passive than DRM.
+
+
+P
+=
+
+plugin
+     The glossterm _plugin_ is used in Gnash to refer to both any Gnash
+     browser plugin, as well as the Firefox plugin specifically.  The
+     Konqueror plugin is called _Kpart_.  Sometimes, the term is used in
+     an even more generic sense to refer to _extensions_.
+
+
+Q
+=
+
+Qt
+     Qt is a GUI library which is used by KDE. The plugin version of
+     Gnash using this GUI library is Kpart. The standalone version is
+     enabled with -enable-gui=kde.
+
+
+R
+=
+
+renderer
+     The _renderer_ is the subsystem of Gnash which renders content.
+     Only one renderer may be used; it is selected at configuration
+     time if building from source.
+
+     Available renderers are: AGG, OpenGL, and Cairo. In terms of
+     feature completeness, AGG comes first; followed by OpenGL and then
+     Cairo. In most cases, AGG is preferred for performance, except
+     cases where it is beneficial to have hardware accelerated
+     rendering (for example, when you have a very slow CPU but a very
+     fast graphics card). In this case OpenGL should be used.
+
+RTMP
+     RTMP is the Real Time Messaging Protocol primarily used with to
+     stream audio and video over the internet to the Flash Player
+     client.
+
+RTMPT
+     RTMPT is basically a HTTP wrapper around the RTMP protocol that is
+     sent using POST requests from the client to the server. Because of
+     the non-persistent nature of HTTP connections, RTMPT requires the
+     clients to poll for updates periodically in order to get notified
+     about events that are generated by the server or other clients.
+
+RTMPTS
+     RTMPTS is the same as RTMPT, but instead of being a HTTP wrapper,
+     it is a HTTP SSL wrapper (HTTP secure connection).
+
+
+S
+=
+
+SDL
+     Simple DirectMedia Layer is a cross-platform multimedia free
+     software library that creates an abstraction over various
+     platforms' graphics, sound, and input APIs. Gnash can use it as a
+     GUI and/or as a sound handler. Note that the two usages are
+     independent of each other: you can use it for a task and not for
+     the other if you wish. At time or writing (2007-01-11) the SDL GUI
+     lacks menus and a performant input event architecture; the SDL
+     sound handler is the most feature rich, supporting Video through
+     ffmpeg.
+
+sound handler
+     The _sound handler_ is the part of Gnash which handles both event
+     sounds and streaming sound.  Audio from external sources are also
+     handled through the sound handler when SDL is used.  The sound
+     handler must be selected during configuration of Gnash when
+     compiling.
+
+     There are currently two sound handlers available in Gnash: SDL and
+     Gstreamer.  The SDL sound handler uses ffmpeg or libmad for
+     decoding mp3-audio, although it can be built without mp3-support.
+     The Gstreamer-sound handler uses the available plugins to decode
+     the audio, so it might not work if some important plugins are
+     missing.  The SDL sound handler is recommended.
+
+sprite
+     A sprite is an element of an Flash Movie. It's basically a Movie
+     inside another, having its own timeline.
+
+Stage
+     The visible area of a Flash movie. The name derives from a
+     theater analogy. Graphical elements are referred to as characters.
+
+SWF
+     _SWF_ is the file format for _Flash_ movies.
+
+
+T
+=
+
+Tamarin
+     The Tamarin project seeks to create an open source implementation
+     of the ECMAScript 4th edition language specification. The code is
+     used by Adobe as part of the ActionScript Virtual Machine within
+     the Adobe Flash Player. Gnash does not use Tamarin; it already has
+     a working virtual server and most ActionScript classes are
+     implemented.
+
+timeline
+     In Flash technology, a timeline is a sequence of "frames". A
+     single Flash movie can contain multiple timelines, each
+     independently controlled (STOP or PLAY). At regular intervals
+     (FPS) the player advances all timelines in PLAY mode to the next
+     frame, looping back when last frame is reached.
+
+
+X
+=
+
+X.org
+     X.org is the most commonly used X server; it was forked from
+     XFree86.
+
+
+File: gnash_user.info,  Node: Authors,  Next: GNU Free Documentation License,  
Prev: Glossary,  Up: Top
+
+6 Authors
+*********
+
+Gnash is maintained by Rob Savoye. Other active developers are: Sandro
+Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad Musick, Benjamin
+Wolsey, and Zou Lunkai. Please send all comments and suggestions to
+<address@hidden>. Past and sometimes current developers are Tomas
+Groth and Markus Gothe.
+
+   Gnash was initially derived from GameSWF.  GameSWF is maintained by
+Thatcher Ulrich <address@hidden>.  The following people contributed to
+GameSWF: Mike Shaver, Thierry Berger-Perrin, Ignacio Castan~o, Willem
+Kokke, Vitaly Alexeev, Alexander Streit, and Rob Savoye.
+
+
+File: gnash_user.info,  Node: GNU Free Documentation License,  Prev: Authors,  
Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+* Menu:
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_user.info,  Node: 0_ PREAMBLE,  Next: 1_ APPLICABILITY AND 
DEFINITIONS,  Up: GNU Free Documentation License
+
+A.1 0. PREAMBLE
+===============
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone the
+effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or non-commercially. Secondarily,
+this License preserves for the author and publisher a way to get credit
+for their work, while not being considered responsible for
+modifications made by others.
+
+   This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft license
+designed for free software.
+
+   We have designed this License in order to use it for manuals for
+free software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals; it
+can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+File: gnash_user.info,  Node: 1_ APPLICABILITY AND DEFINITIONS,  Next: 2_ 
VERBATIM COPYING,  Prev: 0_ PREAMBLE,  Up: GNU Free Documentation License
+
+A.2 1. APPLICABILITY AND DEFINITIONS
+====================================
+
+This License applies to any manual or other work that contains a notice
+placed by the copyright holder saying it can be distributed under the
+terms of this License. The "Document", below, refers to any such manual
+or work. Any member of the public is a licensee, and is addressed as
+"you".
+
+   A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+   A "Secondary Section" is a named appendix or a front-matter section
+of the Document (*note fdl-document::) that deals exclusively with the
+relationship of the publishers or authors of the Document to the
+Document's overall subject (or to related matters) and contains nothing
+that could fall directly within that overall subject. (For example, if
+the Document is in part a textbook of mathematics, a Secondary Section
+may not explain any mathematics.)  The relationship could be a matter
+of historical connection with the subject or with related matters, or of
+legal, commercial, philosophical, ethical or political position
+regarding them.
+
+   The "Invariant Sections" are certain  Secondary Sections (*note
+fdl-secondary::) whose titles are designated, as being those of
+Invariant Sections, in the notice that says that the Document (*note
+fdl-document::) is released under this License.
+
+   The "Cover Texts" are certain short passages of text that are
+listed, as Front-Cover Texts or Back-Cover Texts, in the notice that
+says that the Document (*note fdl-document::) is released under this
+License.
+
+   A "Transparent" copy of the  Document (*note fdl-document::) means a
+machine-readable copy, represented in a format whose specification is
+available to the general public, whose contents can be viewed and edited
+directly and straightforwardly with generic text editors or (for images
+composed of pixels) generic paint programs or (for drawings) some
+widely available drawing editor, and that is suitable for input to text
+formatters or for automatic translation to a variety of formats
+suitable for input to text formatters. A copy made in an otherwise
+Transparent file format whose markup has been designed to thwart or
+discourage subsequent modification by readers is not Transparent.  A
+copy that is not "Transparent" is called "Opaque".
+
+   Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML or
+XML using a publicly available DTD, and standard-conforming simple HTML
+designed for human modification. Opaque formats include PostScript, PDF,
+proprietary formats that can be read and edited only by proprietary
+word processors, SGML or XML for which the DTD and/or processing tools
+are not generally available, and the machine-generated HTML produced by
+some word processors for output purposes only.
+
+   The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in formats
+which do not have any title page as such, "Title Page" means the text
+near the most prominent appearance of the work's title, preceding the
+beginning of the body of the text.
+
+
+File: gnash_user.info,  Node: 2_ VERBATIM COPYING,  Next: 3_ COPYING IN 
QUANTITY,  Prev: 1_ APPLICABILITY AND DEFINITIONS,  Up: GNU Free Documentation 
License
+
+A.3 2. VERBATIM COPYING
+=======================
+
+You may copy and distribute the Document (*note fdl-document::) in any
+medium, either commercially or noncommercially, provided that this
+License, the copyright notices, and the license notice saying this
+License applies to the Document are reproduced in all copies, and that
+you add no other conditions whatsoever to those of this License. You
+may not use technical measures to obstruct or control the reading or
+further copying of the copies you make or distribute. However, you may
+accept compensation in exchange for copies. If you distribute a large
+enough number of copies you must also follow the conditions in section
+3 (*note 3_ COPYING IN QUANTITY::).
+
+   You may also lend copies, under the same conditions stated above,
+and you may publicly display copies.
+
+
+File: gnash_user.info,  Node: 3_ COPYING IN QUANTITY,  Next: 4_ MODIFICATIONS, 
 Prev: 2_ VERBATIM COPYING,  Up: GNU Free Documentation License
+
+A.4 3. COPYING IN QUANTITY
+==========================
+
+If you publish printed copies of the Document (*note fdl-document::)
+numbering more than 100, and the Document's license notice requires
+Cover Texts (*note fdl-cover-texts::), you must enclose the copies in
+covers that carry, clearly and legibly, all these Cover Texts:
+Front-Cover Texts on the front cover, and Back-Cover Texts on the back
+cover. Both covers must also clearly and legibly identify you as the
+publisher of these copies. The front cover must present the full title
+with all words of the title equally prominent and visible. You may add
+other material on the covers in addition. Copying with changes limited
+to the covers, as long as they preserve the title of the Document
+(*note fdl-document::) and satisfy these conditions, can be treated as
+verbatim copying in other respects.
+
+   If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+   If you publish or distribute Opaque (*note fdl-transparent::) copies
+of the Document (*note fdl-document::) numbering more than 100, you
+must either include a machine-readable Transparent (*note
+fdl-transparent::) copy along with each Opaque copy, or state in or
+with each Opaque copy a publicly-accessible computer-network location
+containing a complete Transparent copy of the Document, free of added
+material, which the general network-using public has access to download
+anonymously at no charge using public-standard network protocols. If
+you use the latter option, you must take reasonably prudent steps, when
+you begin distribution of Opaque copies in quantity, to ensure that
+this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+   It is requested, but not required, that you contact the authors of
+the Document (*note fdl-document::) well before redistributing any
+large number of copies, to give them a chance to provide you with an
+updated version of the Document.
+
+
+File: gnash_user.info,  Node: 4_ MODIFICATIONS,  Next: 5_ COMBINING DOCUMENTS, 
 Prev: 3_ COPYING IN QUANTITY,  Up: GNU Free Documentation License
+
+A.5 4. MODIFICATIONS
+====================
+
+You may copy and distribute a Modified Version (*note fdl-modified::)
+of the Document (*note fdl-document::) under the conditions of sections
+2 (*note 2_ VERBATIM COPYING::) and 3 (*note 3_ COPYING IN QUANTITY::)
+above, provided that you release the Modified Version under precisely
+this License, with the Modified Version filling the role of the
+Document, thus licensing distribution and modification of the Modified
+Version to whoever possesses a copy of it. In addition, you must do
+these things in the Modified Version:
+
+   * *A. * Use in the Title Page (*note fdl-title-page::) (and on the
+     covers, if any) a title distinct from that of the Document (*note
+     fdl-document::), and from those of previous versions (which
+     should, if there were any, be listed in the History section of the
+     Document). You may use the same title as a previous version if the
+     original publisher of that version gives permission.
+
+   * *B. * List on the Title Page (*note fdl-title-page::), as authors,
+     one or more persons or entities responsible for authorship of the
+     modifications in the Modified Version (*note fdl-modified::),
+     together with at least five of the principal authors of the
+     Document (*note fdl-document::) (all of its principal authors, if
+     it has less than five).
+
+   * *C. * State on the Title Page (*note fdl-title-page::) the name of
+     the publisher of the Modified Version (*note fdl-modified::), as
+     the publisher.
+
+   * *D. * Preserve all the copyright notices of the Document (*note
+     fdl-document::).
+
+   * *E. * Add an appropriate copyright notice for your modifications
+     adjacent to the other copyright notices.
+
+   * *F. * Include, immediately after the copyright notices, a license
+     notice giving the public permission to use the Modified Version
+     (*note fdl-modified::) under the terms of this License, in the
+     form shown in the Addendum below.
+
+   * *G. * Preserve in that license notice the full lists of  Invariant
+     Sections (*note fdl-invariant::) and required Cover Texts (*note
+     fdl-cover-texts::) given in the Document's (*note fdl-document::)
+     license notice.
+
+   * *H. * Include an unaltered copy of this License.
+
+   * *I. * Preserve the section entitled "History", and its title, and
+     add to it an item stating at least the title, year, new authors,
+     and publisher of the Modified Version  (*note fdl-modified::)as
+     given on the Title Page (*note fdl-title-page::).  If there is no
+     section entitled "History" in the Document (*note fdl-document::),
+     create one stating the title, year, authors, and publisher of the
+     Document as given on its Title Page, then add an item describing
+     the Modified Version as stated in the previous sentence.
+
+   * *J. * Preserve the network location, if any, given in the Document
+     (*note fdl-document::) for public access to a Transparent (*note
+     fdl-transparent::) copy of the Document, and likewise the network
+     locations given in the Document for previous versions it was based
+     on. These may be placed in the "History" section.  You may omit a
+     network location for a work that was published at least four years
+     before the Document itself, or if the original publisher of the
+     version it refers to gives permission.
+
+   * *K. * In any section entitled "Acknowledgements" or "Dedications",
+     preserve the section's title, and preserve in the section all the
+     substance and tone of each of the contributor acknowledgements
+     and/or dedications given therein.
+
+   * *L. * Preserve all the Invariant Sections (*note fdl-invariant::)
+     of the Document (*note fdl-document::), unaltered in their text
+     and in their titles.  Section numbers or the equivalent are not
+     considered part of the section titles.
+
+   * *M. * Delete any section entitled "Endorsements". Such a section
+     may not be included in the Modified Version (*note fdl-modified::).
+
+   * *N. * Do not retitle any existing section as "Endorsements" or to
+     conflict in title with any Invariant Section (*note
+     fdl-invariant::).
+
+   If the Modified Version (*note fdl-modified::) includes new
+front-matter sections or appendices that qualify as Secondary Sections
+(*note fdl-secondary::) and contain no material copied from the
+Document, you may at your option designate some or all of these
+sections as invariant. To do this, add their titles to the list of
+Invariant Sections (*note fdl-invariant::) in the Modified Version's
+license notice.  These titles must be distinct from any other section
+titles.
+
+   You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version (*note
+fdl-modified::) by various parties-for example, statements of peer
+review or that the text has been approved by an organization as the
+authoritative definition of a standard.
+
+   You may add a passage of up to five words as a Front-Cover Text
+(*note fdl-cover-texts::), and a passage of up to 25 words as a
+Back-Cover Text (*note fdl-cover-texts::), to the end of the list of
+Cover Texts (*note fdl-cover-texts::) in the Modified Version (*note
+fdl-modified::).  Only one passage of Front-Cover Text and one of
+Back-Cover Text may be added by (or through arrangements made by) any
+one entity. If the Document (*note fdl-document::) already includes a
+cover text for the same cover, previously added by you or by
+arrangement made by the same entity you are acting on behalf of, you
+may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+   The author(s) and publisher(s) of the Document (*note
+fdl-document::) do not by this License give permission to use their
+names for publicity for or to assert or imply endorsement of any
+Modified Version  (*note fdl-modified::).
+
+
+File: gnash_user.info,  Node: 5_ COMBINING DOCUMENTS,  Next: 6_ COLLECTIONS OF 
DOCUMENTS,  Prev: 4_ MODIFICATIONS,  Up: GNU Free Documentation License
+
+A.6 5. COMBINING DOCUMENTS
+==========================
+
+You may combine the Document (*note fdl-document::) with other
+documents released under this License, under the terms defined in
+section 4 (*note 4_ MODIFICATIONS::) above for modified versions,
+provided that you include in the combination all of the Invariant
+Sections (*note fdl-invariant::) of all of the original documents,
+unmodified, and list them all as Invariant Sections of your combined
+work in its license notice.
+
+   The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections (*note fdl-invariant::) may be
+replaced with a single copy. If there are multiple Invariant Sections
+with the same name but different contents, make the title of each such
+section unique by adding at the end of it, in parentheses, the name of
+the original author or publisher of that section if known, or else a
+unique number. Make the same adjustment to the section titles in the
+list of Invariant Sections in the license notice of the combined work.
+
+   In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications".  You must delete all sections
+entitled "Endorsements."
+
+
+File: gnash_user.info,  Node: 6_ COLLECTIONS OF DOCUMENTS,  Next: 7_ 
AGGREGATION WITH INDEPENDENT WORKS,  Prev: 5_ COMBINING DOCUMENTS,  Up: GNU 
Free Documentation License
+
+A.7 6. COLLECTIONS OF DOCUMENTS
+===============================
+
+You may make a collection consisting of the Document (*note
+fdl-document::) and other documents released under this License, and
+replace the individual copies of this License in the various documents
+with a single copy that is included in the collection, provided that
+you follow the rules of this License for verbatim copying of each of the
+documents in all other respects.
+
+   You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+File: gnash_user.info,  Node: 7_ AGGREGATION WITH INDEPENDENT WORKS,  Next: 8_ 
TRANSLATION,  Prev: 6_ COLLECTIONS OF DOCUMENTS,  Up: GNU Free Documentation 
License
+
+A.8 7. AGGREGATION WITH INDEPENDENT WORKS
+=========================================
+
+A compilation of the Document (*note fdl-document::) or its derivatives
+with other separate and independent documents or works, in or on a
+volume of a storage or distribution medium, does not as a whole count
+as a Modified Version (*note fdl-modified::) of the Document, provided
+no compilation copyright is claimed for the compilation.  Such a
+compilation is called an "aggregate", and this License does not apply
+to the other self-contained works thus compiled with the Document , on
+account of their being thus compiled, if they are not themselves
+derivative works of the Document.  If the Cover Text (*note
+fdl-cover-texts::) requirement of section 3 (*note 3_ COPYING IN
+QUANTITY::) is applicable to these copies of the Document, then if the
+Document is less than one quarter of the entire aggregate, the
+Document's Cover Texts may be placed on covers that surround only the
+Document within the aggregate. Otherwise they must appear on covers
+around the whole aggregate.
+
+
+File: gnash_user.info,  Node: 8_ TRANSLATION,  Next: 9_ TERMINATION,  Prev: 7_ 
AGGREGATION WITH INDEPENDENT WORKS,  Up: GNU Free Documentation License
+
+A.9 8. TRANSLATION
+==================
+
+Translation is considered a kind of modification, so you may distribute
+translations of the Document (*note fdl-document::) under the terms of
+section 4 (*note 4_ MODIFICATIONS::). Replacing  Invariant Sections
+(*note fdl-invariant::) with translations requires special permission
+from their copyright holders, but you may include translations of some
+or all Invariant Sections in addition to the original versions of these
+Invariant Sections. You may include a translation of this License
+provided that you also include the original English version of this
+License. In case of a disagreement between the translation and the
+original English version of this License, the original English version
+will prevail.
+
+
+File: gnash_user.info,  Node: 9_ TERMINATION,  Next: 10_ FUTURE REVISIONS OF 
THIS LICENSE,  Prev: 8_ TRANSLATION,  Up: GNU Free Documentation License
+
+A.10 9. TERMINATION
+===================
+
+You may not copy, modify, sublicense, or distribute the Document (*note
+fdl-document::) except as expressly provided for under this License.
+Any other attempt to copy, modify, sublicense or distribute the
+Document is void, and will automatically terminate your rights under
+this License. However, parties who have received copies, or rights,
+from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+
+File: gnash_user.info,  Node: 10_ FUTURE REVISIONS OF THIS LICENSE,  Next: 
Addendum,  Prev: 9_ TERMINATION,  Up: GNU Free Documentation License
+
+A.11 10. FUTURE REVISIONS OF THIS LICENSE
+=========================================
+
+The Free Software Foundation (http://www.gnu.org/fsf/fsf.html) may
+publish new, revised versions of the GNU Free Documentation License
+from time to time. Such new versions will be similar in spirit to the
+present version, but may differ in detail to address new problems or
+concerns. See http://www.gnu.org/copyleft/
+(http://www.gnu.org/copyleft).
+
+   Each version of the License is given a distinguishing version
+number. If the Document (*note fdl-document::) specifies that a
+particular numbered version of this License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that specified version or of any later version
+that has been published (not as a draft) by the Free Software
+Foundation. If the Document does not specify a version number of this
+License, you may choose any version ever published (not as a draft) by
+the Free Software Foundation.
+
+
+File: gnash_user.info,  Node: Addendum,  Prev: 10_ FUTURE REVISIONS OF THIS 
LICENSE,  Up: GNU Free Documentation License
+
+A.12 Addendum
+=============
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+     Copyright 2008, Free Software Foundation.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with noInvariant Sections (*note fdl-invariant::),
+     with no Front-Cover Texts (*note fdl-cover-texts::), and with no
+     Back-Cover Texts (*note fdl-cover-texts::). A copy of the license
+     is included in the section entitled "GNU Free Documentation
+     License".
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License
+(http://www.gnu.org/copyleft/gpl.html), to permit their use in free
+software.
+
+
+
+Tag Table:
+Node: Top173
+Node: Introduction1479
+Node: Audience2272
+Node: What Is Supported ?2601
+Node: Using Gnash5134
+Node: Gnash Command Line Options51462
+Ref: Gnash Command Line Options <1>51809
+Node: Gnash Interactive Control Keys57659
+Ref: Gnash Interactive Control Keys <1>58026
+Node: User Configuration File58968
+Ref: User Configuration Variables59747
+Node: Installing and Configuring Gnash78609
+Node: Requirements78999
+Node: Hardware Requirements79320
+Ref: Build Matrix80106
+Node: Software Requirements81333
+Node: Downloading Gnash82166
+Node: Getting the Source82801
+Node: Releases83161
+Node: Snapshot83719
+Node: Repository84190
+Node: Getting Codec Support85011
+Node: Reporting Bugs85728
+Node: Get a Fresh Binary Package86728
+Node: Determine if the bug was previously reported87507
+Node: Review the bug writing guidelines88326
+Node: Filing a bug report89378
+Node: Glossary89662
+Ref: A89776
+Ref: C90600
+Ref: D90886
+Ref: E91298
+Ref: F91538
+Ref: G92521
+Ref: K93506
+Ref: L93940
+Ref: M94062
+Ref: N94421
+Ref: O94578
+Ref: P95193
+Ref: Q95480
+Ref: R95664
+Ref: S96905
+Ref: T98501
+Ref: X99209
+Node: Authors99302
+Node: GNU Free Documentation License99999
+Node: 0_ PREAMBLE100763
+Node: 1_ APPLICABILITY AND DEFINITIONS102070
+Ref: fdl-document102296
+Ref: fdl-modified102587
+Ref: fdl-secondary102774
+Ref: fdl-invariant103419
+Ref: fdl-cover-texts103668
+Ref: fdl-transparent103881
+Ref: fdl-title-page105171
+Node: 2_ VERBATIM COPYING105560
+Node: 3_ COPYING IN QUANTITY106541
+Node: 4_ MODIFICATIONS108899
+Node: 5_ COMBINING DOCUMENTS114960
+Node: 6_ COLLECTIONS OF DOCUMENTS116458
+Node: 7_ AGGREGATION WITH INDEPENDENT WORKS117350
+Node: 8_ TRANSLATION118579
+Node: 9_ TERMINATION119483
+Node: 10_ FUTURE REVISIONS OF THIS LICENSE120139
+Node: Addendum121280
+
+End Tag Table

Index: doc/C/preformatted/gnashref.html.in
===================================================================
RCS file: doc/C/preformatted/gnashref.html.in
diff -N doc/C/preformatted/gnashref.html.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnashref.html.in 2 Mar 2008 16:32:21 -0000       1.1
@@ -0,0 +1,3443 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; 
charset=ISO-8859-1"><title>Gnash Reference Manual</title><meta name="generator" 
content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" 
text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" 
lang="en"><div class="titlepage"><div><div><h1 class="title"><a 
name="index"></a>Gnash Reference Manual</h1></div><div><p class="releaseinfo">
+        This manual describes version 0.8.2 of Gnash.
+    </p></div><div><p class="copyright">Copyright © 2005, 2006, 2007, 2008 
Free Software Foundation</p></div><div><div class="legalnotice"><a 
name="legalnotice"></a><p>
+    Permission is granted to copy, distribute and/or modify this document
+    under the terms of the <a class="link" href="#fdl" title="Appendix A. GNU 
Free Documentation License"><em class="citetitle">GNU
+    Free Documentation License</em></a>, Version 1.1 or any later
+    version published by the Free Software Foundation with no Invariant
+    Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find
+    a copy of the GFDL at this 
+    <a class="link" href="#fdl" title="Appendix A. GNU Free Documentation 
License">link</a> or in the file COPYING-DOCS
+    distributed with this manual.
+   </p></div></div><div><div class="revhistory"><table border="1" width="100%" 
summary="Revision history"><tr><th align="left" valign="top" 
colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 
Gnash User Manual version 0.4</td><td align="left">Feb 2008</td></tr><tr><td 
align="left" colspan="2"> 
+      <p class="author">Rob Savoye
+      <code class="email">&lt;<a class="email" 
href="mailto:address@hidden";>address@hidden</a>&gt;</code>
+      The end user parts of the manual have been pulled out of
+      the original version of the manual, and rewritten. This
+      is now a reference manual only.
+      </p>
+      
+      <p class="publisher">Open Media Now! Foundation</p>
+    </td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table 
of Contents</b></p><dl><dt><span class="chapter"><a href="#intro">1. 
Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a 
href="#audience">Audience</a></span></dt><dt><span class="sect1"><a 
href="#runs-on">What Is Supported ?</a></span></dt></dl></dd><dt><span 
class="chapter"><a href="#build">2. Building from 
Source</a></span></dt><dd><dl><dt><span class="sect1"><a 
href="#building_overview">Overview</a></span></dt><dt><span class="sect1"><a 
href="#gettingsource">Getting The Source</a></span></dt><dd><dl><dt><span 
class="sect2"><a href="#sourcereleases">Releases</a></span></dt><dt><span 
class="sect2"><a href="#sourcecvs">CVS 
Access</a></span></dt></dl></dd><dt><span class="sect1"><a 
href="#dependencies">Code Dependencies</a></span></dt><dt><span 
class="sect1"><a href="#testdep">Testing Dependencies</a></span></dt><dt><span 
class="sect1"><a href="#docdep">Documentation 
Dependencies</a></span></dt><dt><span class="sect1"><a 
href="#configure">Configuring Gnash</a></span></dt><dt><span class="sect1"><a 
href="#compile">Compiling the Code</a></span></dt><dt><span class="sect1"><a 
href="#processdoc">Creating the Documentation</a></span></dt><dt><span 
class="sect1"><a href="#runtests">Running the 
Tests</a></span></dt><dd><dl><dt><span class="sect2"><a href="#dejagnu">Using 
DejaGnu</a></span></dt><dt><span class="sect2"><a href="#manually">Running The 
Tests Manually</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a 
href="#internals">3. Software Internals</a></span></dt><dd><dl><dt><span 
class="sect1"><a href="#tour">A Tour of Gnash</a></span></dt><dd><dl><dt><span 
class="sect2"><a href="#The%20Libraries">The Libraries</a></span></dt><dt><span 
class="sect2"><a href="#apps">The Applications</a></span></dt><dt><span 
class="sect2"><a href="#plugin">The Plugin</a></span></dt><dt><span 
class="sect2"><a href="#logging">The Debug Logging 
System</a></span></dt></dl></dd><dt><span class="sect1"><a 
href="#soundhandlers">Sound handling in Gnash</a></span></dt><dd><dl><dt><span 
class="sect2"><a href="#soundtypes">Sound types</a></span></dt><dt><span 
class="sect2"><a href="#soundparsing">Sound parsing</a></span></dt><dt><span 
class="sect2"><a href="#soundplayback">Sound playback</a></span></dt><dt><span 
class="sect2"><a href="#sdlsound">The SDL sound 
backend</a></span></dt><dt><span class="sect2"><a href="#gstreamer">The 
Gstreamer backend</a></span></dt><dt><span class="sect2"><a 
href="#audio-future">Future audio backends</a></span></dt><dt><span 
class="sect2"><a href="#gstreamer-details">Detailed description of the 
Gstreamer backend</a></span></dt></dl></dd><dt><span class="sect1"><a 
href="#testing">Testing </a></span></dt><dd><dl><dt><span class="sect2"><a 
href="#testtools">Testing Tools</a></span></dt><dt><span class="sect2"><a 
href="#testcases">Test Cases</a></span></dt><dt><span class="sect2"><a 
href="#writeastests">Writing ActionScript Tests</a></span></dt><dt><span 
class="sect2"><a href="#writemingtests">Writing Ming-based self-contained SWF 
tests</a></span></dt><dt><span class="sect2"><a 
href="#writing_dejagnu_so_tests">Writing self-contained SWF tests with other 
compilers</a></span></dt><dt><span class="sect2"><a 
href="#writing_test_runners">Writing Test 
Runners</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a 
href="#extensions">5. Gnash Extensions</a></span></dt><dd><dl><dt><span 
class="sect1"><a href="#newext">Creating A New 
Extension</a></span></dt><dd><dl><dt><span class="sect2"><a 
href="#craftext">Crafting an Extension</a></span></dt></dl></dd><dt><span 
class="sect1"><a href="#debuext">Debugging An 
Extension</a></span></dt><dt><span class="sect1"><a href="#inclext">Included 
Extensions</a></span></dt></dl></dd><dt><span class="chapter"><a 
href="#rtmp">6. RTMP Protocol</a></span></dt><dd><dl><dt><span class="sect1"><a 
href="#amf">AMF Format</a></span></dt></dl></dd><dt><span class="chapter"><a 
href="#nsapi">7. Mozilla/Firefox NPAPI Plugin</a></span></dt><dd><dl><dt><span 
class="sect1"><a href="#plugincapi">Plugin C API</a></span></dt><dt><span 
class="sect1"><a href="#plugincppapi">Plugin C++ API</a></span></dt><dt><span 
class="sect1"><a href="#glthread">OpenGL and Threads</a></span></dt><dt><span 
class="sect1"><a href="#eventhandle">Plugin Event 
Handling</a></span></dt></dl></dd><dt><span class="chapter"><a 
href="#authors">8. Authors</a></span></dt><dt><span class="appendix"><a 
href="#fdl">A. GNU Free Documentation License</a></span></dt><dd><dl><dt><span 
class="sect1"><a href="#fdl-preamble">0. PREAMBLE</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section1">1. APPLICABILITY AND 
DEFINITIONS</a></span></dt><dt><span class="sect1"><a href="#fdl-section2">2. 
VERBATIM COPYING</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section3">3. COPYING IN QUANTITY</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section4">4. MODIFICATIONS</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section5">5. COMBINING 
DOCUMENTS</a></span></dt><dt><span class="sect1"><a href="#fdl-section6">6. 
COLLECTIONS OF DOCUMENTS</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section7">7. AGGREGATION WITH INDEPENDENT 
WORKS</a></span></dt><dt><span class="sect1"><a href="#fdl-section8">8. 
TRANSLATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section9">9. 
TERMINATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section10">10. 
FUTURE REVISIONS OF THIS LICENSE</a></span></dt><dt><span class="sect1"><a 
href="#fdl-using">Addendum</a></span></dt></dl></dd></dl></div><div 
class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>2.1. <a 
href="#codedeps">Code Dependency Table</a></dt><dt>2.2. <a 
href="#testdeps">Testing Dependency Table</a></dt><dt>2.3. <a 
href="#docdeps">Documentation Dependency Table</a></dt><dt>2.4. <a 
href="#tb-config-features">Configuration Options - Features</a></dt><dt>2.5. <a 
href="#tb-configure-paths">Custom Path Options</a></dt></dl></div><div 
class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a 
name="intro"></a>Chapter 1. Introduction</h2></div></div></div><div 
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a 
href="#audience">Audience</a></span></dt><dt><span class="sect1"><a 
href="#runs-on">What Is Supported ?</a></span></dt></dl></div><p>
+    <span class="application">Gnash</span> is a free SWF movie player.  It is 
available as a
+    stand-alone application or as a plugin for several popular
+    web browsers. It supports playing media from a disk or streaming
+    over a network connection. Some popular video sharing sites like
+    YouTube are supported from a wide vaariety of devices from
+    embedded ones to modern desktops.
+  </p><p>
+    <span class="application">Gnash</span> has a better focus on security, 
allowing the user tight
+    control of all network or disk based I/O. Gnash also supports
+    extending ActionScript by creating your own. You can write
+    wrappers for any development library, and import them into the
+    player much like perl or python does.
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a 
name="audience"></a>Audience</h2></div></div></div><p>
+      This manual is primarily focused on users interested in how to
+      get Gnash installed from a package, and basic usage as a web
+      browser plugin. For more technical details, please refer to the
+      Gnash Reference manual.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="runs-on"></a>What Is Supported ?</h2></div></div></div><p>
+      Gnash is known to compile for most any POSIX and ANSI C++
+      conforming system if you have all the dependent libraries
+      installed. Systems we test on, and which Gnash is know to
+      run on are Ubuntu, Fedora, Debian, OpenBSD, NetBSD, FreeBSD,
+      Win32, and Darwin (OSX) primarily. Occasionally other platforms
+      are built, primarily by those distribution maintainers. This
+      includes BeOS, Haiku, Syllable, OS/2, Solaris, Slackware, and
+      Gentoo.
+    </p><p>
+      Gnash is a capable of reading up to SWF v9 files and opcodes,
+      but primarily supports SWF v7, with better SWF v8 and v9
+      support under heavy developement. With the 0.8.2 release,
+      Gnash includes initial parser support for SWF v8 and v9.
+      Not all ActionScript 2 classes are implemented yet, but all of the
+      most heavily used ones are. Many ActionScript 2 classes are
+      partially implemented; there is support for all of the
+      commonly used methods of each class.
+    </p><p>
+      Gnash has implemented about 80% of ActionScript v. 2.0, and has
+      begun implementing ActionScript v. 3.0. Gnash supports the
+      majority of Flash opcodes up to SWF version 9, and a wide
+      sampling of ActionScript classes for SWF version 8.
+    </p><p>
+      As ActionsScript 3 is a more developed version of
+      ActionScript 2, many of the same classes work for
+      both. Support has been added to Gnash's ActionScript library
+      to support the new ActionScript 3 filters, which get applied
+      to every class. Implementing ActionScript clases is often the
+      easiest way for new Gnash developers to make a contribution
+      without a deep internal knpowledge of Gnash.
+    </p><p>
+      Gnash has included video support since early 2007, but this is
+      an every changing field of reverse engineering. Many of the
+      popular video sharing sites use SWF v8 or v9, which Gnash
+      still has imperfect support for. This is improving all the
+      time, so often builds from a development snapshot will work
+      when using the older release packaged in your distribution
+      doesn't. You can find daily snapshots of the latest CVS tree
+      at: <a class="ulink" href="http://www.gnashdev.org/dev_snapshots/"; 
target="_top">
+      http://www.gnashdev.org/dev_snapshots</a>.
+    </p><p>
+      Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+      should work with Gnash. Gnash supports the loading of patent
+      free codecs like Ogg Vorbis or Theora from disk based files,
+      while work is being done to support these codecs when embedded
+      in a SWF file. Ffmpeg contains the codecs used by the current
+      SWF defintion, FLV, VP6 (ON2), H.263, H.264, and MP3.
+    </p></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="build"></a>Chapter 2. 
Building from Source</h2></div></div></div><div class="toc"><p><b>Table of 
Contents</b></p><dl><dt><span class="sect1"><a 
href="#building_overview">Overview</a></span></dt><dt><span class="sect1"><a 
href="#gettingsource">Getting The Source</a></span></dt><dd><dl><dt><span 
class="sect2"><a href="#sourcereleases">Releases</a></span></dt><dt><span 
class="sect2"><a href="#sourcecvs">CVS 
Access</a></span></dt></dl></dd><dt><span class="sect1"><a 
href="#dependencies">Code Dependencies</a></span></dt><dt><span 
class="sect1"><a href="#testdep">Testing Dependencies</a></span></dt><dt><span 
class="sect1"><a href="#docdep">Documentation 
Dependencies</a></span></dt><dt><span class="sect1"><a 
href="#configure">Configuring Gnash</a></span></dt><dt><span class="sect1"><a 
href="#compile">Compiling the Code</a></span></dt><dt><span class="sect1"><a 
href="#processdoc">Creating the Documentation</a></span></dt><dt><span 
class="sect1"><a href="#runtests">Running the 
Tests</a></span></dt><dd><dl><dt><span class="sect2"><a href="#dejagnu">Using 
DejaGnu</a></span></dt><dt><span class="sect2"><a href="#manually">Running The 
Tests Manually</a></span></dt></dl></dd></dl></div><div class="sect1" 
lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: 
both"><a name="building_overview"></a>Overview</h2></div></div></div><p>
+      The typical process of building from source will involve 
+      <a class="link" href="#gettingsource" title="Getting The Source">getting 
the source</a>,
+      <a class="link" href="#dependencies" title="Code Dependencies">build 
dependencies</a>,
+      <a class="link" href="#configure" title="Configuring 
Gnash">configuration</a>, 
+      <a class="link" href="#compile" title="Compiling the 
Code">compilation</a>,
+      <a class="link" href="#runtests" title="Running the Tests">testing</a>, 
and
+      <a class="link" href="#install" title="Installation">installation</a>.
+      A simplified overview of the process would be:
+      </p><pre class="programlisting">
+        ./autogen.sh
+        ./configure 
+        make
+        make check
+        make install
+      </pre><p>
+    </p><p>
+      If you are compiling with GCC you will probably need to use a machine
+      with at least 128 megabytes of physical RAM; 64MB is not enough for a
+      couple of the files, even with swap enabled and optimisation turned off.
+    </p><p>
+      At present the Gnash source is about 30 MB extracted and configured
+      and requires a total of about 125 megabytes to compile it.
+    </p><p>
+      Continue reading for detailed step-by-step instructions 
+      of the entire procedure.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="gettingsource"></a>Getting The Source</h2></div></div></div><div 
class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a 
name="sourcereleases"></a>Releases</h3></div></div></div><p>
+       Tarballs of official releases can be found in the download area
+       of the project's GNU Savannah page at
+       <a class="ulink" href="http://savannah.gnu.org/projects/gnash"; 
target="_top">
+                   http://savannah.gnu.org/projects/gnash
+       </a> 
+       or under
+       <a class="ulink" href="http://ftp.gnu.org/gnu/gnash"; target="_top">
+                   http://ftp.gnu.org/gnu/gnash
+       </a> 
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="sourcecvs"></a>CVS 
Access</h3></div></div></div><p>
+       The latest Gnash development sources are available via anonymous CVS.
+       Use the following commands to check them out
+       (just hit return when you are prompted for the password):
+       </p><pre class="programlisting">
+         export CVS_RSH=ssh
+         cvs -z3 -d:pserver:address@hidden:/sources/gnash co gnash
+       </pre><p>
+       You will then be able to update your copy from the repository using
+       </p><pre class="programlisting">
+         cd gnash
+         cvs update -d
+       </pre><p>
+      </p><p>
+       If you only have access to the internet via a web proxy,
+       you will find daily source snapshots of the latest CVS tree in
+       <a class="ulink" href="http://www.gnashdev.org/dev_snapshots/"; 
target="_top">
+                   http://www.gnashdev.org/dev_snapshots
+       </a> 
+      </p></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="dependencies"></a>Code Dependencies</h2></div></div></div><p>
+    <span class="application">Gnash</span> has a number of dependencies on 
other packages.
+    If you install the dependencies using a package
+    manager, be certain to install the development versions
+    of the packages.  The normal versions are often missing
+    the headers <span class="application">Gnash</span> needs to compile.
+  </p><p>
+    Some dependencies have other dependencies, like GTk also needs
+    glib2, atk, and pango to produce a fully linked
+    executable. Different distributions also use differing
+    dependencies, sometimes a package will depend on libxml2 on one
+    system, but libexpat on another.
+  </p><div class="table"><a name="codedeps"></a><p class="title"><b>Table 2.1. 
Code Dependency Table</b></p><div class="table-contents"><table summary="Code 
Dependency Table" border="1"><colgroup><col align="left"><col align="left"><col 
align="left"><col align="left"><col align="left"><col align="left"><col 
align="left"></colgroup><thead><tr><th align="left">Name</th><th 
align="left">Level</th><th align="left">Version</th><th 
align="left">Description</th><th align="left">Explanation</th><th 
align="left">apt-get package</th><th align="left">RPM/Yum package</th><th 
align="left">BSD package</th></tr></thead><tbody><tr><td 
align="left">Boost</td><td align="left">Required</td><td align="left">1.32 or 
higher</td><td align="left">
+           Boost is a library of portable C++ classes and
+           templates.
+         </td><td align="left">
+           In <span class="application">Gnash</span>, Boost libraries are used 
extensively, primarily
+           boost-gthread and boost-date-time. Boost is used for thread and 
mutext 
+           handling. 
+         </td><td align="left">
+           <code class="filename">libboost-thread-dev, libboost-date-time-dev 
libboost-dev
+           </code>
+         </td><td align="left">
+           <code class="filename">
+             libboost-thread-devel, libboost-date-time-devel
+         </code>
+         </td><td align="left">
+           <code class="filename">
+             boost-headers, boost-libs, or just boost
+         </code></td></tr><tr><td align="left">libxml2</td><td 
align="left">Required</td><td align="left"> </td><td align="left">
+           Libxml2 is the GNOME XML parser library and
+           is available at <a class="ulink" href="http://xmlsoft.org"; 
target="_top">http://xmlsoft.org</a>.
+         </td><td align="left">
+           This library is used to parse messages for the
+           XML XMLNode, or XMLSocket ActionScript classes.
+         </td><td align="left"><code 
class="filename">libxml2-dev</code></td><td align="left"><code 
class="filename">libxml2-devel</code></td><td align="left"><code 
class="filename">libxml2</code></td></tr><tr><td align="left">AGG</td><td 
align="left">Possibly Required</td><td align="left">2.4 or higher</td><td 
align="left">
+           AGG is the AntiGrain low-level 2D graphics
+           library.  
+         </td><td align="left">
+           <span class="application">Gnash</span> requires the installation of 
at least one
+           renderer.  AGG is considered the <span class="emphasis"><em>best
+           supported</em></span> renderer for <span 
class="application">Gnash</span>.
+         </td><td align="left"><code 
class="filename">libagg-dev</code></td><td align="left"><code 
class="filename">agg-devel</code></td><td align="left"><code 
class="filename">agg</code></td></tr><tr><td align="left">OpenGL</td><td 
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+           OpenGL is a standard specification defining a
+           cross-language cross-platform API for writing
+           applications which produce 3D and 2D graphics.
+           It supports hardware acceleration.
+           You can download a free implementation from
+           <a class="ulink" href="http://www.mesa3d.org"; 
target="_top">http://www.mesa3d.org</a>,
+           although it doesn't support hardware acceleration.
+         </td><td align="left">
+           <span class="application">Gnash</span> requires the installation of 
at least one
+           renderer. If you don't have a hardware accelerated driver,
+           you're better off using AGG for the renderer.
+         </td><td align="left"><code 
class="filename">libgl1-mesa-dev</code></td><td align="left"><code 
class="filename">libmesa-devel</code></td><td align="left"><code 
class="filename">mesa</code></td></tr><tr><td align="left">Cairo</td><td 
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+           Cairo is a 2D graphics library with support for
+           multiple output devices.  It will automatically use
+           graphic card acceleration when available, and has
+           an experimental OpenGL backend.  
+         </td><td align="left">
+           <span class="application">Gnash</span> requires the installation of 
at least one
+           renderer.  Cairo is considered
+           the <span class="emphasis"><em>least supported</em></span> renderer
+           for <span class="application">Gnash</span>.
+         </td><td align="left"><code 
class="filename">libcairo2-dev</code></td><td align="left"><code 
class="filename">cairo-devel</code></td><td align="left"><code 
class="filename">cairo</code></td></tr><tr><td align="left">GTK</td><td 
align="left">Possibly Required</td><td align="left">2.2 or higher</td><td 
align="left">
+           GTK is the GIMP Toolkit GUI library used by the GNOME
+           desktop. It uses Cairo internally. Gtk enables better
+           integration with Firefox, as well as better event handling
+           and higher level GUI constructs like menus and dialog
+           boxes.
+         </td><td align="left">
+           <span class="application">Gnash</span> requires the installation of 
at least one
+           GUI library.  GTK is considered to be the
+           <span class="emphasis"><em>best supported</em></span> GUI library
+           option for <span class="application">Gnash</span>.
+         </td><td align="left"><code 
class="filename">libgtk2.0-dev</code></td><td align="left"><code 
class="filename">gtk-devel</code></td><td align="left"><code 
class="filename">gtk+2</code></td></tr><tr><td align="left">GtkGlExt</td><td 
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+           GtkGlExt integrates OpenGL into GTK.
+         </td><td align="left">
+           This library is required in order to use
+           the GTK GUI library in conjunction with the
+           OpenGL renderer.
+         </td><td align="left"><code 
class="filename">libgtkglext1-dev</code></td><td align="left"><code 
class="filename">gtkglext-devel</code></td><td align="left"><code 
class="filename">gtkglext</code></td></tr><tr><td align="left">SDL</td><td 
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+           The Simple DirectMedia Layer is a cross-platform
+           multimedia library which provides abstraction for
+           audio, graphics, sound and input APIs.  
+           SDL is available from
+           <a class="ulink" href="http://www.libsdl.org"; target="_top">
+             http://www.libsdl.org</a>.  
+         </td><td align="left">
+           <span class="application">Gnash</span> requires the installation of 
at least one
+           GUI library.  SDL may also be used as a sound
+           handler regardless of whether it is employed as
+           a GUI library.  The GUI
+           library is <span class="emphasis"><em>poorly supported</em></span>
+           in <span class="application">Gnash</span>, but the sound handler is 
the
+           <span class="emphasis"><em>best supported</em></span> in <span 
class="application">Gnash</span>.
+         </td><td align="left"><code 
class="filename">libsdl1.2-dev</code></td><td align="left"><code 
class="filename">SDL-devel</code></td><td align="left"><code 
class="filename">SDL-1.2</code></td></tr><tr><td align="left">FLTK</td><td 
align="left">Possibly Required</td><td align="left">2.0 or higher</td><td 
align="left">
+           The Fast Light ToolKit is a portable GUI library
+           which is intended as a replacement for the SDL GUI.
+         </td><td align="left">
+           <span class="application">Gnash</span> requires the installation of 
at least one
+           GUI library.  FLTK may be used in conjunction with
+           the Cairo and AGG renderers.
+         </td><td align="left">No distribution packages are available.</td><td 
align="left">No distribution packages are available.</td><td align="left">No 
distribution packages are available.</td></tr><tr><td align="left">KDE</td><td 
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+           Kdelibs is a collection of libraries needed to
+           compile KDE applications.
+         </td><td align="left">
+           <span class="application">Gnash</span> requires the installation of 
at least one
+           GUI library.  Kdelibs is also required for the
+           Kpart plugin for Konqueror.
+         </td><td align="left"><code class="filename">kdelibs3-dev, 
kdebase-dev</code></td><td align="left"><code class="filename">kdelibs-devel, 
kdebase-devel</code></td><td align="left"><code class="filename">kdelibs, 
kdebase</code></td></tr><tr><td align="left">Gstreamer</td><td 
align="left">Optional</td><td align="left"> </td><td align="left">
+           Gstreamer is a video handler.
+         </td><td align="left">
+           If you would like video playback, you must
+           install one of the video handlers.
+         </td><td align="left"><code 
class="filename">libgstreamer0.8-dev</code></td><td align="left"><code 
class="filename">gstreamer-devel</code></td><td align="left"><code 
class="filename">gstreamer-0.10</code></td></tr><tr><td 
align="left">gst-ffmpeg</td><td align="left">Possibly Required</td><td 
align="left"> </td><td align="left">
+           gst-ffmpeg allows you to use the FFMPEG decoder
+           with Gstreamer.
+         </td><td align="left">
+           This package is required if you would like to
+           use Gstreamer as a video handler.
+         </td><td align="left"><code 
class="filename">gstreamer0.8-ffmpeg-dev</code></td><td align="left"><code 
class="filename">gstreamer-ffmpeg-devel</code></td><td align="left"><code 
class="filename">gstreamer-ffmpeg</code></td></tr><tr><td 
align="left">FFMPEG</td><td align="left">Possibly Required</td><td 
align="left"> </td><td align="left">
+           FFMPEG is a video handler.
+         </td><td align="left">
+           If you would like video playback, you must
+           install one of the video handlers. When using the
+           gstreamer-ffmpeg plugin, ffmpeg doesn't need to be
+           installed, as it's part of the plugin. For systems
+           without Gstreamer support, ffmpeg can be used directly.
+         </td><td align="left"><code 
class="filename">ffmpeg-dev</code></td><td align="left"><code 
class="filename">ffmpeg-devel</code></td><td align="left"><code 
class="filename">ffmpeg</code></td></tr><tr><td align="left">JPEG</td><td 
align="left">Optional</td><td align="left"> </td><td align="left">
+           <a class="ulink" href="http://www.ijg.org/"; target="_top">JPEG</a>
+           is a lossy image format which is heavily used for images.
+         </td><td align="left">
+           This library is used for rendering JPEGs.
+         </td><td align="left"><code 
class="filename">libjpeg62-dev</code></td><td align="left"><code 
class="filename">libjpeg</code></td><td align="left"><code 
class="filename">jpeg</code></td></tr><tr><td align="left">PNG</td><td 
align="left">Optional</td><td align="left"> </td><td align="left">
+           <a class="ulink" href="http://www.libpng.org/pub/png/"; 
target="_top">PNG</a> is
+           a patent-free image format which is comparable to
+           <span class="emphasis"><em>GIF</em></span>.
+         </td><td align="left">
+           This library is used for rendering PNGs.
+         </td><td align="left"><code 
class="filename">libpng12-dev</code></td><td align="left"><code 
class="filename">libpng</code></td><td align="left"><code 
class="filename">png</code></td></tr><tr><td align="left">libcurl</td><td 
align="left">Optional</td><td align="left"> </td><td align="left">
+           libcurl is the multiprotocal file transfer library.
+         </td><td align="left">
+           This library is used for URL downloading.
+         </td><td align="left"><code 
class="filename">libcurl4-gnutls</code></td><td align="left"><code 
class="filename">libcurl</code></td><td align="left"><code 
class="filename">curl</code></td></tr><tr><td align="left">Glib2</td><td 
align="left">Optional</td><td align="left"> </td><td align="left">
+           Glib2 is a dependency of Gtk, and is a collection of
+           commonly used functions.
+         </td><td align="left">
+           This library is used for convenience.
+         </td><td align="left"><code class="filename">glib2-dev</code></td><td 
align="left"><code class="filename">glib2-devel</code></td><td 
align="left"><code class="filename">glib2</code></td></tr><tr><td 
align="left">Atk</td><td align="left">Optional</td><td align="left"> </td><td 
align="left">
+           Atk is a dependency of Gtk, and is used for accessibility
+           support.
+         </td><td align="left">
+           This library is used for accessiblity..
+         </td><td align="left"><code class="filename">atk-dev</code></td><td 
align="left"><code class="filename">atk-devel</code></td><td align="left"><code 
class="filename">atk</code></td></tr><tr><td align="left">Pango</td><td 
align="left">Optional</td><td align="left"> </td><td align="left">
+           Pango is a dependency of Gtk, and is used for font handling.
+         </td><td align="left">
+           This library is used for font handling.
+         </td><td align="left"><code class="filename">pango-dev</code></td><td 
align="left"><code class="filename">pango-devel</code></td><td 
align="left"><code class="filename">pango</code></td></tr><tr><td 
align="left">automake</td><td align="left">Possibly Required</td><td 
align="left">1.6.0</td><td align="left">
+           Automake is a tool for generating
+           <span class="emphasis"><em>Makefile.in</em></span> files.
+         </td><td align="left">
+           This package is required to run
+           <span class="emphasis"><em>autogen.sh</em></span>, which is a 
requirement
+           if you are using the development source from CVS.
+         </td><td align="left"><code class="filename">automake</code></td><td 
align="left"><code class="filename">automake</code></td><td align="left"><code 
class="filename">automake</code></td></tr><tr><td align="left">autoconf</td><td 
align="left">Possibly Required</td><td align="left">2.59</td><td align="left">
+           Autoconf is a package for generating configure
+           scripts.
+         </td><td align="left">
+           This package is required to run
+           <span class="emphasis"><em>autogen.sh</em></span>, which is a 
requirement
+           if you are using the development source from CVS.
+         </td><td align="left"><code class="filename">autoconf</code></td><td 
align="left"><code class="filename">autoconf</code></td><td align="left"><code 
class="filename">autoconf</code></td></tr><tr><td align="left">gettext</td><td 
align="left">Possibly Required</td><td align="left">0.14.6</td><td align="left">
+           Gettext is part of the GNU Translation Project.
+         </td><td align="left">
+           This package is required to run
+           <span class="emphasis"><em>autogen.sh</em></span>, which is a 
requirement
+           if you are using the development source from CVS.
+         </td><td align="left"><code class="filename">gettext</code></td><td 
align="left"><code class="filename">gettext</code></td><td align="left"><code 
class="filename">gettext</code></td></tr><tr><td align="left">libtool</td><td 
align="left">Possibly Required</td><td align="left">1.5.22</td><td align="left">
+           This is a generic library support script.
+         </td><td align="left">
+           This package is required to run
+           <span class="emphasis"><em>autogen.sh</em></span>, which is a 
requirement
+           if you are using the development source from CVS.
+         </td><td align="left"><code 
class="filename">libltdl3-dev</code></td><td align="left"><code 
class="filename">libtool</code></td><td align="left"><code 
class="filename">libtool</code></td></tr></tbody></table></div></div><br 
class="table-break"></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="testdep"></a>Testing Dependencies</h2></div></div></div><p>
+    <span class="application">Gnash</span> tries to run as many tests as 
possible, but will
+    simply skip tests if the tools to run them are unavailable.
+  </p><div class="table"><a name="testdeps"></a><p class="title"><b>Table 2.2. 
Testing Dependency Table</b></p><div class="table-contents"><table 
summary="Testing Dependency Table" border="1"><colgroup><col align="left"><col 
align="left"><col align="left"><col align="left"><col align="left"><col 
align="left"><col align="left"></colgroup><thead><tr><th 
align="left">Name</th><th align="left">Level</th><th 
align="left">Version</th><th align="left">Description</th><th 
align="left">Explanation</th><th align="left">apt-get package</th><th 
align="left">RPM/Yum package</th><th align="left">BSD 
package</th></tr></thead><tbody><tr><td align="left">Ming</td><td 
align="left">Optional</td><td align="left">0.4.0_beta4 or higher</td><td 
align="left">
+           Ming is an ActionScript compiler.
+         </td><td align="left">
+           Ming is the primary compiler for ActionScript testcases.
+         </td><td align="left">No distribution packages are available.</td><td 
align="left">No distribution packages are available.</td><td align="left">No 
distribution packages are available.</td></tr><tr><td 
align="left">Mtasc</td><td align="left">Optional</td><td align="left">1.12 or 
higher</td><td align="left">
+           Mtasc is an ActionScript compiler.
+         </td><td align="left">
+           Mtasc is used in some tests.
+         </td><td align="left"><code class="filename">mtasc</code></td><td 
align="left">No distribution packages are available.</td><td align="left">No 
distribution packages are available.</td></tr><tr><td align="left">swfc</td><td 
align="left">Optional</td><td align="left">part of swftools 0.8.1</td><td 
align="left">
+           Swfc a swf decompiler.
+         </td><td align="left">
+           Swfc is used in some testcases.
+         </td><td align="left">No distribution packages are available.</td><td 
align="left">No distribution packages are available.</td><td align="left">No 
distribution packages are available.</td></tr><tr><td 
align="left">swfmill</td><td align="left">Optional</td><td align="left"> 
0.2.12</td><td align="left">
+           Swfmill is an XML-based SWF (Shockwave Flash) processing tool.
+         </td><td align="left">
+           Swfmill is used in some testcases.
+         </td><td align="left">No distribution packages are available.</td><td 
align="left">No distribution packages are available.</td><td align="left">No 
distribution packages are available.</td></tr><tr><td 
align="left">Python</td><td align="left">Optional</td><td align="left">2.4 or 
higher</td><td align="left">
+           Python is a scripting language.
+         </td><td align="left">
+           Python is used by part of the testing framework.
+         </td><td align="left"><code class="filename">python</code></td><td 
align="left"><code class="filename">python</code></td><td align="left"><code 
class="filename">python</code></td></tr><tr><td align="left">DejaGnu</td><td 
align="left">Optional</td><td align="left">1.4 or higher</td><td align="left">
+           DejaGnu is a testing framework.
+         </td><td align="left">
+           DejaGnu is used to run multiple tests in an
+           automated fashion.
+         </td><td align="left"><code class="filename">dejagnu</code></td><td 
align="left"><code class="filename">dejagnu</code></td><td align="left"><code 
class="filename">dejagnu</code></td></tr></tbody></table></div></div><br 
class="table-break"></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="docdep"></a>Documentation Dependencies</h2></div></div></div><p>
+    The following packages are used to build <span 
class="application">Gnash</span>'s documentation.
+  </p><div class="table"><a name="docdeps"></a><p class="title"><b>Table 2.3. 
Documentation Dependency Table</b></p><div class="table-contents"><table 
summary="Documentation Dependency Table" border="1"><colgroup><col 
align="left"><col align="left"><col align="left"><col align="left"><col 
align="left"><col align="left"><col align="left"></colgroup><thead><tr><th 
align="left">Name</th><th align="left">Level</th><th 
align="left">Version</th><th align="left">Description</th><th 
align="left">Explanation</th><th align="left">apt-get package</th><th 
align="left">RPM/Yum package</th><th align="left">BSD 
package</th></tr></thead><tbody><tr><td align="left">Docbook</td><td 
align="left">Required</td><td align="left"> </td><td align="left">
+           <a class="ulink" href="http://http://docbook.sourceforge.net/"; 
target="_top">Docbook</a> is
+           is an industry-standard XML format for technical
+           documentation.  You can download it from
+           <a class="ulink" 
href="http://sourceforge.net/project/showfiles.php?group_id=21935#files"; 
target="_top">http://sourceforge.net/project/showfiles.php?group_id=21935#files</a>.
+         </td><td align="left">
+           <span class="application">Gnash</span> documentation is written in 
Docbook.
+         </td><td align="left">
+           <code class="filename">docbook-utils</code> and <code 
class="filename">docbook-dsssl</code>
+         </td><td align="left">
+           <code class="filename">docbook-dtd41-sgml</code> and <code 
class="filename">docbook-style-dsssl</code>
+         </td><td align="left">docbook</td></tr><tr><td 
align="left">DocBook2X</td><td align="left">Optional</td><td align="left"> 
</td><td align="left">
+           This software package converts Docbook documents to
+           the traditional man page format, GNU Texinfo
+           format, and HTML (via Texinfo) format.  
+           It is available at <a class="ulink" 
href="http://docbook2x.sourceforge.net/"; 
target="_top">http://docbook2x.sourceforge.net/</a>.
+         </td><td align="left">
+           DocBook2X is required to produce HTML and Texinfo
+           formats.
+         </td><td align="left"><code class="filename">docbook2x</code></td><td 
align="left"><code class="filename">docbook2x</code></td><td align="left"><code 
class="filename">docbook2x</code></td></tr><tr><td 
align="left">DocBook-utils</td><td align="left">Optional</td><td align="left"> 
</td><td align="left">
+           This software package converts Docbook documents to
+           the traditional man page format, GNU Texinfo
+           format, and HTML (via Texinfo) format.  
+         </td><td align="left">
+           DocBook-utils is required to produce HTML and Texinfo
+           formats.
+         </td><td align="left"><code 
class="filename">docbook-utils</code></td><td align="left"><code 
class="filename">docbook-utils</code></td><td align="left"><code 
class="filename">docbook-utils</code></td></tr><tr><td 
align="left">Texinfo</td><td align="left">Possibly Required</td><td 
align="left"> </td><td align="left">
+           Texinfo can be used to convert DocBook2X output
+           into GNU info pages.  You can download it from
+           <a class="ulink" href="http://ftp.gnu.org/gnu/texinfo/"; 
target="_top">http://ftp.gnu.org/gnu/texinfo/</a>.
+         </td><td align="left">
+           Texinfo is required if you wish to product GNU info
+           pages.
+         </td><td align="left"><code class="filename">texinfo</code></td><td 
align="left"><code class="filename">texinfo</code></td><td align="left"><code 
class="filename">texinfo</code></td></tr><tr><td align="left">FOP</td><td 
align="left">Optional</td><td align="left">0.20.5</td><td align="left">
+           Formatting Objects Processor is a print formatter
+           driven by XSL formatting objects.  It is a Java
+           application which can output PDF, PCL, PS, SVG, XML,
+           Print, AWT, MIF, and Text.  It is available at
+           <a class="ulink" href="http://xmlgraphics.apache.org/fop/"; 
target="_top">http://xmlgraphics.apache.org/fop/</a>.
+         </td><td align="left">
+           FOP is required for PDF output.
+         </td><td align="left"><code class="filename">fop</code></td><td 
align="left"><code class="filename">fop</code></td><td align="left"><code 
class="filename">fop</code></td></tr><tr><td align="left">Java (j2re)</td><td 
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+           FOP requires Sun's Java runtime (GCJ does not work with
+           FOP).  You can download it from
+           <a class="ulink" href="http://java.sun.com"; 
target="_top">http://java.sun.com</a>.
+         </td><td align="left">
+           Sun's Java runtime (j2re) is required to use FOP.  
+         </td><td align="left">
+           Download the package from <a class="ulink" 
href="http://java.sun.com"; target="_top">Sun</a>.
+         </td><td align="left">
+           Download the package from <a class="ulink" 
href="http://java.sun.com"; target="_top">Sun</a>.
+         </td><td align="left"> </td></tr><tr><td align="left">JAI</td><td 
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+           Sun's Java Advanced Imaging API can be downloaded from
+           <a class="ulink" 
href="http://java.sun.com/products/java-media/jai/iio.html"; 
target="_top">http://java.sun.com/products/java-media/jai/iio.html</a>.
+         </td><td align="left">
+           JAI is required
+           if you wish to include graphics in a PDF file being
+           generated with FOP.
+         </td><td align="left">
+           Download the package from <a class="ulink" 
href="http://java.sun.com/products/java-media/jai/iio.html"; 
target="_top">Sun</a>.
+         </td><td align="left">
+           Download the package from <a class="ulink" 
href="http://java.sun.com/products/java-media/jai/iio.html"; 
target="_top">Sun</a>.
+         </td><td align="left"> </td></tr></tbody></table></div></div><br 
class="table-break"><p>
+    If you install j2re, set the <span 
class="emphasis"><em>JAVA_HOME</em></span>
+    environment variable to the top directory of the j2re
+    installation.  If you encounter problems with the Java
+    installation, you may also need to add this path to the
+    <span class="emphasis"><em>CLASSPATH</em></span> environment variable.
+  </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="configure"></a>Configuring 
Gnash</h2></div></div></div><p>
+    <span class="application">Gnash</span>, like most GNU projects, allows a 
user to select various
+    options before compiling its source code. These options include
+    selecting from the available features, specifying custom paths for
+    installation, and cross compiling support uses <a class="ulink" 
href="http://www.gnu.org/software/autoconf/"; target="_top">GNU Autoconf</a>
+    for configuration.
+  </p><p>
+    If you opted to download the 
+    <a class="link" href="#">development checkout</a>
+    of <span class="application">Gnash</span>, the <span 
class="emphasis"><em>configure</em></span> script will
+    not be included.  It can be created by running 
+    <span class="emphasis"><em>autogen.sh</em></span> from the source root 
directory:
+    </p><pre class="programlisting">
+      ./autogen.sh
+    </pre><p>
+    Note that there are some 
+    <a class="link" href="#dependencies" title="Code 
Dependencies">dependencies</a> for
+    autogen.
+  </p><p>
+    All the standard <span class="command"><strong>configure</strong></span> 
options
+    are available.  In addition, <span class="application">Gnash</span> has 
two types of
+    options: those that <a class="link" href="#">enable or disable 
+    features</a>, and
+    those that <a class="link" href="#custompath" title="Specifying Custom 
Paths">specify custom paths for 
+    development packages</a>
+    which are not found during the default search.  A complete
+    list of <span class="emphasis"><em>all</em></span> configuration options, 
including
+    standard ones, can be seen by typing:
+    </p><pre class="programlisting">
+      ./configure --help | less
+    </pre><p>
+    Read further for a more detailed explanation of <span 
class="application">Gnash</span>-specific
+    options.
+  </p><p>
+    The syntax for running <span class="emphasis"><em>configure</em></span> is 
as follows:
+    </p><pre class="programlisting">
+      configure <em class="replaceable"><code>&lt;options&gt;</code></em>
+    </pre><p>
+    The example below shows the <span 
class="command"><strong>configure</strong></span> options
+    which create the smallest working standalone version of <span 
class="application">Gnash</span>.  In
+    this example, <span class="command"><strong>configure</strong></span> is 
being run from the
+    source root directory:
+  </p><pre class="programlisting">
+    ./configure --disable-debugger --disable-cygnal \
+    --disable-plugin --enable-media=ffmpeg --enable-gui=sdl
+  </pre><p>
+    By default, you shouldn't need to supply any options to
+    configure. The configure script will attempt to determine what to
+    build based on the development libraries you have installed. The
+    default configuration for Gnash is both GTK and KDE GUIs, the AGG
+    renderer, and Gstreamer for multimedia support, with no extensions
+    built.
+  </p><p>
+    Being highly portable, <span class="application">Gnash</span> has many 
configuration options
+    available, and not all are supposed to work together. A common
+    mistake when configuring <span class="application">Gnash</span> is to 
supply too many options,
+    overdriving <span class="application">Gnash</span>'s ability to do the 
right thing.
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a 
name="configfeatures"></a>Features</h2></div></div></div><p>
+    Some switches can be used during configuration to enable or disable
+    features of <span class="application">Gnash</span>. Some of the most 
important configuration options
+    are:
+  </p><div class="itemizedlist"><ul type="opencircle"><li 
style="list-style-type: circle"><p>
+       <code class="option">--enable-gui</code> lets you specify your GUI of 
choice.
+       The default option is GTK.
+      </p></li><li style="list-style-type: circle"><p>
+       <code class="option">--enable-renderer</code> allows a renderer to be
+       chosen.  The default renderer is AGG.
+      </p></li><li style="list-style-type: circle"><p>
+       <code class="option">--enable-media</code> permits a media handler to be
+       selected.  The default is Gstreamer. 
+      </p></li></ul></div><p>
+    A complete list of available features follows.
+  </p><div class="table"><a name="tb-config-features"></a><p 
class="title"><b>Table 2.4. Configuration Options - Features</b></p><div 
class="table-contents"><table summary="Configuration Options - Features" 
border="1"><colgroup><col align="left"><col 
align="left"></colgroup><thead><tr><th align="left">Option</th><th 
align="left">Function</th></tr></thead><tbody><tr><td align="left"><code 
class="option">--enable-debugger</code></td><td align="left">Enable support for 
the Flash debugger. The debugger is
+         mainly of interest to Flash developers, and is still under 
development.</td></tr><tr><td align="left"><code 
class="option">--enable-lirc</code></td><td align="left">
+           Enable support for the LIRC remote control protocol.
+         </td></tr><tr><td align="left"><code 
class="option">--enable-cygnal</code></td><td align="left">
+           Build the Cygnal streaming media server.
+         </td></tr><tr><td align="left"><code 
class="option">--disable-menus</code></td><td align="left">
+           Disable building all the menus for the GUI. THis is used
+           by mobile devices without as much screen space.
+         </td></tr><tr><td align="left"> <code 
class="option">--enable-docbook</code></td><td align="left">  Enable the 
generation of HTML, INFO, and MAN
+         versions of the documentation from the Docbook XML. You will
+         then be able to use <span class="command"><strong>make 
html</strong></span>,
+         <span class="command"><strong>make info</strong></span>, and <span 
class="command"><strong>make
+         man</strong></span> commands. By default, man,info and html pages
+         are generated.</td></tr><tr><td align="left"><code 
class="option">--enable-gui=gtk|sdl|kde|fltk|fb|hildon|alp</code></td><td 
align="left"><p>Select the Graphic User Interface to use (choose one).</p>
+         <div class="variablelist"><dl><dt><span 
class="term">GTK</span></dt><dd><p>
+                 The GTK+ toolkit, which is the default GUI.
+                 Said to interwork particularly well with firefox.
+               </p></dd><dt><span class="term">Hildon</span></dt><dd><p>
+                 The Hildon toolkist is based on GTK+, and is use by
+                 some mobile devices.
+               </p></dd><dt><span class="term">ALP</span></dt><dd><p>
+                 The ALP "Hiker" GUI is used for the Access Linux platform.
+               </p></dd><dt><span class="term">SDL</span></dt><dd><p>
+                 Simple DirectMedia Layer, a simple and portable GUI.
+                 Its sound facilities are used when --enable-media=ffmpeg
+                 regardless of whether it is also in charge of the GUI.
+               </p></dd><dt><span class="term">KDE</span></dt><dd><p>
+                 An interface adapted to the KDE Desktop Environment.
+                 This must be selected when building the Konqueror plugin
+                 "klash". Furthermore, the only renderer that currently
+                 works with KDE is opengl.
+               </p></dd><dt><span class="term">FLTK</span></dt><dd><p>
+                 Fast Light ToolKit, low on resource usage.
+                 Since all build using fltk are now broken, we declare it
+                 "for developers".
+               </p></dd><dt><span class="term">FB</span></dt><dd><p>
+                 The Linux Frame Buffer, also known as /dev/fb0.
+                 AGG is the only renderer that can currently be used
+                 with the framebuffer GUI.
+               </p></dd></dl></div>
+         </td></tr><tr><td align="left"><code 
class="option">--enable-i810-lod-bias</code>
+         </td><td align="left">Enable fix for Intel 810 LOD bias problem. 
Older versions
+         of libMesa on the Intel i810 or i815 graphics processor
+         need this flag or Gnash will core dump. This has been
+         fixed in newer versions (summer 2005) of libMesa.</td></tr><tr><td 
align="left"><code class="option">--enable-media=ffmpeg|gst|none</code>
+         </td><td align="left">  <p>
+           Select the specified media decoder and sound engine.
+           FFMPEG uses the SDL sound engine; GST uses its own.
+           <code class="option">GST</code> is the default decoder.
+         </p>
+         <p>
+           You should only select one media decoder.
+         </p></td></tr><tr><td align="left">
+           <code class="option">--disable-nsapi</code>
+           <code class="option">--enable-nsapi</code>
+         </td><td align="left">Force disable/enable building the NPAPI plugin.
+         By default the Mozilla plugin is built if the GTK gui 
+         is selected.  Specify the 
+         <code class="option">--with-npapi-plugindir=</code> option to specify 
where the
+         plugin should be installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--disable-kparts</code>
+           <code class="option">--enable-kparts</code>
+         </td><td align="left">Force disable/enable building the KPARTS 
plugin. By default the
+         KDE plugin is built if the kde gui is selected. 
+         Specify the <code class="option">--with-kde-plugindir=</code> and
+         <code class="option">--with-kde-servicesdir=</code> options (or more 
generally
+         the <code class="option">--with-kde-pluginprefix=</code> one) to 
specify where the
+         plugin should be installed. The default installation dir is extracted
+         from kde-config.
+         </td></tr><tr><td align="left">
+           <code class="option">--disable-plugins</code>
+         </td><td align="left">Disable build of both kparts and npapi 
plugins</td></tr><tr><td align="left"><code 
class="option">--enable-renderer=opengl|cairo|agg</code>
+         </td><td align="left">Enable support for the a graphics backend. 
Currently
+         only <code class="option">opengl</code> and
+         <code class="option">agg</code> work sufficiently. OpenGL is
+         used when you have hardware accelerated graphics. AGG i
+         used when you do not have hardware accelerated
+         graphics. Typically most desktop machines have OpenGL
+         support, and most embedded systems do not. OpenGl is the
+         default when building Gnash, although the quality of AGG's
+         rendering is currently superior to OpenGL.</td></tr><tr><td 
align="left"><code class="option">--enable-sdk-install</code>
+         </td><td align="left">Enable installing the libraries and headers as 
an SDK.
+         </td></tr><tr><td align="left"><code 
class="option">--disable-shared</code>
+         </td><td align="left">Enable installing the shared libraries and 
headers.
+         Note that the extensions mechanism may not work if shared
+         libraries are disabled.</td></tr><tr><td align="left"><code 
class="option">--enable-strict</code>
+         </td><td align="left">Turn verbose GCC compiler warnings. By default 
only
+         <code class="option">-Wall</code> is used with GCC.</td></tr><tr><td 
align="left"><code class="option">--enable-fps-debug</code>
+         </td><td align="left">Enable FPS debugging code. When this feature is 
compiled in you can use the -f switch of <span class="application">Gnash</span>
+         to have FPS printed at regular intervals.</td></tr><tr><td 
align="left"><code class="option">--enable-write</code></td><td 
align="left">Makes the Mozilla plugin write the currently playing SWF movie to 
<code class="filename">/tmp</code>.
+         </td></tr><tr><td align="left"><code 
class="option">--disable-mit-shm</code>
+         </td><td align="left">Disable support for the MIT-SHM X extensions.
+         Currently support is only available using GTK gui and AGG renderer.
+         Keeping it enabled is not a problem as it will not be used if not
+         available in the current X session.
+         </td></tr></tbody></table></div></div><br 
class="table-break"></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="custompath"></a>Specifying Custom Paths</h2></div></div></div><p>
+    By default, none of these options should be required
+    unless you want <span class="application">Gnash</span> to use a specific 
version of a
+    development package, or if the configure test fails to
+    find a component.  Please <a class="link" href="#">report the problem</a> 
if a
+    configure test fails.
+  </p><p>
+    The following custom path options are available:
+  </p><div class="table"><a name="tb-configure-paths"></a><p 
class="title"><b>Table 2.5. Custom Path Options</b></p><div 
class="table-contents"><table summary="Custom Path Options" 
border="1"><colgroup><col align="left"><col 
align="left"></colgroup><thead><tr><th align="left">Option</th><th 
align="left">Function</th></tr></thead><tbody><tr><td align="left">
+           <code class="option">--x-includes=DIR</code>
+         </td><td align="left">
+           X include files are in DIR.
+         </td></tr><tr><td align="left">
+           <code class="option">--x-libraries=DIR</code>
+         </td><td align="left">
+           X library files are in DIR.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-libxml=PFX</code>
+         </td><td align="left">
+           Prefix to where libxml is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-libxml-libraries=DIR</code>
+         </td><td align="left">
+           Directory where libxml library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-libxml-includes=DIR</code>
+         </td><td align="left">
+           Directory where libxml header files are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-docbook=DIR</code>
+         </td><td align="left">
+           Directory where the DocBook style-sheets are installed.        
+         </td></tr><tr><td align="left">
+           <code class="option">--with-sdl-prefix=PFX</code>
+         </td><td align="left">
+           Prefix where SDL is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-zlib-incl</code>
+         </td><td align="left">
+           Directory where zlib header is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-zlib-lib</code>
+         </td><td align="left">
+           Directory where zlib library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-jpeg-incl</code>
+         </td><td align="left">
+           Directory where jpeg header is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-jpeg-lib</code>
+         </td><td align="left">
+           Directory where jpeg library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-png-incl</code>
+         </td><td align="left">
+           Directory where png header is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-png-lib</code>
+         </td><td align="left">
+           Directory where png library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-qt-dir</code>
+         </td><td align="left">
+           Directory where QT is installed. This is only used by
+           the Klash plugin.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-qt-includes</code>
+         </td><td align="left">
+           Directory where the QT header files are installed. This
+           is only used by the Klash plugin.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-qt-libraries</code>
+         </td><td align="left">
+           Directory where the QT libraries are installed. This is
+           only used by the Klash plugin.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-npapi-plugindir</code>
+         </td><td align="left">
+           This is the directory to install the NPAPI (Mozilla) plugin in.
+           By default it goes to ~/.mozilla/plugins.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-kde-pluginprefix</code>
+         </td><td align="left">
+           This option sets the default install dir for all KPARTS (kde) files.
+           The plugin will be installed in PREFIX/lib/kde3, use
+           <code class="option">-with-kde-plugindir</code> to override. The 
service file in 
+           PREFIX/share/services, use <code 
class="option">--with-kde-servicesdir</code> to
+           override. The config file in PREFIX/share/config, use
+           <code class="option">--with-kde-configdir</code> to override. The
+           appdata file in PREFIX/share/apps/klash, use
+           <code class="option">--with-kde-appsdatadir</code> to override. 
+         </td></tr><tr><td align="left">
+           <code class="option">--with-kde-plugindir</code>
+         </td><td align="left">
+           This is the directory to install the KPARTS (kde) plugin in.
+           By default it is what's set by --with-kde-pluginprefix or what's 
returned by kde-config --install module --expandvars,
+           or $(prefix)/share/services if kde-config is not found.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-kde-servicesdir</code>
+         </td><td align="left">
+           This is the directory to install the KPARTS (kde) service in.
+           By default it is what's set by --with-kde-pluginprefix or what's 
returned by kde-config --install services --expandvars,
+           or $(libdir)/kde3 if kde-config is not found.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-kde-configdir</code>
+         </td><td align="left">
+           This is the directory to install the KPARTS (kde) config files in.
+           By default it is what's set by --with-kde-pluginprefix or what's 
returned by kde-config --install config --expandvars,
+           or $(prefix)/share/config if kde-config is not found.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-kde-appsdatadir</code>
+         </td><td align="left">
+           This is the directory to install the KPARTS (kde) application data 
files in.
+           By default it is what's set by --with-kde-pluginprefix or what's 
returned by kde-config --install data --expandvars,
+           or $(prefix)/share/apps if kde-config is not found.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-ming</code>
+         </td><td align="left">
+           Ming is used to build test cases, but not by the Gnash
+           player itself.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-ogg_incl</code>
+         </td><td align="left">
+           Directory where the libogg headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-ogg_lib</code>
+         </td><td align="left">
+           Directory where the libogg library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-gstreamer-incl</code>
+         </td><td align="left">
+           Directory where the Gstreamer headers are
+           installed. Gstreamer version 0.10 or greater must be used.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-gstreamer-lib</code>
+         </td><td align="left">
+           Directory where the Gstreamer library is
+           installed. Gstreamer version 0.10 or greater must be used.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-opengl-includes</code>
+         </td><td align="left">
+           Directory where OpenGL (libMesa) headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-opengl-lib</code>
+         </td><td align="left">
+           Directory where the OpenGL (libMesa) library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-glext-incl</code>
+         </td><td align="left">
+           Directory where GtkGlExt headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-glext-lib</code>
+         </td><td align="left">
+           Directory where the GtkGlExt library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-gtk2-incl</code>
+         </td><td align="left">
+           Directory where the Gtk2 headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-gtk2-lib</code>
+         </td><td align="left">
+           Directory where the Gtk2 library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-cairo_incl</code>
+         </td><td align="left">
+           Directory where the Cairo headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-cairo-lib</code>
+         </td><td align="left">
+           Directory where the Cairo library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-glib-incl</code>
+         </td><td align="left">
+           Directory where the Glib headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-glib-lib</code>
+         </td><td align="left">
+           Directory where the Glib library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-pango-incl</code>
+         </td><td align="left">
+           Directory where the Pango headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-pango-lib</code>
+         </td><td align="left">
+           Directory where the Pango library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-atk-incl</code>
+         </td><td align="left">
+           Directory where the ATK headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-atk-lib</code>
+         </td><td align="left">
+           Directory where the ATK library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-pthread-incl</code>
+         </td><td align="left">
+           Directory where the Pthread headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-pthread-lib</code>
+         </td><td align="left">
+           Directory where the Pthread library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-agg-incl</code>
+         </td><td align="left">
+           Directory where the AGG (Antigrain) headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-agg-lib</code>
+         </td><td align="left">
+           Directory where the AGG (Antigrain) library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-ffmpeg-incl</code>
+         </td><td align="left">
+           Directory where the FFMPEG headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-ffmpeg-lib</code>
+         </td><td align="left">
+           Directory where the FFMPEG library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-boost-incl</code>
+         </td><td align="left">
+           Directory where the Boost headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-boost-lib</code>
+         </td><td align="left">
+           Directory where the Boost library is installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-curl-incl</code>
+         </td><td align="left">
+           Directory where the libCurl headers are installed.
+         </td></tr><tr><td align="left">
+           <code class="option">--with-curl-lib</code>
+         </td><td align="left">
+           Directory where the libCurl library is installed.
+         </td></tr></tbody></table></div></div><br 
class="table-break"></div></div><p>
+    Once you have <a class="link" href="#">configured</a> <span 
class="application">Gnash</span>,
+    you are ready to build the code.  <span class="application">Gnash</span> 
is built using
+    <span class="emphasis"><em>GNU make</em></span>.
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="compile"></a>Compiling the 
Code</h2></div></div></div><p>
+      The most basic way to compile code is simply:
+      </p><pre class="programlisting">
+       make
+      </pre><p>
+      If the compilation ends with an error, check the output of 
+      <span class="emphasis"><em>configure</em></span> and ensure that you are 
not missing 
+      any required prerequisites.  The output of <span 
class="command"><strong>make</strong></span> can be verbose; you may wish to 
pipe the output to a file.
+    </p><p>
+      The variables used by <span class="command"><strong>make</strong></span> 
can be redefined when
+      the program is invoked, if you desire it.   The most interesting flags
+      are <span class="emphasis"><em>CFLAGS</em></span> and <span 
class="emphasis"><em>CXXFLAGS</em></span>,
+      which are often used to enable debugging or turn of optimization.
+      The default value for both of these variables is
+      <span class="emphasis"><em>-O2 -g</em></span>.  A list of influential 
+      environment variables can be seen in the configuration help:
+    </p><pre class="programlisting">./configure --help</pre><p>
+      In the following example, debugging is enabled and optimization is
+      disabled:
+    </p><pre class="programlisting">make CFLAGS=-g CXXFLAGS=-g</pre></div><div 
class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" 
style="clear: both"><a name="processdoc"></a>Creating the 
Documentation</h2></div></div></div><p>
+      By default, documentation is not built when you
+      <a class="link" href="#install" title="Installation">install</a> <span 
class="application">Gnash</span>.  This is because
+      there are a number of <a class="link" href="#">dependencies 
+      for the documentation</a>.  Documentation is built when it
+      is specified with a specific target in the generated 
+      <span class="command"><strong>Makefile</strong></span> in the <code 
class="filename">doc/C</code>
+      sub-directory.  If you type <span class="command"><strong>make 
install</strong></span> in
+      this directory, all documents will be built.
+    </p><p>
+      You must specify a target output format when you wish to create
+      documentation.  The available output formats are: <span 
class="command"><strong>html</strong></span>,
+      <span class="command"><strong>pdf</strong></span>, <span 
class="command"><strong>info</strong></span>, 
+      <span class="command"><strong>man</strong></span>, and <span 
class="command"><strong>alldocs</strong></span>.  
+      It is also possible to output <span class="command"><strong>GNOME 
help</strong></span> if
+      the <a class="link" href="#">configure option</a>
+      <code class="option">--enable-ghelp</code> was used.  
+      The <span class="command"><strong>alldocs</strong></span> target will 
build all output formats
+      except <span class="emphasis"><em>GNOME help</em></span>.
+      For example, to create HTML output, type:
+      </p><pre class="programlisting">
+       make html
+      </pre><p>
+    </p><p>
+      <span class="application">Gnash</span> also uses <a class="ulink" 
href="http://www.stack.nl/~dimitri/doxygen/index.html"; 
target="_top">Doxygen</a> to produce <span class="emphasis"><em>HTML</em></span>
+      documentation of <span class="application">Gnash</span> internals.  You 
must have Doxygen installed
+      to produce this documentation, which is built from the
+      <code class="filename">doc</code> directory with the command (documents
+      will be placed in the subdirectory <code 
class="filename">apidoc/html</code>):
+      </p><pre class="programlisting">
+       make apidoc
+      </pre><p>
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="runtests"></a>Running the Tests</h2></div></div></div><p>
+      Before beginning the potentially lengthy install, it is wise to
+      test the installation.  If a test fails, please report it by
+      following the <a class="link" href="#">instructions for
+      reporting a bug</a>. 
+    </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="dejagnu"></a>Using DejaGnu</h3></div></div></div><p>
+       
+       The easiest way to run <span class="application">Gnash</span>'s test 
suite is to install
+       <span class="emphasis"><em><a class="ulink" 
href="http://www.gnu.org/software/dejagnu"; 
target="_top">DejaGnu</a></em></span>.
+       After installing DejaGnu, run:
+       </p><pre class="programlisting">
+         make check
+       </pre><p>
+      </p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 
class="title"><a name="testing_verbosity"></a>Increasing 
Verbosity</h5></div></div></div><p>
+         If you encounter a problem with a test, increasing the
+         verbosity may make the issue easier to spot.
+         Additional details are visible when 
+         <span class="emphasis"><em>RUNTESTFLAGS</em></span> are used to add 
the 
+         <span class="emphasis"><em>verbose</em></span> and <span 
class="emphasis"><em>all</em></span> options.
+         The <code class="option">verbose</code> option prints more 
information about the testing process, while
+         the <code class="option">all</code> option includes details on 
passing tests.  
+         </p><pre class="programlisting">
+           make check RUNTESTFLAGS="-v -a"
+         </pre><p>
+       </p></div><div class="sect4" lang="en"><div 
class="titlepage"><div><div><h5 class="title"><a 
name="running_some_tests"></a>Running Some Tests</h5></div></div></div><p>
+         It is possible to run just a single test, or 
+         a subdirectory of tests, by specifying the directory or 
+         compiled test file.
+       </p><p>
+         Some tests rely on <span 
class="emphasis"><em>testsuite/Dejagnu.swf</em></span>,
+         which in turn relies on <span class="emphasis"><em>Ming</em></span>.
+         This file is created when you run <span class="command"><strong>make 
check</strong></span> for the entire
+         testsuite, and can also be created on demand:
+         </p><pre class="programlisting">
+           make -C testsuite Dejagnu.swf 
+         </pre><p>
+       </p><p>
+         In this example, the <span 
class="command"><strong>clip_as_button2</strong></span> test is compiled and
+         run:
+         </p><pre class="programlisting">
+           make -C testsuite/samples clip_as_button2-TestRunner 
+           cd testsuite/samples &amp;&amp; ./clip_as_button2-TestRunner
+         </pre><p>
+         This creates and runs all the tests in the directory
+         <code class="filename">movies.all</code>:
+         </p><pre class="programlisting">
+           make -C testsuite/movies.all check
+         </pre><p>
+       </p></div></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="manually"></a>Running 
The Tests Manually</h3></div></div></div><p>
+       You may also run test cases by hand, which can be useful if you
+       want to see all the debugging output from the test case.  Often
+       the messages which come from deep within <span 
class="application">Gnash</span> are most useful for
+       development.
+      </p><p>
+       The first step is to compile the test case, which can be done
+       with <code class="filename">make XML-v#.swf</code> where the '#' is 
replaced
+       with the <span class="emphasis"><em>target</em></span> SWF version or 
versions.  
+       For example:
+       </p><pre class="programlisting">
+         make XML-v{5,6,7,8}.swf
+       </pre><p>
+      </p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 
class="title"><a name="manual_compiled_tests"></a>Movie 
tests</h5></div></div></div><p>
+         This creates a Flash movie version of the test case, which
+         can be run with a standalone Flash player.  For instance,
+         the target for SWF version 6 could be run with <span 
class="application">Gnash</span>:
+         </p><pre class="programlisting">
+           gnash -v XML-v6.swf
+         </pre><p>
+       </p></div><div class="sect4" lang="en"><div 
class="titlepage"><div><div><h5 class="title"><a 
name="manual_actionscript_tests"></a>ActionScript Unit 
Tests</h5></div></div></div><p>
+         Unit tests for ActionScript classes in <span 
class="command"><strong>testsuite/actionscript.all</strong></span>
+         are run without a graphical display:
+         </p><pre class="programlisting">
+           gprocessor -v XML-v6.swf
+         </pre><p>
+       </p></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="install"></a>Installation</h2></div></div></div><p>
+    Now that <span class="application">Gnash</span> has been compiled and 
tested, use the following command to install it:
+    </p><pre class="programlisting">
+      make install
+    </pre><p>
+    The above command installs the standalone player.  If the correct
+    files were found by <span 
class="command"><strong>configure</strong></span> and if the
+    <code class="option">--disable-plugin</code> option was not specified, the
+    <span class="application">Gnash</span> browser plugin is also installed. 
+  </p><p>
+    <span class="application">Gnash</span> installs a number of <a 
class="link" href="#libinstall" title="Libraries">libraries</a>,
+    namely: <span class="emphasis"><em>libgnashbase</em></span>,
+    <span class="emphasis"><em>libgnashamf</em></span>, <span 
class="emphasis"><em>libgnashmedia</em></span>,
+    <span class="emphasis"><em>libserver</em></span>, and <span 
class="emphasis"><em>libgnashplugin</em></span>.
+    <a class="link" href="#appinstall" title="Executables">Executables</a>
+    consist of the (optional) plugin, <code class="filename">gprocessor</code>,
+    <code class="filename">cygnal</code>,  <code 
class="filename">dumpshm</code>,
+    <code class="filename">soldumper</code>, and <code 
class="filename">gnash</code>.
+    <a class="link" href="#docinstall" title="Documentation">Documentation</a> 
may also be installed.
+    The installation location is controlled with the
+    <span class="emphasis"><em>--prefix</em></span> <a class="link" 
href="#custompath" title="Specifying Custom Paths">configure
+    option</a>, except for plugins, which are explicitly set with
+    <span class="emphasis"><em>--plugin-dir</em></span>.
+  </p><p>
+    Note that if you are using a single file-system <span 
class="emphasis"><em>NFS</em></span>
+    mounted to multiple platforms, the 
+    <a class="link" href="#custompath" title="Specifying Custom 
Paths">configuration option</a> 
+    <span class="emphasis"><em>--exec-prefix</em></span> may be used to 
specify where
+    platform-dependent executables and libraries are installed.
+  </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="libinstall"></a>Libraries</h3></div></div></div><p>
+      Installed libraries are located in 
+      <code class="filename">/usr/local/lib</code> by default.
+      If the <span class="emphasis"><em>--prefix</em></span> option was used in
+      <a class="link" href="#">configuration</a>, the libraries will
+      be installed in the directory <code class="filename">lib</code> inside 
the
+      path you specified.  If the libraries are stored in a non-standard
+      location, you must identify the path in one of two ways.
+    </p><p>
+      The traditional way to do this on UNIX
+      platforms is to set the <span 
class="emphasis"><em>LD_LIBRARY_PATH</em></span> variable
+      to the path plus <code class="filename">/lib</code>.  For example, if you
+      installed in <code class="filename">/home/gnash</code>, the 
+      <span class="emphasis"><em>LD_LIBRARY_PATH</em></span> path would be
+      <code class="filename">/home/gnash/lib</code>.  Multiple paths are 
delimited
+      with a colon (':').
+    </p><p>
+      GNU/Linux allows the custom path to be added to
+      <code class="filename">/etc/ld.so.conf</code>.  After adding the path,
+      run <span class="emphasis"><em>ldconfig</em></span> as root to update 
the runtime
+      cache.
+    </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="appinstall"></a>Executables</h3></div></div></div><p>
+      The Mozilla plugin is built from headers (the Mozilla SDK) provided with 
Gnash and
+      does not need extra development packages to be installed. By default, the
+      plugin is installed to <code 
class="filename">~/.mozilla/plugins/</code>. To enable
+      the plugin for other users, copy the file <code 
class="filename">libgnashplugin.so</code>
+      to <code class="filename">.mozilla/plugins/</code> in their home 
directory.
+      You may also specify the plugin installation directory by using the 
+      <code class="option">--with-plugindir</code> <a class="link" 
href="#custompath" title="Specifying Custom Paths">option 
+      at configuration time</a>.
+    </p><p>
+      These defaults are likely to change in future versions of Gnash.
+    </p><p>
+      The remaining executables are installed in the <code 
class="filename">bin</code>
+      subdirectory of the directory specified by during configuration.
+      If no path was specified, the default is 
+      <code class="filename">/usr/local/bin</code>.
+    </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="docinstall"></a>Documentation</h3></div></div></div><p>
+      Documentation is not built by default; please refer to the 
+      <a class="link" href="#processdoc" title="Creating the 
Documentation">section on documentation</a> for
+      more information on building documentation.
+    </p><p>
+      <span class="command"><strong>man</strong></span> and <span 
class="command"><strong>info</strong></span> 
+      are installed in <code class="filename">/usr/local/share/man</code>
+      and <code class="filename">/usr/local/share/info</code> respectively, 
unless
+      the <code class="option">--mandir</code> or <code 
class="option">--infodir</code>
+      <a class="link" href="#custompath" title="Specifying Custom 
Paths">configuration options</a> are used.
+    </p><p>
+      <span class="emphasis"><em>GNOME help</em></span> documentation uses the 
directory
+      <code class="filename">/usr/local/share/gnash/doc/gnash/C/</code> by 
default.
+      A configuration file in the <span class="application">Gnash</span> 
source tree,
+      <code class="filename">doc/C/gnash.omf</code> is used to specify under
+      which menu item <span class="application">Gnash</span> appears in the 
<span class="emphasis"><em>GNOME help</em></span>
+      system.
+    </p></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="cross"></a>Cross Configuring</h2></div></div></div><p>
+    To cross configure and compile <span class="application">Gnash</span>, 
begin by building a target system
+    on your workstation.  This includes cross compilers for the target
+    architecture, and some system headers. 
+    You will also need to cross compile all the <a class="link" 
href="#">dependencies  
+    </a> normally needed to build Gnash. This can on occasion be a
+    daunting process, as not all libraries will cross configure and cross
+    compile. There is more information about cross compiling all the
+    dependant packages on the <a class="ulink" href="http://www.gnashdev.org"; 
target="_top">http://www.gnashdev.org</a> web
+    site.
+  </p><p>
+    If you need to build your own tool chain, that is beyond the scope
+    of this manual. There are various resources on the web for howto's
+    on building GCC based cross toolchains. Two popular sites are
+    <a class="ulink" href="http://frank.harvard.edu/~coldwell/toolchain/"; 
target="_top">http://frank.harvard.edu/~coldwell/toolchain/</a>
+    and <a class="ulink" href="http://www.kegel.com/crosstool/"; 
target="_top">http://www.kegel.com/crosstool/</a>. This
+    can also be a very time consuming and frustrating process, even
+    for experienced developers.
+  </p><p>
+    Because the process of building your own cross tool chain can be
+    harder than one may wish, there are several other cross
+    development environments that simulate a native environment to
+    make it easier to develop. These also let you develop for both
+    native and cross builds. Several popular ones are 
+    <a class="ulink" 
href="http://www.access-company.com/products/linux/alp.html"; target="_top">
+    Access Linux Platform</a>, 
+    <a class="ulink" href="http://www.scratchbox.org/"; target="_top">
+    Scratchbox</a>, 
+    <a class="ulink" href="http://www.openembedded.org/"; target="_top">
+    Open Embedded</a>, 
+    <a class="ulink" href="http://maemo.org/"; target="_top">
+    Maemo</a>.
+  </p><p>
+    To build for an ARM based system on an x86 based systems,
+    configure like this using the traditional style cross toolchain,
+    configure like this:
+  </p><pre class="programlisting">
+    ../../gnash/configure --build=i686-pc-linux-gnu
+    --host=arm-linux --prefix=/usr/local/arm/oe --disable-nsapi
+    --disable-kparts --enable-gui=fb --enable-renderer=agg
+    --disable-shared --disable-menus
+    
+  </pre><p>
+    The important configuration options are the ones which specify the
+    architecture for the build:
+  </p><div class="variablelist"><dl><dt><span 
class="term">--target</span></dt><dd><p>
+         The target architecture, where the final executables are expected
+         to run.
+       </p></dd><dt><span class="term">--host</span></dt><dd><p>
+         The host architecture, where the executables are expected
+         to run.  Usually this is the same as the <span 
class="emphasis"><em>--target</em></span>,
+         except when building a compiler as a Canadian Cross.  In this
+         case, you might build a cross compiler on a UNIX system which
+         runs on a win32 machine, producing code for a third architecture,
+         such as ARM.  In this example, <span 
class="emphasis"><em>--target</em></span> would
+         be 'arm-unknown-linux-gnu', while <span 
class="emphasis"><em>--host</em></span> would 
+         be 'win32'.
+       </p></dd><dt><span class="term">--build</span></dt><dd><p>
+         This is the system the build is running on.
+       </p></dd></dl></div><p>
+    The following example of <span class="emphasis"><em>configure</em></span> 
builds for an
+    ARM system on an x86 system.  It was run after an ARM system was built
+    in <code class="filename">/usr/arm</code> and other required libraries 
were 
+    cross compiled.
+    </p><pre class="programlisting">
+      ./configure -target=arm-unknown-linux-gnu --prefix=/usr/arm \
+      --host=arm-unknown-linux-gnu --build=i686-pc-linux-gnu --disable-plugin
+    </pre><p>
+  </p></div></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="internals"></a>Chapter 
3. Software Internals</h2></div></div></div><div class="toc"><p><b>Table of 
Contents</b></p><dl><dt><span class="sect1"><a href="#tour">A Tour of 
Gnash</a></span></dt><dd><dl><dt><span class="sect2"><a 
href="#The%20Libraries">The Libraries</a></span></dt><dt><span class="sect2"><a 
href="#apps">The Applications</a></span></dt><dt><span class="sect2"><a 
href="#plugin">The Plugin</a></span></dt><dt><span class="sect2"><a 
href="#logging">The Debug Logging System</a></span></dt></dl></dd><dt><span 
class="sect1"><a href="#soundhandlers">Sound handling in 
Gnash</a></span></dt><dd><dl><dt><span class="sect2"><a 
href="#soundtypes">Sound types</a></span></dt><dt><span class="sect2"><a 
href="#soundparsing">Sound parsing</a></span></dt><dt><span class="sect2"><a 
href="#soundplayback">Sound playback</a></span></dt><dt><span class="sect2"><a 
href="#sdlsound">The SDL sound backend</a></span></dt><dt><span 
class="sect2"><a href="#gstreamer">The Gstreamer 
backend</a></span></dt><dt><span class="sect2"><a href="#audio-future">Future 
audio backends</a></span></dt><dt><span class="sect2"><a 
href="#gstreamer-details">Detailed description of the Gstreamer 
backend</a></span></dt></dl></dd><dt><span class="sect1"><a 
href="#testing">Testing </a></span></dt><dd><dl><dt><span class="sect2"><a 
href="#testtools">Testing Tools</a></span></dt><dt><span class="sect2"><a 
href="#testcases">Test Cases</a></span></dt><dt><span class="sect2"><a 
href="#writeastests">Writing ActionScript Tests</a></span></dt><dt><span 
class="sect2"><a href="#writemingtests">Writing Ming-based self-contained SWF 
tests</a></span></dt><dt><span class="sect2"><a 
href="#writing_dejagnu_so_tests">Writing self-contained SWF tests with other 
compilers</a></span></dt><dt><span class="sect2"><a 
href="#writing_test_runners">Writing Test 
Runners</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="tour"></a>A Tour of Gnash</h2></div></div></div><p>
+      The top level of Gnash has several libraries, <span 
class="emphasis"><em>libgnashbase</em></span>,
+      <span class="emphasis"><em>libgnashgeo</em></span>, <span 
class="emphasis"><em>libgnashserver</em></span>,
+      <span class="emphasis"><em>libgnashasobjs</em></span> and
+      <span class="emphasis"><em>libgnashbackend</em></span>. There are 
several utility programs 
+      included for debug parsing and processing of Flash movie files,
+      and other useful utilitis for examining local Shared Objects and
+      sniffingh LocalConnections.
+    </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="The%20Libraries"></a>The 
Libraries</h3></div></div></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libbase"></a>libgnashbase</h4></div></div></div><p>
+         Libgnashbase contains support classes used by the rest of the
+         code.This library has no dependencies on any of the other
+         <span class="application">Gnash</span> libraries.
+       </p><p>
+         <span class="application">Gnash</span> makes heavy use of smart 
pointers, so memory allocations
+         are freed up automatically by the interpreter. Both STL and
+         Boost smart pointers are used.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libgnashgeo"></a>libgnashgeo</h4></div></div></div><p>
+         Libgnashgeo contains code for device independent graphics routines.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libgnashgui"></a>libgnashgui</h4></div></div></div><p>
+         Libgnashgui contains code for a portable GUI class that
+         supports using GTK2, a framebuffer, SDL, or KDE, FLTK, or Aqua.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libgnashserver"></a>libgnashserver</h4></div></div></div><p>
+         Libgnashserver is the guts of the interpreter itself. This is where
+         the main code for the interpreter lives. Includes in
+         libserver are the two support libraries for the parser and
+         the core of the virtual machine.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libgnashasobjs"></a>libgnashasobjs</h4></div></div></div><p>
+         Libgnashasobjs contains all the ActionScript classes used by
+         the interpreter.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libgnashamf"></a>libgnashamf</h4></div></div></div><p>
+         AMF is the data format used internally by SWF files. This is
+         Gnash's support library to handle AMF data. This is used by
+         the ActionScript classes SharedObject and
+         LocalConnection. This is also used by the NetStream class
+         when using thre RTMP streaming network protocol.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libgnashbackend"></a>libgnashbackend</h4></div></div></div><p>
+         Libgnashbackend is a library containing the rendering
+         code that glues this display to the Gnash. Supported
+         rendering backends are OpenGL, Cairo, and AGG.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libgnashpluin"></a>libgnashplugin</h4></div></div></div><p>
+         Libgnashplugin is the Mozilla/Firefox plugin.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="libklashpart"></a>libklashpart</h4></div></div></div><p>
+         Libklashpart is the Konqueror plugin.
+       </p></div></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="apps"></a>The 
Applications</h3></div></div></div><p>
+       There are currently a few standalone programs in Gnash,
+        which serve to either assist with Gnash development or play flash
+        movies.
+      </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 
class="title"><a name="Gnash"></a>The Standalone 
Player</h4></div></div></div><p>
+         This is the standalone OpenGL back-end used to play
+         movies. There are several command-line options and keyboard
+         control keys used by Gnash.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="processor"></a>Gprocessor</h4></div></div></div><p>
+         Gprocessor is used to print out the actions (using the -va
+         option) or the parsing (using the -vp option) of a flash
+         movie. It is also used to produce the <span 
class="emphasis"><em>.gsc</em></span>
+         files that Gnash uses to cache data, thereby speeding up the
+         loading of files.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="soldumper"></a>SOLdumper</h4></div></div></div><p>
+         SOLDumper is a utility program used to find and dump the
+         content of <span class="emphasis"><em>Local Shared 
Objects</em></span>, also
+         called "Flash Cookies" by some.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="dumpshm"></a>Dumpshm</h4></div></div></div><p>
+         Dumpshm is a program used to find and dump the contents of
+         the <span class="emphasis"><em>LocalConnection</em></span> shared 
memory segment.
+       </p></div></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="plugin"></a>The 
Plugin</h3></div></div></div><p>
+       The plugin is designed to work within Mozilla or Firefox,
+       although there is Konqueror support as well. The plugin uses
+       the Mozilla NSAPI plugin API to be cross platform, and is
+       portable, as well as being well integrated into Mozilla based
+       browsers.
+      </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 
class="title"><a name="pluginstatus"></a>Current 
Status</h4></div></div></div><p>
+         As of March 30, 2006, the plugin works! This works in a
+         fashion similar to MozPlugger in that the standalone player
+         is used instead of using a thread. This gets around the
+         issue of having to maintain a separate player to support the
+         plugin. It also gets around the other issues that Gnash
+         itself is not thread safe at this time.
+       </p><p>
+         As of Jan, 2007, streaming video, ala "YouTube"
+         works, along with other video sharing sites.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a name="gui"></a>GUI 
Support</h4></div></div></div><p>
+         Any plugin that wants to display in a browser window needs
+         to be tied into the windowing system of the platform being
+         used. On GNU/Linux systems, Firefox is a GTK2+ application.
+         There is also KDE support through the use of the Klash
+         plugin.
+       </p><p>
+         Gnash can use either several different GUI toolkits to create the 
window,
+         and to handle events for the standalone player.
+       </p><p>
+         The SDL version is more limited, but runs on all
+         platforms, including win32. It has no support for event
+         handling, which means mouse clicks, keyboard presses, and
+         window resizing doesn't work. I personally find the default
+         event handler slow and unresponsive. Gnash has support to
+         use fast events, (currently not enabled) which is an SDL
+         hack using a background thread to pump events into the SDL
+         event queue at a much higher rate.
+       </p><p>
+         There are a variety of development libraries that build a GUI
+         widget system on top of SDL and OpenGL. The use of these to
+         add menus and dialog boxes to the SDL version is being
+         considered. 
+       </p><p>
+         The GTK support is currently the most functional, and the
+         best integrated into Firefox. The performance of this
+         version is better than the SDL version because of the more
+         efficient event handling within GTK. For the best end user
+         experience, use the GTK enabled version.
+       </p><p>
+         GTK also allows Gnash to have menus and dialog
+         boxes. Currently this is only being utilized in a limited
+         fashion for now. There is a right mouse button menu that
+         allows the user to control the movie being player the same
+         way the existing keyboard commands do.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="mozplugger"></a>Mozplugger</h4></div></div></div><p>
+         <a class="ulink" href="http://mozplugger.mozdev.org/"; 
target="_top">Mozplugger</a> is a
+         <span class="emphasis"><em>Mozilla/Firefox</em></span> plugin that 
uses external
+         programs to play video, audio, and other multimedia content
+         in the browser. With some support added to the external
+         application, it's possible to force the external program to
+         use the internal window in the browser where this plugin is
+         supposed to display. This enables one to then run the
+         standalone player and display its output in the browser.
+       </p><p>
+         While this is not an optimal solution, it does enable one to
+         use Gnash as the flash player when browsing. The main issue
+         appears to be that the Flash movie being played doesn't get
+         any mouse or keyboard input. That may be a mozplugger
+         configuration issue, however.
+       </p><p>
+         Use of MozPlugger is obsolete now that the Gnash plugin
+         works. Still, this may be useful still on some platforms.
+       </p><p>
+         Add this to your <span 
class="emphasis"><em>$(HOME)/.mozilla/mozpluggerrc</em></span>
+         file to enable this:
+
+         </p><pre class="programlisting">
+           application/x-shockwave-flash:swf:Shockwave Gnash
+        nokill embed noisy ignore_errors hidden fill swallow(Gnash) loop: 
gnash -v "$file" -x $window
+        : gnash -v "$file" -x $window
+         </pre><p>
+       </p><p>
+         Once this is added, you must delete the
+         <span 
class="emphasis"><em>$(HOME)/.mozilla/firefox/pluginreg.dat</em></span> file to
+         force Firefox to register the plugins again. This is an
+         ASCII text file, so if the patch has been added correctly,
+         you'll see an entry for <span class="emphasis"><em>swf</em></span> 
files after it is
+         recreated. You will need to restart Firefox to recreate this
+         file.
+       </p><p>
+         This file is not recreated immediately when restarting
+         Firefox, but waits till the first time a plugin is used. You
+         can force creation of this file by typing
+         <span class="emphasis"><em>about:plugins</em></span> into the URL 
entry of the browser
+         window. The output will also contain information about the
+         mozplugger. You should see an entry for Gnash now.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="Klash"></a>Klash</h4></div></div></div><p>
+         Klash is MozPlugger type support for KDE's Konqueror web
+         browser. Klash makes Gnash a <span 
class="emphasis"><em>kpart</em></span>, so it's
+         integrated into KDE better than when using MozPlugger. Klash
+         uses the standalone player, utilizing Gnash's "-x" window
+         plugin command line option.
+       </p><p>
+         By default, Klash is not built. To enable building Klash,
+         use the <span class="emphasis"><em>--enable-klash</em></span> option 
when
+         configuring. Other than installing, there is nothing else
+         that needs to be done to install Klash.
+       </p></div></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="logging"></a>The Debug 
Logging System</h3></div></div></div><p>
+    Gnash supports a debug logging system which supports both C and C++
+    natively. This means you can use both <span 
class="emphasis"><em>printf()</em></span> style
+    debug messages and C++ <span class="emphasis"><em>iostreams</em></span> 
style, where you can
+    print C++ objects directly as you would when using
+    <span class="emphasis"><em>cout</em></span>.
+  </p><p>
+    In the beginning, Gnash only supported the C API for debug
+    logging, so it is the most heavily used in Gnash. This API was used in
+    the <span class="emphasis"><em>log_msg()</em></span> and <span 
class="emphasis"><em>log_error()</em></span> functions,
+    and used a callback to set them up.
+  </p><p>
+    If a filename is not specified at object construction time, a
+    default name of <span class="emphasis"><em>gnash-dbg.log</em></span> is 
used. If Gnash is
+    started from the command line, the debug log will be created in
+    the current directory. When executing Gnash from a launcher under
+    <span class="emphasis"><em>GNOME</em></span> or <span 
class="emphasis"><em>KDE</em></span> the debug file goes in your
+    home directory, since that's considered the current directory.
+  </p><p>
+    There is common functionality between using the C or C++
+    API. Optional output is based on flags that can be set or
+    unset. Multiple levels of verbosity are supported, so you can get
+    more output by supplying multiple <span 
class="emphasis"><em>-v</em></span> options on the
+    command line. You can also disable the creation of the debug log.
+  </p><p>
+    Currently the use of the C++ API for logging is discouraged, do to
+    performance issues.and the generic log_msg() has been replaced by
+    more spcific function calls to allow more control of what gets
+    displayed and logged.
+  </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 
class="title"><a name="capi"></a>Logging System C API</h4></div></div></div><p>
+      These functions are clones of the originals as they were used
+      for Gnash. These function the same as always except output can
+      be logged to disk now as well. These currently print no
+      timestamp with the output, which is the older functionality. As
+      these functions are implemented on top of the C++ API now, they
+      can be used without corrupting the output buffers.
+    </p><div class="variablelist"><dl><dt><span class="term">log_error(const 
char* fmt, ...)</span></dt><dd><p>
+           Display an error message if verbose output is enabled. By
+           default the error messages are always written to the disk
+           file, but optionally displayed in the terminal.
+         </p></dd><dt><span class="term">void log_unimpl</span></dt><dd><p>
+           Displays a warning to the user about missing Gnash features.
+           We expect all calls to this function to disappear over time, as we
+           implement those features of Flash.
+         </p></dd><dt><span class="term">void log_trace</span></dt><dd><p>
+           Used only for explicit user traces
+         </p></dd><dt><span class="term">void log_debug</span></dt><dd><p>
+           Logs debug information.
+         </p></dd><dt><span class="term">void log_action</span></dt><dd><p>
+           Log action execution information. Wrap all calls to this
+           function (and other related statements) into an
+           IF_VERBOSE_ACTION macro, so to allow completely removing
+           all the overhead at compile time and reduce it at
+           runtime.
+         </p></dd><dt><span class="term">void log_parse</span></dt><dd><p>
+           Log SWF parsing  Wrap all calls to this function (and
+           other related statements) into an IF_VERBOSE_PARSE macro,
+           so to allow completely removing all the overhead at
+           compile time and reduce it at runtime.
+         </p></dd><dt><span class="term">void log_security</span></dt><dd><p>
+           Display a message with security related information.
+         </p></dd><dt><span class="term">void log_swferror</span></dt><dd><p>
+           This indicates an error in how the binary SWF file was
+           constructed, i.e.probably a bug in the tools used to build
+           the SWF file. Wrap all calls to this function (and other
+           related statements) into an IF_VERBOSE_MALFORMED_SWF
+           macro, so to allow completely removing all the overhead at
+           compile time and reduce it at runtime.
+         </p></dd><dt><span class="term">log_warning(const char* fmt, 
...)</span></dt><dd><p>
+           Display a warning message if verbose output is enabled. By
+           default the error messages are always written to the disk
+           file, but optionally displayed in the terminal.
+         </p></dd></dl></div></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a name="cppapi"></a>Logging 
System C++ API</h4></div></div></div><p>
+      This is the new C++ streams based API that can be used to print
+      C++ objects natively. All output lines are timestamped.       
+    </p><p>
+      There are two macros used for program tracing. these can be used
+      in both C or C++ code with one little difference. Since C
+      doesn't have destructors, you must call
+      <span class="emphasis"><em>GNASH_REPORT_RETURN</em></span> at the end of 
a function to
+      display the function returning message.
+    </p><div class="variablelist"><dl><dt><span 
class="term">GNASH_REPORT_FUNCTION;</span></dt><dd><p>
+           When this is included in a C++ method, a message is
+           printed when entering and exiting this method by hooking
+           into the constructor and destructor. These are always
+           written to the disk file, but optionally written to the
+           screen only at the highest levels of verbosity.
+         </p></dd><dt><span 
class="term">GNASH_REPORT_RETURN;</span></dt><dd><p>
+           This is used by C functions to print the returning from
+           function debug message. For C++, this macro is executed
+           automatically by the destructor.
+         </p></dd></dl></div><p>
+      This is the main API for the logging system. By default
+      everything is setup to write to the default
+      <span class="emphasis"><em>gnash-dbg.log</em></span> file whenever a 
verbose option is
+      supplied. Optionally it is possible to open a log file with a
+      specified name, allowing multiple output files.
+    </p><div class="variablelist"><dl><dt><span 
class="term">closeLog(void)</span></dt><dd><p>
+           Close a debug log. The disk file remains.
+         </p></dd><dt><span class="term">removeLog(void)</span></dt><dd><p>
+           Delete the debug log file from disk.
+         </p></dd><dt><span class="term">setVerbosity(void)</span></dt><dd><p>
+           Increment the verbosity level.
+         </p></dd><dt><span class="term">setVerbosity(int)</span></dt><dd><p>
+           Set the verbosity level.
+         </p></dd><dt><span class="term">setStamp(bool flag)</span></dt><dd><p>
+           If <span class="emphasis"><em>flag</em></span> is <span 
class="emphasis"><em>true</em></span>, then print a
+           timestamp prefixed to every output line. If
+           <span class="emphasis"><em>flag</em></span> is <span 
class="emphasis"><em>false</em></span>, then don't print
+           a timestamp.
+         </p></dd><dt><span class="term">setWriteDisk(bool 
flag)</span></dt><dd><p>
+           If <span class="emphasis"><em>flag</em></span> is <span 
class="emphasis"><em>true</em></span>, then create the
+           disk file. If <span class="emphasis"><em>flag</em></span> is <span 
class="emphasis"><em>false</em></span>,
+           then don't create the disk file.
+         </p></dd></dl></div></div></div></div><div class="sect1" 
lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: 
both"><a name="soundhandlers"></a>Sound handling in 
Gnash</h2></div></div></div><p>
+      When a SWF-file contains audio Gnash uses its sound handlers to play it.
+      At the moment there are two sound handlers, but it is likely that more 
+      will be made.
+    </p><p>
+      There are two different settings related to sound support:
+      <span class="emphasis"><em><a class="link" 
href="#">pluginsound</a></em></span> and 
+      <span class="emphasis"><em><a class="link" 
href="#">sound</a></em></span>. 
+      This was done in order to allow the plugin to be independently 
+      configured, for instance to block sound from advertisements.
+    </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="soundtypes"></a>Sound types</h3></div></div></div><p>
+        Sounds can be divided into two groups: event-sounds and soundstreams.
+       Event-sounds are contained in a single SWF frame, but the playtime can
+       span multiple frames. Soundstreams can be (and normally are) divided
+       between the SWF frames the soundstreams spans. This means that if a
+       gotoframe-action jumps to a frame which contains data for a soundstream,
+       playback of the stream can be picked up from there. 
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="soundparsing"></a>Sound 
parsing</h3></div></div></div><p>
+        When Gnash parses a SWF-file, it creates a sound handler if possible
+       and hands over the sounds to it. Since the event-sounds are contained 
+       in one frame, the entire event-sound is retrieved at once, while a 
+       soundstream maybe not be completely retrieved before the entire 
+       SWF-file has been parsed. But since the entire soundstream doesn't need
+       to be present when playback starts, it is not necessary to wait. 
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="soundplayback"></a>Sound 
playback</h3></div></div></div><p>
+       When a sound is about to be played Gnash calls the sound handler, which
+       then starts to play the sound and return. All the playing is done by
+       threads (in both SDL and Gstreamer), so once 
+       started the audio and graphics are not sync'ed with each other, which
+       means that we have to trust both the graphic backend and the audio
+       backend to play at correct speed. 
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="sdlsound"></a>The SDL 
sound backend</h3></div></div></div><p>
+       The current SDL sound backend has replaced the original sound 
+       handler, based on SDL_mixer, which by design had some limitations, 
+       making it difficult to implement needed features such as support 
+       for soundstreams. 
+       The SDL sound backend supports both event-sounds and soundstreams,
+       using Gnash's internal ADPCM, and optionally MP3 support, using
+       either FFMPEG or LIBMAD.
+       When it receives sound data it is stored without being decoded, unless
+       it is ADPCM, which is decoded in the parser. When playing, backend
+       relies on a function callback for retrieving output sound, which is 
+       decoded and re-sampled if needed, and all sound output is mixed 
together.
+       The current SDL sound backend was made since Gnash needed a working
+       sound backend as soon as possible, and since the gstreamer backend at
+       the time suffered from bugs and/or lack of features in gstreamer. The
+       result was the most complete and best sound handler so far.
+       The advantages of the SDL sound handler is speed, and ease of use,
+       while its only real disadvantage is that it has to be compiled with
+       MP3 support, which some Linux distributions will probably not like...
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="gstreamer"></a>The 
Gstreamer backend</h3></div></div></div><p>
+       The Gstreamer backend, though not complete, supports both soundstreams
+       and event-sounds. When receiving sound data it stores it compressed,
+       unless if it's ADPCM event-sounds, which it decodes by the parser.
+        When the playback starts, the backend sets up a
+       Gstreamer bin containing a decoder (and other things needed) and places
+       it in a Gstreamer pipeline, which plays the audio. All the sound data is
+       not passed at once, but in small chunks, and via callbacks the
+       pipeline gets fed. The advantages of the Gstreamer backend is that it
+        supports both kinds of sound, it avoids all the legal MP3-stuff, and it
+       should be relatively easy to add VORBIS support. The drawbacks are that
+       it has longer "reply delay" when starting the playback of a sound, and
+       it suffers under some bugs in Gstreamer that are yet to be fixed. 
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="audio-future"></a>Future 
audio backends</h3></div></div></div><p>
+       It would probably be desirable to make more backends in the future,
+       either because other and better backend systems are brought to our
+       attention, or perhaps because an internal sound handling is better
+       suited for embedded platform with limited software installed. 
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="gstreamer-details"></a>Detailed description of the Gstreamer 
backend</h3></div></div></div><p>
+       Gstreamer uses pipelines, bins and elements. Pipelines are the
+       main bin, where all other bins or elements are places. Visually the
+       audio pipeline in Gnash looks like this: 
+      </p><pre class="programlisting">
+        ___
+       |Bin|_
+       |___| \
+        ___   \ _____       ____________
+       |Bin|___|Adder|_____|Audio output|
+       |___|   |_____|     |____________|
+        ___   /
+       |Bin|_/
+       |___|
+
+      </pre><p>
+       There is one bin for each sound which is being played. If a sound is
+       played more the once at the same time, multiple bins will be made. The
+       bins contains: 
+      </p><pre class="programlisting">
+
+       
|source|---|capsfilter|---|decoder|---|aconverter|---|aresampler|---|volume|
+
+      </pre><p>
+       In the source element we place parts of the undecoded sound data, and
+       when playing the pipeline will pull the data from the element. Via
+       callbacks it is refilled if needed. In the capsfilter the data is
+       labeled with the format of the data. The decoder (surprise!) decodes
+       the data. The audioconverter converts the now raw sound data into a
+       format accepted by the adder, all input to the adder must in the same
+       format. The audio re-sampler re-samples the raw sound data into a sample
+       accepted by the adder, all input to the adder must in the same
+       sample rate. The volume element makes it possible to control the volume
+       of each sound. 
+      </p><p>
+       When a sound is done being played it emits a End-Of-Stream-signal
+       (EOS), which is caught by an event-handler-callback, which then makes
+       sure that the bin in question is removed from the pipeline. When a
+       sound is told by Gnash to stop playback before it has ended playback,
+       we do something (not yet finally implemented), which makes the bin emit
+       an EOS, and the event-handler-callback will remove the sound from the
+       pipeline. Unfortunately Gstreamer currently has a bug which causes the
+       entire pipeline to stop playing when unlinking an element from the
+       pipeline; so far no fix is known. 
+      </p><p>
+       Gstreamer also contains a bug concerning linking multiple elements to
+       the adder in rapid succession, which causes to adder to "die" and stop
+       the playback. 
+      </p></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="testing"></a>Testing </h2></div></div></div><p>
+       <a class="link" href="#runtests" title="Running the Tests">Instructions 
on running tests</a>
+       can be found in the section on building Gnash.
+     </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="testtools"></a>Testing Tools</h3></div></div></div><p>
+       Currently Gnash uses three other tools to help with
+       testing. Two of these are free compilers for the Flash
+       format. This lets us write simple test cases for Gnash to test
+       specific features, and to see how the features operate.
+      </p><p>
+       The primary compiler used at this time is <a class="ulink" 
href="http://ming.sf.net"; target="_top">Ming</a>. Since release 0.3,
+       <span class="emphasis"><em>Ming</em></span> includes a command-line 
compiler,
+       <span class="emphasis"><em>makeswf</em></span>. This allows test case 
development
+        to be done entirely with free tools.
+      </p><p>
+        The other tools are optional.  
+       <a class="ulink" href="http://www.gnu.org/software/dejagnu"; 
target="_top">DejaGnu</a>
+       is used to run multiple test cases in an automated
+       manner. <span class="emphasis"><em>DejaGnu</em></span> is used by many 
other <a class="ulink" href="http://www.gnu.org"; target="_top">GNU</a> projects 
like 
+       <a class="ulink" href="http://gcc.gnu.org"; target="_top">GCC</a> and 
+       <a class="ulink" href="http://www.samba.org"; target="_top">Samba</a>.
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="testcases"></a>Test 
Cases</h3></div></div></div><p>
+       ActionScript test cases are located under testsuite/actionscript.all/;
+       these are organized in one file for the ActionScript class.
+       Other Ming-generated tests are under testsuite/ming-misc.all/;
+       these are typically used to test specific tag types.
+       Full movies are located in testsuite/movies.all/ and
+       sample movies are found in testsuite/samples/.
+       Other directories in testsuite/ are (or shall be) used for other
+       kind of tests.
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="writeastests"></a>Writing ActionScript Tests</h3></div></div></div><p>
+       Writing ActionScript tests is very simple. The
+       <span class="emphasis"><em>makeswf</em></span> compiler makes use of 
the C preprocessor,
+       thus allowing the inclusion of definitions for macros and external 
+       files. We use these feature to provide common utilities
+       for test units.
+      </p><p>
+       Each test unit sets an <span class="emphasis"><em>rcsid</em></span> 
variable, includes the
+       <span class="emphasis"><em>check.as</em></span> file and performs some 
checks using
+       the provided macros. Here is an example:
+       
+       </p><pre class="programlisting">
+
+         // This variable will be used by check.as
+         // to show testcase info as part of the test runs.
+         rcsid="Name and version of this testcase, usually the RCS id";
+         
+         #include "check.as"
+         
+         // Test object creation
+         check(new Object() instanceOf Object);
+         
+         // Test parseInt
+         check(isNaN(parseInt('none')));
+
+         // Test assignment
+         var a = 1;
+         check_equals(a, 1);
+         
+         // .. your tests here ...
+       </pre><p>
+      </p><p>
+       The check(expr) macro will <span class="emphasis"><em>trace</em></span> 
PASSED or FAILED
+       together with the expression being evaluated and the line number
+       of the check. This is the format expected by DejaGnu.
+      </p><p>
+       The <span class="emphasis"><em>check_equals(obtained, 
expected)</em></span> macro uses equality operator
+       <span class="emphasis"><em>==</em></span> to check for equality. When 
possible, use of the
+       <span class="emphasis"><em>check_equals()</em></span> macro is 
preferred over <span class="emphasis"><em>check()</em></span>
+       because it shows what the actual result was in case of a failure. 
+      </p><p>
+       Additionally, the check.as file provides a transparent way to send
+       results to a TextField rather then using trace. This is very useful
+       when you use a flash player without tracing support.
+      </p><p>
+       Test units are built by running <span class="emphasis"><em>make 
TestName-v#.swf</em></span>.
+       This will use TestName.as as source and the value of # as target 
version.
+       Allowed target version are from 5 to 8 (inclusive).
+      </p><p>
+       Note that if you get a syntax error from the compiler, the line
+       number will refer to the pre-processed file. This file is called
+       <span class="emphasis"><em>TestName.as.pp</em></span> or <span 
class="emphasis"><em>TestName-v#.swf.frame#.pp</em></span>
+       (depending on Ming version) and it's not thrown away by
+       <span class="emphasis"><em>makeswf</em></span> to make debugging easier.
+      </p><p>
+       Sometimes an expression is only supported by a specific SWF
+       version, or it's evaluated differently by different SWF versions.
+       For this purpose the framework provides an OUTPUT_VERSION macro
+       that you can use to switch code based on output version. For example:
+
+       </p><pre class="programlisting">
+
+         #if OUTPUT_VERSION &gt;= 7
+         check(_root.getSWFVersion == OUTPUT_VERSION);
+         #endif
+         
+       </pre><p>
+      </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="writemingtests"></a>Writing Ming-based self-contained SWF 
tests</h3></div></div></div><p>
+       Ming-based test cases are located in testsuite/misc-ming.all
+       and contain a test generator and a test runner.
+       The test generator (usually a C program) is used to produce the SWF 
+        file, while the test runner (a C++ program) will run it using a 
+       MovieTester class.
+       Note that only the test generator needs Ming, not the test
+       runner, so if Ming isn't installed on the user's host,
+       the test cases can still be run as long as SWF has been distributed.
+      </p><p>
+       Producing tests using Ming has the advantage that you can easily see
+       and modify the full source code for the SWF movie, and you can use
+       some <a class="link" href="#ming_testgenerator_facilities" title="Using 
Ming-based test generators facilities">facilities</a>
+       provided by the Gnash testing framework to easily run tests.
+      </p><p>
+       For generic Ming API documentation, see <a class="ulink" 
href="http://www.libming.org/"; target="_top">http://www.libming.org</a>. 
+      </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 
class="title"><a name="ming_testgenerator_facilities"></a>Using Ming-based test 
generators facilities</h4></div></div></div><p>
+       Ming-based test generator facilities, which might be moved into
+       a loadable SWF in the future, can be currently used by your test
+       generator by including the ming_utils.h file and calling the
+       appropriate functions.
+      </p><p>
+       The most useful facility provided for Ming-based SWF test generators
+       is a Dejagnu-like TestState ActionScript class.
+       In order to use this facility you must call 'add_dejagnu_functions()'
+       right after Movie creation.
+       The function takes an SWFMovie object and some parameters specifying
+       depth and location of the "visual" trace textfield; it instantiates
+       a global 'TestState' ActionScript object to keep track of test's state.
+      </p><p>
+        You will <span class="emphasis"><em>not</em></span> need to directly 
invoke the
+       TestState object created by the 'add_dejagnu_functions()' routine,
+       rather you will be using C macros hiding its complexity:
+       
+       </p><pre class="programlisting">
+
+       check(SWFMovie mo, const char* expr)
+
+               Evaluate an ActionScript expression.
+
+       xcheck(SWFMovie mo, const char* expr)
+
+               Evaluate an ActionScript expression.
+               A failure is expected
+               (for cases where the call exposes a known bug).
+
+       check_equals(SWFMovie mo, const char* obtained, const char* expected)
+
+               Evaluate an ActionScript expression against an expected output.
+
+       xcheck_equals(SWFMovie mo, const char* obtained, const char* expected)
+
+               Evaluate an ActionScript expression against an expected output.
+               A failure is expected (for cases where the call exposes a known 
bug).
+
+       print_tests_summary(SWFMovie mo)
+
+                This will print a summary of tests run, and should be
+               called as the last step in your SWF generator.
+
+       </pre><p>
+       
+      </p><p>
+       Test cases generated using Ming and the provided
+       <a class="link" href="#ming_testgenerator_facilities" title="Using 
Ming-based test generators facilities">facilities</a>
+       will be self-contained, which means they can be used as tests
+       by simply running them with whatever Player you might have.
+       Any 'check' or 'check_equals' result will be both traced and
+       printed in a textfield. You can use 'gprocessor -v' to have
+       Gnash use them as tests.
+       </p><p>
+       See section <a class="link" href="#writing_test_runners" title="Writing 
Test Runners">Writing Test Runners</a>
+       for information about writing SWF test runners.
+       </p></div></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="writing_dejagnu_so_tests"></a>Writing self-contained SWF tests with other 
compilers</h3></div></div></div><p>
+       If you want/need to use a different compiler for your test cases 
(there's
+       plenty of open source tools for generating SWF out there), you can still
+       make use of a loadable SWF utility provided as part of the Gnash 
testsuite
+       to let your test consistent with the rest of the suite.
+       </p><p>
+       The loadable module is called <code class="code">Dejagnu.swf</code> and 
is built during
+       <code class="code">make check</code> under testsuite/misc-ming.all. In 
order to use it
+       you will need to load it into your SWF. We currently load it with an 
IMPORT
+       tag for our ActionScript based test cases, but you can probably also use
+       loadMovie or whatever works in the target SWF you're generating. Just 
make
+       sure that the module is initialized before using it. You can check this 
by
+       inspecting the <code class="code">dejagnu_module_initialized</code> 
variable, which will
+       be set to 'true' when all initialization actions contained in the
+       <code class="code">Dejagnu.swf</code> file are executed. 
+       </p><p>
+       Once the module is loaded you will be able to invoke the following 
functions,
+       all registered against the <code class="code">_root</code> sprite 
(effects of <code class="code">_lockroot</code>
+       untested):
+       </p><pre class="programlisting">
+
+       check(expression, [message]);
+
+               Evaluate the expression.
+               Trace result (PASSED: expression / FAILED: expression).
+               If fails, *visually* trace the failure.
+               If second argument is given, it will be used instead of
+               'expression' for printing results.
+
+       check_equals(obtained, expected)
+
+               Evaluate an expression against an expected output.
+               Trace result (PASSED: obtained == expected / FAILED: expected 
X, obtained Y)
+               If fails, *visually* trace the failure.
+
+       xcheck(expression, [message]);
+
+               Evaluate the expression.
+               Trace result (XPASSED: expression / XFAILED: expression).
+               If fails, *visually* trace the failure.
+               If second argument is given, it will be used instead of
+               'expression' for printing results.
+
+       xcheck_equals(obtained, expected)
+
+               Evaluate an expression against an expected output.
+               Trace result (XPASSED: obtained == expected / XFAILED: expected 
X, obtained Y)
+               If fails, *visually* trace the failure.
+
+       note(string)
+
+               Print string, both as debugging and *visual* trace.
+
+       totals()
+
+                Print a summary of tests run, both as debugging and *visual* 
traces.
+
+       </pre><p>
+       </p><p>
+       Visual traces are lines of text pushed to a textarea defined by the 
<code class="code">Dejagnu.swf</code> module.
+       The textarea is initially placed at <code class="code">0, 50</code> and 
is <code class="code">600x800</code> in size.
+       You can resize/move the clip after loading it.
+       Also, you can completely make the clip invisible if that bothers you. 
The important thing is the
+       <span class="emphasis"><em>debugging</em></span> trace (call to the 
trace function). The latter will be used by the testing framework.
+       </p><p>
+       See section <a class="link" href="#writing_test_runners" title="Writing 
Test Runners">Writing Test Runners</a>
+       for information about writing a test runners for your self-contained 
tests.
+       </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="writing_test_runners"></a>Writing Test Runners</h3></div></div></div><p>
+       Test runners are executables that run one or more tests,
+       writing results in Dejagnu form to standard output.
+       </p><p>
+        The Dejagnu form uses a standard set of labels when printing test 
+        results.  These are:
+        </p><div class="informaltable"><table border="1" 
width="75%"><colgroup><col><col></colgroup><thead><tr><th valign="top">
+                <p>Label</p>
+              </th><th valign="top">
+                <p>Meaning</p>
+              </th></tr></thead><tbody><tr><td align="left" valign="top">
+                <p>PASSED</p>
+              </td><td align="left" valign="top">
+                <p>The test succeeded.</p>
+              </td></tr><tr><td align="left" valign="top">
+                <p>FAILED</p>
+              </td><td align="left" valign="top">
+                <p>The test failed.</p>
+              </td></tr><tr><td align="left" valign="top">
+                <p>XPASSED</p>
+              </td><td align="left" valign="top">
+                <p>The test succeeded, but was expected to fail.</p>
+              </td></tr><tr><td align="left" valign="top">
+                <p>XFAILED</p>
+              </td><td align="left" valign="top">
+                <p>The test failed, and was expected to fail.</p>
+              </td></tr><tr><td align="left" valign="top">
+                <p>UNRESOLVED</p>
+              </td><td align="left" valign="top">
+                <p>The results of the test could not be automatically 
+                      parsed.</p>
+              </td></tr><tr><td align="left" valign="top">
+                <p>UNTESTED</p>
+              </td><td align="left" valign="top">
+                <p>This test case is not complete.</p>
+              </td></tr><tr><td align="left" valign="top">
+                <p>UNSUPPORTED</p>
+              </td><td align="left" valign="top">
+                <p>The test case relies on a conditional feature which 
+                      is not present in your environment.</p>
+              </td></tr></tbody></table></div><p>
+       </p><p>
+        The following labels may also appear:
+        </p><div class="informaltable"><table border="1" 
width="75%"><colgroup><col><col></colgroup><thead><tr><th valign="top">
+                <p>Label</p>
+              </th><th valign="top">
+                <p>Meaning</p>
+              </th></tr></thead><tbody><tr><td align="left" valign="top">
+                <p>ERROR</p>
+              </td><td align="left" valign="top">
+                <p>There was a serious error in running the test. </p>
+              </td></tr><tr><td align="left" valign="top">
+                <p>WARNING</p>
+              </td><td align="left" valign="top">
+                <p>There may have been a problem with running the
+                      test.</p>
+              </td></tr><tr><td align="left" valign="top">
+                <p>NOTE</p>
+              </td><td align="left" valign="top">
+                <p>There was some additional information given about
+                      the test.</p>
+              </td></tr></tbody></table></div><p>
+       </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 
class="title"><a name="generic_test_runner"></a>Using the generic test runner 
for self-contained SWF tests</h4></div></div></div><p>
+       The simplest test runner is one that simply invokes Gnash
+       in verbose mode against a self-contained SWF test movie.
+       Self-contained SWF test movies are the ones that print
+       the PASSED/FAILED etc. lines using ActionScript (traces).
+       By invoking Gnash in verbose mode this movie will behave
+       as a compliant "Test Runner".
+       </p><p>
+       A generator for simple test runners can be found in
+       <code class="code">testsuite/generic-testrunner.sh</code>.
+       The script can be invoked by passing it <code 
class="code">$(top_builddir)</code>
+       as the first argument and the name of the SWF file (without the path)
+       as the second argument. This will create a specific runner for your
+       test in the current build directory.
+       A simple Makefile.am rule for doing this follows:
+       </p><pre class="programlisting">
+MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+        sh $(srcdir)/../generic-testrunner.sh $(top_builddir) MyTest.swf &gt; 
$@
+        chmod +x $@
+       </pre><p>
+       </p><p>
+       By default, the generated test runner will play the movie up to the
+       last frame. If you want the movie to be played more then once (maybe
+       because you're exactly testing loop features) you can use the -r switch
+       to the generic-testrunner.sh call. The following will create a runner
+       playing the movie twice:
+       </p><pre class="programlisting">
+MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+        sh $(srcdir)/../generic-testrunner.sh -r2 $(top_builddir) MyTest.swf 
&gt; $@
+        chmod +x $@
+       </pre><p>
+       </p><p>
+       In case your test movie stops before the last frame, or you want to 
control the
+       exact number of times to call the frame advancement routine, you can 
use the 
+       -f switch to control that.
+       </p><pre class="programlisting">
+MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+        sh $(srcdir)/../generic-testrunner.sh -f10 $(top_builddir) MyTest.swf 
&gt; $@
+        chmod +x $@
+       </pre><p>
+       When both -f and -r are given, the first exit condition reached will 
take effect.
+       </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="writing_movie_testers"></a>Writing Movie testers</h4></div></div></div><p>
+           There are some parts of Gnash that can NOT be tested
+           by only using ActionScript tests. Examples include: frame
+           advancements, actual actions execution, gui events and so on.
+         </p><p>
+           In this case you might want to use the MovieTester class to
+           implement a C++ test runner. Be aware that you can <span 
class="emphasis"><em>mix</em></span> tests in
+           the MovieTester-based class with <span 
class="emphasis"><em>self-contained</em></span>
+           tests in the SWF file as long as you activate verbosity for
+           the debug logfile. This is done, for example, for the
+           DefineEditTextVariableNameTest.swf file. The corresponding
+           test runner (DefineEditTextVariableNameTest-Runner) is a C++
+           runner based on MovieTester class. If you run the runner you
+           see two kinds of test results: the ones coming from the ActionScript
+           engine, and the ones coming from the test runner. You can
+           distinguish between the two because the former contains an 
additional
+           timestamp and the latter does not. Also, you'll see two final
+           summaries for the two test sets. The 'make check' rule, which uses
+           the testsuite/simple.exp output parser as its work-horse, will
+           count test results from both test sets.
+         </p><p>
+           Movie testers are executables which load an SWF, generate events
+           (both user or system) on it, and check its state using
+           a standard interface.
+         </p><p>
+           To help this process a MovieTester class is defined in the
+           testsuite/MovieTester.{h,cpp} files; see Doxygen documentation
+           for more information.
+         </p><p>
+           Note that you do NOT need access to the SWF source code in order
+           to implement a Movie tester for it.  Some knowledge about the 
+           expected behavior suffices.
+         </p></div></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="newclass"></a>Chapter 4. 
Adding New ActionScript Class</h2></div></div></div><div 
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a 
href="#prototype">Prototype</a></span></dt><dt><span class="sect1"><a 
href="#declaration">Declaration</a></span></dt><dt><span class="sect1"><a 
href="#instantiation">Instantiation</a></span></dt><dt><span class="sect1"><a 
href="#methods">Methods</a></span></dt><dt><span class="sect1"><a 
href="#properties">Dynamic Properties</a></span></dt><dt><span class="sect1"><a 
href="#as_value">The <span class="emphasis"><em>as_value</em></span> Object 
Type</a></span></dt><dd><dl><dt><span class="sect2"><a href="#data_types">Data 
Types</a></span></dt><dt><span class="sect2"><a href="#is_methods">Determining 
the Type</a></span></dt><dt><span class="sect2"><a href="#to_methods">Fetching 
the Value</a></span></dt><dt><span class="sect2"><a href="#set_methods">Setting 
the Value and Type</a></span></dt><dt><span class="sect2"><a 
href="#further_as_value_reading">Further 
Reading</a></span></dt></dl></dd><dt><span class="sect1"><a 
href="#asobject">Object ActionScript Class</a></span></dt><dd><dl><dt><span 
class="sect2"><a href="#objectmethods">The Methods of the  
Class</a></span></dt><dt><span class="sect2"><a href="#objectprops">The 
Properties of the Object Class</a></span></dt><dt><span class="sect2"><a 
href="#objectconf">Object Class 
Conformance</a></span></dt></dl></dd></dl></div><p>
+    In this document, the term 'ActionScript class' refers to the
+    C++ class which is instantiated by Gnash when some ActionScript
+    code instantiates a corresponding class.  The C++ class
+    stores instance data and implements the methods which are 
+    called on the object in the ActionScript code.
+  </p><p>
+    Adding a new ActionScript class is relatively simple, but the
+    process is complicated by the fact that the interface has evolved
+    over time and the current code base represents several different
+    formats.  This document describes the current interface.  The
+    Boolean class should be considered the authoritative example of
+    a modern ActionScript class.
+  </p><p>
+    ActionScript classes contain a header file and a C++
+    implementation.  The name is usually the name of the
+    class as it is called in the ActionScript specifications;
+    for instance <span class="emphasis"><em>Boolean.cpp</em></span> for the 
Boolean class.
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a 
name="prototype"></a>Prototype</h2></div></div></div><p>
+      In ActionScript, a prototype is a base object which contains
+      all the methods that an instantiated object will contain.
+      In short, it contains every part of the class except for
+      the portions dealing with the storage of instance data.
+    </p><p>
+      In Gnash, the prototype of an ActionScript object is 
+      implemented as an <span class="emphasis"><em>as_object</em></span>.
+      At startup, the methods and properties of the ActionScript class
+      are attached to the <span class="emphasis"><em>as_object</em></span>.  
The
+      following example demonstrates how methods can be attached:
+      </p><pre class="programlisting">
+       static void
+       attachBooleanInterface(as_object&amp; o) {
+         o.init_member("toString", new builtin_function(boolean_tostring));
+         o.init_member("valueOf", new builtin_function(boolean_valueof));
+       }
+      </pre><p>
+    </p><p>
+      Static properties can also be added to the ActionScript prototype
+      (<a class="link" href="#properties" title="Dynamic Properties">dynamic 
properties</a> 
+      are addressed later).  They are attached in a similar way:
+      </p><pre class="programlisting">
+       o.init_member("myProperty", as_value("HelloWorld"));
+      </pre><p>
+    </p><p>
+      Properties which have been added in this manner can be
+      directly accessed in ActionScript code without a function
+      call, as this piece of ActionScript code compiled by Ming's
+      <span class="emphasis"><em>makeswf</em></span> compiler demonstrates:
+      </p><pre class="programlisting">
+       // Get the value of the myProperty property
+       if (node.myProperty == "HelloWorld") {
+         trace("MATCHED");
+       }
+      </pre><p>
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="declaration"></a>Declaration</h2></div></div></div><p>
+      A new class should derive from <span 
class="emphasis"><em>as_object</em></span>,
+      which is the base class of every ActionScript object in Gnash.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="instantiation"></a>Instantiation</h2></div></div></div><p>
+      When a new object is needed, instance data is added to
+      the methods and properties inherited from the prototype.
+    </p><p>
+      The init method should be called in the constructor in
+      <span class="emphasis"><em>Global.cpp</em></span>, where all other 
ActionScript
+      classes are similarly referenced. This method constructs a
+      prototype, which is implemented as an
+      <span class="emphasis"><em>as_object</em></span>.  In addition, the 
method 
+      registers the constructor to be used for future object creation,
+      and attaches methods and properties to the prototype.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="methods"></a>Methods</h2></div></div></div><p>
+      Every method you implement and 
+      <a class="link" href="#prototype" title="Prototype">attach</a> will 
receive an
+      <span class="emphasis"><em>fn_call</em></span> data structure as an 
argument when it is called.
+    </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 
class="title"><a name="arguments"></a>Accessing 
Arguments</h4></div></div></div><p>
+       The arguments stored in <span class="emphasis"><em>fn_call</em></span>
+       should be accessed using <span class="emphasis"><em>arg()</em></span>.  
For
+       instance, the first element can be popped with
+       <span class="emphasis"><em>fn.arg(0)</em></span>.
+      </p><p>
+       The element popped off the stack is an 
+       <a class="link" href="#as_value" title="The as_value Object Type"><span 
class="emphasis"><em>as_value</em></span>
+       object</a>.
+      </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a name="return"></a>Returning a 
Value to ActionScript</h4></div></div></div><p>
+       The return value should be an
+       <a class="link" href="#as_value" title="The as_value Object Type"><span 
class="emphasis"><em>as_value</em></span> 
+       object</a>.  For example:
+       </p><pre class="programlisting">
+         return as_value('Goodbye, cruel world.');
+       </pre><p>
+      </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="additional_fn_call"></a>Additional <span 
class="emphasis"><em>fn_call</em></span> Members</h4></div></div></div><p>
+       There are two other useful members of the <span 
class="emphasis"><em>fn_call</em></span>
+       structure, namely <span class="emphasis"><em>this_ptr</em></span> and
+       <span class="emphasis"><em>nargs</em></span>.  The former points to the
+       class which is invoking this method, while the latter
+       is a count of the number of 
+       <a class="link" href="#arguments" title="Accessing Arguments">arguments 
in the stack</a>.
+      </p><p>
+       You may also see instances of the <span 
class="emphasis"><em>env</em></span>
+       pointer being used.   This is being deprecated.  Instances
+       which could be replaced with
+       <a class="link" href="#arguments" title="Accessing Arguments"><span 
class="emphasis"><em>arg()</em></span></a>
+       are already deprecated; other uses will be deprecated
+       in the near future.
+      </p><p>
+       Beyond the <span class="emphasis"><em><a class="link" href="#arguments" 
title="Accessing Arguments">arg()</a></em></span> method, there
+       is one method of note.  <span 
class="emphasis"><em>dump_args()</em></span>
+       can be used in debugging to output the entire argument
+       stack.
+      </p></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="properties"></a>Dynamic Properties</h2></div></div></div><p>
+      This section describes accessors to dynamic properties.
+      Read-only properties are described
+      in the <a class="link" href="#prototype" title="Prototype">prototype</a> 
section.
+    </p><p>
+      Accessors should be written as a single get/set method.
+      Previously this was done by overriding
+      <span class="emphasis"><em>get_member()</em></span> and 
+      <span class="emphasis"><em>set_member()</em></span>, but this practice
+      is deprecated.  
+    </p><p> 
+      The accessor is written so that it sets the property
+      if it is called with an argument, and puts the property in
+      the <a class="link" href="#methods" title="Methods"><span 
class="emphasis"><em>fn_call</em></span></a>
+      <a class="link" href="#return" title="Returning a Value to 
ActionScript">result pointer</a>.  For instance:
+      </p><pre class="programlisting">
+       void
+       MyClass::myProperty_getset(const fn_call&amp; fn) {     
+         boost::intrusive_ptr&lt;MyClass&gt; ptr = 
ensureType&lt;MyClass&gt;(fn.this_ptr);
+       
+         // setter
+         if ( fn.nargs &gt; 0 ) {
+           bool h = fn.arg(0).to_bool();
+           ptr-&gt;MyMethod(h);
+           return;
+          }
+       
+         // getter
+         bool h = ptr-&gt;MyMethod();
+         fn.result-&gt;set_bool(h);
+       }
+      </pre><p>
+    </p><p> 
+      It has not yet been decided whether properties should be set
+      in the <a class="link" href="#prototype" title="Prototype">exported 
interface</a> 
+      or attached to instances of the class.  A property is attached
+      in the following manner:
+      </p><pre class="programlisting">
+       boost::intrusive_ptr&lt;builtin_function&gt; gettersetter;
+       gettersetter = new builtin_function(&amp;MyClass::myProperty_getset, 
NULL);
+       o.init_property("myProperty", *gettersetter, *gettersetter);
+      </pre><p>
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="as_value"></a>The <span class="emphasis"><em>as_value</em></span> Object 
Type</h2></div></div></div><p>
+    The <span class="emphasis"><em>as_value</em></span> class is used 
throughout
+    the interpreter to create generic objects to hold data.
+  </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="data_types"></a>Data Types</h3></div></div></div><p>
+      The following data types are supported:
+      <span class="emphasis"><em>NULLTYPE</em></span>,
+      <span class="emphasis"><em>BOOLEAN</em></span>, <span 
class="emphasis"><em>STRING</em></span>,
+      <span class="emphasis"><em>NUMBER</em></span>, <span 
class="emphasis"><em>OBJECT</em></span>,
+      <span class="emphasis"><em>AS_FUNCTION</em></span>, and 
+      <span class="emphasis"><em>MOVIECLIP</em></span> (sprite).  
+      The type <span class="emphasis"><em>C_FUNCTION</em></span> is being 
deprecated.
+    </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="is_methods"></a>Determining the Type</h3></div></div></div><p>
+      Several methods allow you to determine if a value stored in
+      <span class="emphasis"><em>as_value</em></span> is of a specific type.  
These
+      follow the form of <span class="emphasis"><em>is_TYPE</em></span>, for 
example
+      <span class="emphasis"><em>is_as_function()</em></span> and 
+      <span class="emphasis"><em>is_number()</em></span>.  In general, the 
type names
+      match the <a class="link" href="#data_types" title="Data Types">data 
types</a> listed
+      above, with the exception of the type <span 
class="emphasis"><em>MOVIECLIP</em></span>
+      which has a method <span class="emphasis"><em>is_sprite()</em></span>.
+    </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="to_methods"></a>Fetching 
the Value</h3></div></div></div><p>
+      Another set of methods will return a representation of
+      the value as a particular type.  They follow the
+      <span class="emphasis"><em>to_TYPE</em></span> naming convention.  
Examples
+      are <span class="emphasis"><em>to_number()</em></span> and
+      <span class="emphasis"><em>to_bool()</em></span>.  The type names are as 
+      <a class="link" href="#data_types" title="Data Types">listed</a> 
earlier, except for
+      <span class="emphasis"><em>MOVIECLIP</em></span>, which uses 
+      <span class="emphasis"><em>to_sprite()</em></span>.
+    </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="set_methods"></a>Setting 
the Value and Type</h3></div></div></div><p>
+      Finally, there is the <span class="emphasis"><em>set_TYPE</em></span> 
series
+      of methods.  They change the type to the type specified in
+      the method name, and set the value to the one given as an
+      argument.  It is also possible to accomplish the same thing
+      with the <span class="emphasis"><em>=</em></span> operator.  Again, type 
names
+      match those <a class="link" href="#data_types" title="Data Types">named 
earlier</a>,
+      except in the case of <span class="emphasis"><em>MOVIECLASS</em></span>. 
 Its
+      method is called <span class="emphasis"><em>set_sprite()</em></span>.
+    </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="further_as_value_reading"></a>Further Reading</h3></div></div></div><p>
+      Please refer to <span class="emphasis"><em>as_value.h</em></span> or the
+      Doxygen documentation (see 'Processing The Documentation'
+      in the Gnash manual for instructions on generating
+      documents with Doxygen) for more information
+      about which methods are available for the
+      <span class="emphasis"><em>as_value</em></span> object.
+    </p></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="asobject"></a>Object ActionScript Class</h2></div></div></div><p>
+    This class implements an Object object.
+  </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="objectmethods"></a>The Methods of the  
Class</h3></div></div></div><p>
+      </p><div class="variablelist"><dl><dt><span 
class="term">addProperty()</span></dt><dd><p>
+           </p></dd><dt><span class="term">registerClass()</span></dt><dd><p>
+           </p></dd><dt><span class="term">toString()</span></dt><dd><p>
+           </p></dd><dt><span class="term">unwatch()</span></dt><dd><p>
+           </p></dd><dt><span class="term">valueOf()</span></dt><dd><p>
+           </p></dd><dt><span class="term">watch()</span></dt><dd><p>
+           </p></dd><dt><span class="term">Sharedclear()</span></dt><dd><p>
+           </p></dd><dt><span class="term">Sharedflush()</span></dt><dd><p>
+           </p></dd><dt><span class="term">SharedgetLocal()</span></dt><dd><p>
+           </p></dd><dt><span class="term">SharedgetSize()</span></dt><dd><p>
+           </p></dd></dl></div><p>
+    </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="objectprops"></a>The 
Properties of the Object Class</h3></div></div></div><p>
+      </p><div class="variablelist"><dl><dt><span 
class="term">constructor</span></dt><dd><p>
+           </p></dd><dt><span class="term">__proto__</span></dt><dd><p>
+           </p></dd><dt><span class="term">__resolve</span></dt><dd><p>
+           </p></dd><dt><span class="term">Shareddata</span></dt><dd><p>
+           </p></dd><dt><span class="term">SharedonStatus</span></dt><dd><p>
+           </p></dd></dl></div><p>
+    </p></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="objectconf"></a>Object 
Class Conformance</h3></div></div></div><p>
+      </p><div class="informaltable"><table border="1" 
width="75%"><colgroup><col><col></colgroup><thead><tr><th valign="top">
+               <p>Class Name</p>
+             </th><th valign="top">
+               <p>Conformance</p>
+             </th></tr></thead><tbody><tr><td align="left" valign="top">
+               <p>addProperty()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>registerClass()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>toString()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>unwatch()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>valueOf()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>watch()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>Sharedclear()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>Sharedflush()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>SharedgetLocal()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>SharedgetSize()</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This method has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>constructor</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This property has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>__proto__</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This property has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>__resolve</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This property has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>Shareddata</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This property has an unknown status.
+               </p>
+             </td></tr><tr><td align="left" valign="top">
+               <p>SharedonStatus</p>
+             </td><td align="center" valign="top">
+               <p>
+                 This property has an unknown status.
+               </p>
+             </td></tr></tbody></table></div><p>
+    </p></div></div></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="extensions"></a>Chapter 
5. Gnash Extensions</h2></div></div></div><div class="toc"><p><b>Table of 
Contents</b></p><dl><dt><span class="sect1"><a href="#newext">Creating A New 
Extension</a></span></dt><dd><dl><dt><span class="sect2"><a 
href="#craftext">Crafting an Extension</a></span></dt></dl></dd><dt><span 
class="sect1"><a href="#debuext">Debugging An 
Extension</a></span></dt><dt><span class="sect1"><a href="#inclext">Included 
Extensions</a></span></dt></dl></div><p>
+    Gnash supports extending the Flash specification by creating
+    custom ActionScript classes that are compiled code, as opposed to
+    the existing method of defining custom classes as
+    ActionScript. Executing compiled code has many performance
+    benefits over having to interpret the byte stream of the
+    ActionScript opcodes.
+  </p><p>
+    I can already hear people complaining now about the concept of
+    extending Flash, so this in no way affects Gnash's ability to play
+    Flash movies when functioning as a browser plugin.
+    Gnash's goal is still to function in a way that is compatible
+    with the current proprietary Flash player.
+  </p><p>
+    But at the same time, we see Flash as the ideal scripting language
+    for a digital multi-media streaming environment. There are many
+    resources for Flash movie creators for widgets, higher level APIs,
+    all sorts of desirable things. But for those of use committed to
+    using free software tools for Flash, our options are very
+    limited. 
+  </p><p>
+    Rather than launching a multi-year project to duplicate all
+    classes in the commercial Flash IDE, it's much more efficient to
+    use existing development libraries much like Python or Perl
+    do. The extension mechanism in Gnash allows wrappers to be created
+    for any C or C++ development library. Unlike the proprietary Flash
+    IDE, which compiles all the extension libraries into byte codes
+    from ActionScript, the support is moved to the player side. Movies
+    with all of the goodies of the proprietary IDE in them play in
+    Gnash just fine, as it's all just byte codes by then.
+  </p><p>
+    This trick works because until Flash player version 9, all the
+    ActionScript class names and methods are passed as ASCII strings
+    into the Flash movie. So the Gnash Virtual Machine just loads the
+    extension file if that class name is invoked in the movie. All
+    extension files specify the class name and methods it implements
+    in an identical style as adding any new ActionScript class. The
+    advantage is the class itself is compiled code, and runs much
+    faster than the equivalent byte codes which all have to be
+    interpreted..
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="newext"></a>Creating A New 
Extension</h2></div></div></div><p>
+      Each new extension should live in it's own directory. The
+      extensions included in Gnash are all in the
+      <code class="code">gnash/extensions</code> directory. Creating an 
extension
+      requires a Makefile.am,
+    </p><p>
+      If you are adding this extension to the Gnash source tree
+      itself, then you need to make two changes to add the new
+      extension.
+    </p><p>
+      The first change is to add the directory to the list in
+      extensions/Makefile.am. This can be done either by adding the
+      new directory to the SUBDIRS setting, or by wrapping it in a
+      conditional test.
+    </p><p>
+      The other change is to add it to the AC_OUTPUT list in
+      <span class="emphasis"><em>configure.ac</em></span> so the new directory 
will be
+      configured along with the rest of Gnash.
+    </p><p>
+      Each extension should have an ActionScript source file included
+      that tests the new class, and this file should be referenced in
+      the new Makefile.am in the <span 
class="emphasis"><em>check_PROGRAMS</em></span>
+      variable so that "make check" works.
+    </p><p>
+      When creating an extension that is a wrapper for an existing
+      development library API, it's often better to make this a thin
+      layer, than to get carried away with creating beautiful
+      abstractions. Higher-level classes that offer a lot of new
+      functionality are fine, but is different than wrapping a library
+      so it can be used from within Gnash.
+    </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="craftext"></a>Crafting an 
Extension</h3></div></div></div><p>
+       All extensions have the same requirements, namely setting up a
+       few defined function callbacks, which the Gnash VM then uses
+       to do the right thing. The initial two function callbacks are
+       for handling the interface of the newly created object so that
+       Gnash can find and use it.
+      </p><p>
+       The first function is commonly called
+       <span class="emphasis"><em>attachInterface</em></span>, and this sets 
the other
+       function callbacks for all the methods this class
+       supports. The method callbacks are attached to the parent
+       class by using <span class="emphasis"><em>init_member()</em></span> to 
set a C
+       function pointer to the string value used in the Flash movie.
+      </p><pre class="programlisting">
+       // Attach DummyClass 'func1' and 'func2' methods to the given object
+       static void
+       attachInterface(as_object&amp; obj) {
+            obj.init_member("func1", &amp;ext_func1);
+            obj.init_member("func2", &amp;ext_func2);
+       }
+      </pre><p>
+       The second function is commonly called
+       <span class="emphasis"><em>getInterface()</em></span>, and this returns 
a
+       pointer to a static prototype of the class.
+        Gnash uses garbage collection for ActionScript objects
+        so you need to register the static with the VM to give it
+        a chance to be marked as reachable.
+      </p><pre class="programlisting">
+       static as_object*
+       getInterface()
+       {
+           static boost::intrusive_ptr&lt;as_object&gt; o;
+           if (o == NULL) {
+               o = new as_object();
+                VM::get().addStatic(o);
+                attachInterface(*o);
+           }
+           return o.get();
+       }
+      </pre><p>
+       This is the callback that gets executed when constructing a
+       new object for the VM. In this example we'll assume the new
+       ActionScript class is called <span 
class="emphasis"><em>DummyExt</em></span>,
+       and has two methods, <span class="emphasis"><em>func1</em></span> and
+       <span class="emphasis"><em>func2</em></span>.
+      </p><pre class="programlisting">
+       static as_value
+       dummyext_ctor(const fn_call&amp; fn)
+       {
+           DummyExt *obj = new DummyExt(); // will setup prototypes
+
+           return as_value(obj); 
+       }
+      </pre><p>
+       The trick for the above simple constructor to work is that
+        class appartenence is setup in the C++ DummyExt constructor
+        itself, which should derive from as_object and construct the
+        base passing it the interface (prototype) of it's class.
+      </p><pre class="programlisting">
+       class DummyExt : public as_object
+        {
+        public:
+           DummyExt()
+                :
+                as_object(getInterface()) // returns the static prototype
+            {}
+
+       };
+      </pre><p>
+       Initialize the extension. This is looked for by the extension
+       handling code in each extension, and is executed when the
+       extension is loaded. This is the main entry point into the
+       extension. This function can be found because the prefix of
+       <span class="emphasis"><em>dummyext</em></span>, which also matches the 
file
+       name of the extension. Gnash uses the name of the extension
+       file itself when looking for the init function.
+      </p><pre class="programlisting">
+        extern "C" {
+           void
+           dummyext_class_init(as_object &amp;obj)
+           {
+               static builtin_function* cl=NULL;
+               if (!cl)
+                {
+                    // Create a builtin function using the given constructor
+                    // to instanciate objects and exporting the given interface
+                   cl = new builtin_function(&amp;dummyext_ctor, 
getInterface());
+                   VM::get().addStatic(cl); // will forbid to collect the class
+               }
+       
+               obj.init_member("DummyExt", cl);
+           }
+        } // end of extern C
+      </pre><p>
+       The callbacks are all C functions. Like all the other code
+       that implements ActionScript, parameters to the function are
+       passed in using the <span class="emphasis"><em>fn_call</em></span> data
+       structure. The return code, if any, is also returned using
+       this data structure. <span class="emphasis"><em>this_ptr</em></span> is 
the
+       object that the method is a member of.
+      </p><pre class="programlisting">
+       // Creates a new button with the label as the text.
+       as_value func1(const fn_call&amp; fn) {
+            // Following line will ensure 'func1' is called for a DummyExt 
instance,
+            // or would throw an exception which should behave as if we 
returned the
+            // undefined value.
+            boost::intrusive_ptr&lt;DummyExt&gt; ptr = 
ensureType&lt;DummyExt&gt;(fn.this_ptr);
+       
+           if (fn.nargs &gt; 0) {
+               std::string label = fn.arg(0).to_string();
+               bool ret = ptr-&gt;dummy_text_label(label);
+               return as_value(ret);
+           }
+       }
+      </pre></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="debuext"></a>Debugging An Extension</h2></div></div></div><p>
+      As extensions are loaded dynamically at runtime, debugging one
+      can be difficult. You can use GDB, but you have the problem of
+      not being able to set a breakpoint in Gnash until
+      <span class="emphasis"><em>after</em></span> the extension has been 
loaded into
+      Gnash's VM. The easy solution is to use the Gnash debugger.
+    </p><p>
+      You can insert these few lines in any file that you wish to
+      manually start the debugger. Once at the console, you can attach
+      GDB to the process. Then you can set breakpoints, etc... and you
+      are at the point of execution where the console was started. To
+      then continue playing the movie, type the <span 
class="emphasis"><em>c</em></span>
+      (for continue) command to the Gnash console.
+    </p><pre class="programlisting">
+      // Get the debugger instance
+      static Debugger&amp; debugger = Debugger::getDefaultInstance();
+
+      // Enable the debugger
+      debugger.enabled(true);
+      // Stop and drop into a console
+      debugger.console();
+    </pre><p>
+      You can also resort to the time honored technique of creating a
+      loop before the point you want to set a breakpoint for. Gnash
+      will stop playing the movie at this point, and then you can
+      externally attach GDB to the running process, or type
+      <span class="emphasis"><em>^C</em></span> to drop into the GDB command 
console.
+    </p><pre class="programlisting">
+      bool stall = true;
+      while (stall) {
+          sleep 1;
+      }
+    </pre><p>
+      Once you have set the breakpoints you want, reset the value of
+      the <span class="emphasis"><em>stall</em></span> variable to break out 
of the
+      loop, and the Flash movie will then continue playing.
+    </p><pre class="programlisting">
+      (gdb) set variable stall = false;
+      continue
+    </pre></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="inclext"></a>Included Extensions</h2></div></div></div><p>
+      Gnash has some extensions included in the distribution. This is
+      mostly because they were written by the Gnash team. Extensions
+      can be external to gnash, Gnash needs no compiled in knowledge
+      to load an extension file.
+    </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 
class="title"><a name="gtkext"></a>Gtk Extension</h4></div></div></div><p>
+    The GTK ActionScript class follows the same API as Gtk2, even down
+    to the same arguments to the same function names. This means
+    you're actually programming GTK,you're just using ActionScript
+    instead of python, perl, or C. This extension makes it possible to
+    write Flash movies that use the Gtk2 widgets for user interface
+    components.
+  </p><div class="variablelist"><dl><dt><span 
class="term">window_new</span></dt><dd><p>
+         Create a new window.
+       </p></dd><dt><span class="term">signal_connect</span></dt><dd><p>
+         Add an event handler to a widget.
+       </p></dd><dt><span 
class="term">container_set_border_width</span></dt><dd><p>
+         Set the width of the window border.
+       </p></dd><dt><span class="term">button_new_with_label</span></dt><dd><p>
+         Create a new button and give it the specified label.
+       </p></dd><dt><span 
class="term">signal_connect_swapped</span></dt><dd><p>
+         Swap signals. Commonly used for <span 
class="emphasis"><em>delete</em></span> event handling.
+       </p></dd><dt><span class="term">container_add</span></dt><dd><p>
+             Add one widget to another as a child.
+           </p></dd><dt><span class="term">widget_show</span></dt><dd><p>
+         Display the widget on the screen.
+       </p></dd><dt><span class="term">main</span></dt><dd><p>
+         Start the main GTK event loop. This function does not return.
+       </p></dd></dl></div></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a name="fileioext"></a>File I/O 
Extension</h4></div></div></div><p>
+    Flash movies are traditionally forbidden from accessing the
+    filesystem, but this may be necessary for some embedded
+    applications. Especially in the case of a user console, currently
+    there is no way to get input into a Flash movie but through a
+    TextField.
+  </p><div class="variablelist"><dl><dt><span 
class="term">fopen</span></dt><dd><p>
+         Open the file.
+       </p></dd><dt><span class="term">fread</span></dt><dd><p>
+         Read a series of bytes from the opened file.
+       </p></dd><dt><span class="term">fgetc</span></dt><dd><p>
+         Read a single byte from the opened file.
+       </p></dd><dt><span class="term">fgets</span></dt><dd><p>
+         Read a single line until a Carriage Return from the opened file.
+       </p></dd><dt><span class="term">gets</span></dt><dd><p>
+         Read a single line from the standard in.
+       </p></dd><dt><span class="term">getchar</span></dt><dd><p>
+         Read a single character from the standard in.
+       </p></dd><dt><span class="term">fwrite</span></dt><dd><p>
+       </p></dd><dt><span class="term">fputc</span></dt><dd><p>
+         Write a single character to the opened file.
+       </p></dd><dt><span class="term">fputs</span></dt><dd><p>
+         Write a single line to the opened file.
+       </p></dd><dt><span class="term">puts</span></dt><dd><p>
+         Write a single line to standard out..
+       </p></dd><dt><span class="term">putchar</span></dt><dd><p>
+         Write a single character to standard out..
+       </p></dd><dt><span class="term">fflush</span></dt><dd><p>
+         Flush the current opened file to disk.
+       </p></dd><dt><span class="term">fseek</span></dt><dd><p>
+         Seek to a location within the opened file.
+       </p></dd><dt><span class="term">ftell</span></dt><dd><p>
+         Report the current position within the opened file.
+       </p></dd><dt><span class="term">fclose</span></dt><dd><p>
+         Close the opened file.
+       </p></dd></dl></div></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a name="mysqlext"></a>MySQL 
Extension</h4></div></div></div><p>
+    The MySQL ActionScript class follows the same API as MySQL, even down
+    to the same arguments to the same function names. This enables a
+    Flash movie to have direct access to a MySQL
+    database. Traditionally Flash movies have had no database
+    support, they either had to use arrays, or use XML to communicate
+    to an application specific external database daemon.
+  </p><div class="variablelist"><dl><dt><span 
class="term">connect</span></dt><dd><p>
+         Connect to a MySQL database.
+       </p></dd><dt><span class="term">qetData</span></dt><dd><p>
+         Get data from the database.
+       </p></dd><dt><span class="term">disconnect</span></dt><dd><p>
+         Disconnect from a MySQL database.
+       </p></dd><dt><span class="term">query</span></dt><dd><p>
+         Execute an SQL query to the database.
+       </p></dd><dt><span class="term">fetch_row</span></dt><dd><p>
+         Fetch a row from the query results.
+       </p></dd><dt><span class="term">num_fields</span></dt><dd><p>
+       </p></dd><dt><span class="term">free_result</span></dt><dd><p>
+         Free the results of a query.
+       </p></dd><dt><span class="term">store_results</span></dt><dd><p>
+         Store the results of a query.
+       </p></dd></dl></div></div></div></div><div class="chapter" 
lang="en"><div class="titlepage"><div><div><h2 class="title"><a 
name="rtmp"></a>Chapter 6. RTMP Protocol</h2></div></div></div><div 
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a 
href="#amf">AMF Format</a></span></dt></dl></div><p>
+    This document is based mostly on my own reverse engineering of the
+    RTMP protocol and AMF format. <span 
class="emphasis"><em>tcpdump</em></span> and
+    <span class="emphasis"><em>ethereal</em></span> are your friend. Some 
additional info that got
+    me started was from the <a class="ulink" 
href="http://www.osflash.org/red5"; target="_top">Red5</a>
+    project. <span class="emphasis"><em>Red5</em></span> is the only other 
open source Flash
+    server. So some details are still vague, but as the implementation
+    appears to work, we'll figure out what they are later.
+  </p><p>
+    The Real Time Messaging Protocol was created by MacroMedia (now
+    Adobe) for delivering Flash objects and video over a network
+    connection. Currently the only servers which support this format
+    are the MacroMedia Media sever, and the Open Source Red5 project.
+  </p><p>
+    This is a simple protocol, optimized for poor bandwidth
+    connections. It can support up to 64 concurrent streams over the
+    same network connection. Part of each AMF packet header contains
+    the index number of the stream. A single RTMP message can contain
+    multiple AMF packets.
+  </p><p>
+    An RTMP connection uses Tcp/ip port 1935. It is also possible to
+    tunnel RTMP over an HTTP connection using port 80. Each AMF packet
+    is 128 bytes long except for streaming audio, which has 64 byte
+    packets.
+  </p><p>
+    The basics of the RTMP protocol are as follows. All communications
+    are initiated by the client.
+    </p><div class="mediaobject" align="center"><img src="images/rtmp.png" 
align="middle"></div><p>
+  </p><p>
+    The client starts the RTMP connection by sending a single byte
+    with a value of 0x3. This byte is followed by a data block of 1536
+    bytes. The format if this data block is unknown, but it appears to
+    not be actually used by the protocol except as a handshake.
+  </p><p>
+    The server receives this packet, stores the 1536 byte data block,
+    and then send a single byte with the value of 0x3, followed by two
+    1536 data blocks. The second data block is the full contents of
+    the original data block as sent by the client.
+  </p><p>
+    The client receives the 1536 byte data block, and if they match,
+    the connection is established. After the handshake process is
+    done, there are three other messages that the client sends to the
+    sever to start the data flowing.
+  </p><p>
+    The first AMF packet sent to the server contains the
+    <span class="emphasis"><em>connect</em></span> packet. This doesn't appear 
to do
+    much but notify the server the client is happy with the
+    handshake, and ready to start reading packets.
+  </p><p>
+    The second packet is the <span 
class="emphasis"><em>NetConnection</em></span> object from
+    the client. This ActionScript class is used by the Flash movie to
+    create the network connection to the server.
+  </p><p>
+    The third packet is the <span class="emphasis"><em>NetStream</em></span> 
object from the
+    client. This is the ActionScript class used to specify the file to
+    be streamed by the server.
+  </p><p>
+    The RTMP packet for our example looks like this:
+   
+    </p><pre class="programlisting">
+      030000190000c91400000000020007connect00?f0000000000000030003app0200#
+      software/gnash/tests/1153948634.flv0008flashVer02000cLNX 6,0,82,0 0006
+      swfUrl02001dfile:///file|%2Ftmp%2Fout.swfc30005tcUrl\002\0004
+      rtmp://localhost/software/gnash/tests/1153948634.flv\000\000\t
+      \002\000\005userx
+    </pre><p>
+    
+    We'll take this apart in a bit, but you can see how all three AMF
+    packets are in the same message. The message is received in
+    several 128 byte blocks, with the last one being less than
+    that. The total size of the RTMP message is in the header, so the
+    reader can tell if the entire message was read or not.
+  </p><p>
+    The RTMP header is first, followed by the connect message as an
+    ASCII string as the message body. The following AMF packet is the
+    <span class="emphasis"><em>NetConnection</em></span> one, which specifies 
that this is coming
+    from a Flash application. This also contains the file path the server
+    can use to find the file to stream. This is then followed by the
+    version number, which I assume is the version of the Flash player,
+    so the server knows what it is talking to.
+  </p><p>
+    The third packet is the one from <span 
class="emphasis"><em>NetStream</em></span>, which
+    specifies the URL used for the movie, followed by the user name
+    for a semblance of security.
+  </p><p>
+    For the next level of detail, we'll explain the format of AMF. AMF
+    is used by the RTMP protocol to transfer data. Each Flash object
+    is encapsulated in an AMF packet, including streaming audio or
+    video.
+  </p><p>
+    The first byte of the RTMP header determines two things about the
+    rest of the message. The first 2 bits of this byte signify the
+    total size of the RTMP header. The RTMP header is of a variable
+    size, so this is important.
+
+    </p><div class="variablelist"><dl><dt><span 
class="term">00</span></dt><dd><p>
+           This specifies the header contains 12 bytes, including
+           this one.
+         </p></dd><dt><span class="term">01</span></dt><dd><p>
+           This specifies the header contains 8 bytes, including this
+           one.
+         </p></dd><dt><span class="term">02</span></dt><dd><p>
+           This specifies the header contains 4 bytes, including this
+           one.
+         </p></dd><dt><span class="term">03</span></dt><dd><p>
+           This specifies the header contains 1 byte, so this is the
+           complete header.
+         </p></dd></dl></div><p>
+  </p><p>
+    The other 6 bits in this byte represent the AMF index. As a single
+    RTMP connection can support multiple data streams, this signifies
+    which stream this packet is for. Once an AMF object is fully
+    received by the client, the AMF index may be reused.
+  </p><p>
+    For messages with headers of at least 4 bytes, the next 3 bytes are
+    used by audio and video data packets, but at this time the meaning
+    of this field is unknown.
+  </p><p>
+    For messages with a 8 byte or larger header, the next 3 bytes
+    determine the size of the RTMP message being transmitted. Messages
+    with a 1 byte or 4 byte header use a standard size, 128 bytes for
+    video, and 64 bytes for audio.
+  </p><p>
+    For messages with an 8 byte or larger header, the next byte is the
+    type of the AMF object.
+    
+    </p><div class="variablelist"><dl><dt><span 
class="term">0x3</span></dt><dd><p>
+           This specifies the content type of the RTMP packet is the
+           number of bytes read. This is used to start the RTMP
+           connection.
+         </p></dd><dt><span class="term">0x4</span></dt><dd><p>
+           This specifies the content type of the RTMP message is a
+           <span class="emphasis"><em>ping</em></span> packet.
+         </p></dd><dt><span class="term">0x5</span></dt><dd><p>
+           This specifies the content type of the RTMP message is
+           server response of some type.
+         </p></dd><dt><span class="term">0x6</span></dt><dd><p>
+           This specifies the content type of the RTMP packet is
+           client request of some type.
+         </p></dd><dt><span class="term">0x8</span></dt><dd><p>
+           This specifies the content type of the RTMP packet is an
+           audio message.
+         </p></dd><dt><span class="term">0x9</span></dt><dd><p>
+           This specifies the content type of the RTMP message is a
+           video packet.
+         </p></dd><dt><span class="term">0x12</span></dt><dd><p>
+           This specifies the content type of the RTMP message is
+           notify. 
+         </p></dd><dt><span class="term">0x13</span></dt><dd><p>
+           This specifies the content type of the RTMP message is
+           shared object.
+         </p></dd><dt><span class="term">0x14</span></dt><dd><p>
+           This specifies the content type of the RTMP message is
+           remote procedure call. This invokes the method of a Flash
+           class remotely.
+         </p></dd></dl></div><p>     
+  
+  </p><p>
+    There are two sets of data types to consider. One set is used by
+    the to specify the content type of the AMF object, the other is an
+    ActionScript data type tag used to denote which type of object is
+    being transferred.
+  </p><p>
+    The values of the initial type byte are:
+    </p><div class="variablelist"><dl><dt><span 
class="term">0x0</span></dt><dd><p>
+           This specifies the data in the AMF packet is a numeric
+           value. All numeric values in Flash are 64 bit,
+           <span class="emphasis"><em>big-endian</em></span>.
+         </p></dd><dt><span class="term">0x1</span></dt><dd><p>
+           This specifies the data in the AMF packet is a boolean
+           value.
+         </p></dd><dt><span class="term">0x2</span></dt><dd><p>
+           This specifies the data in the AMF packet is an
+           <span class="emphasis"><em>ASCII</em></span> string. 
+         </p></dd><dt><span class="term">0x3</span></dt><dd><p>
+           This specifies the data in the AMF packet is a Flash
+           object. The Flash object data type field further along in
+           the message specifies which type of ActionScript object it
+           is.
+         </p></dd><dt><span class="term">0x4</span></dt><dd><p>
+           This specifies the data in the AMF packet is a Flash
+           movie, ie. another Flash movie.
+         </p></dd><dt><span class="term">0x5</span></dt><dd><p>
+           This specifies the data in the AMF packet is a NULL
+           value. NULL is often used as the return code from calling
+           Flash functions.
+         </p></dd><dt><span class="term">0x6</span></dt><dd><p>
+           This specifies the data in the AMF packet is a
+           undefined. This is also used as the return code from
+           calling Flash functions.
+         </p></dd><dt><span class="term">0x7</span></dt><dd><p>
+           This specifies the data in the AMF packet is a reference.
+         </p></dd><dt><span class="term">0x8</span></dt><dd><p>
+           This specifies the data in the AMF packet is a ECMA
+           array.
+         </p></dd><dt><span class="term">0x9</span></dt><dd><p>
+           This specifies the data in the AMF packet is the end of an
+           object definition. As an object is transmitted with
+           multiple AMF packets, this lets the server know when the
+           end of the object is reached.
+         </p></dd><dt><span class="term">0xa</span></dt><dd><p>
+           This specifies the data in the AMF packet is a Strict
+           array.
+         </p></dd><dt><span class="term">0xb</span></dt><dd><p>
+           This specifies the data in the AMF packet is a date.
+         </p></dd><dt><span class="term">0xc</span></dt><dd><p>
+           This specifies the data in the AMF packet is a multi-byte
+           string. Multi-byte strings are used for international
+           language support to represent non <span 
class="emphasis"><em>ASCII</em></span>
+           fonts.
+         </p></dd><dt><span class="term">0xd</span></dt><dd><p>
+           This specifies the data in the AMF packet is a an
+           unsupported feature.
+         </p></dd><dt><span class="term">0xe</span></dt><dd><p>
+           This specifies the data in the AMF packet is a record
+           set.
+         </p></dd><dt><span class="term">0xf</span></dt><dd><p>
+           This specifies the data in the AMF packet is a AML
+           object. XML objects are then parsed by the
+           <span class="emphasis"><em>XML</em></span> ActionScript class.
+         </p></dd><dt><span class="term">0x10</span></dt><dd><p>
+           This specifies the data in the AMF packet is a typed object.
+         </p></dd></dl></div><p>
+    
+  </p><p>
+    For messages with a 12 byte header, the last 4 bytes are the
+    routing of the message. If the destination is the server, this
+    value is the NetStream object source. If the destination is the
+    client, this is the NetStream object for this RTMP message. A
+    value of 0x00000000 appears to be reserved for the NetConnection
+    object. 
+  </p><p>
+    Multiple AMF streams can be contained in a single RTMP messages,
+    so it's important to check the index of each AMF packet.
+  </p><p>
+    An example RTMP header might look like this. (spaces added between
+    fields for clarity) All the numbers are in hex.
+
+    </p><pre class="screen">
+      03 000019 0000c9 14 000000000
+    </pre><p>
+    
+    </p><div class="variablelist"><dl><dt><span 
class="term">03</span></dt><dd><p>
+           The first two bits of this byte are the size of the
+           header, which in this example is 00, for a 12 byte
+           header. The next 6 bits is the AMF stream index number,
+           which in this example is 0x3.
+         </p></dd><dt><span class="term">000019</span></dt><dd><p>
+           These 3 bytes currently have an unknown purpose.
+         </p></dd><dt><span class="term">000c9</span></dt><dd><p>
+           Since this example has a 12 byte header, this is the size
+           of the RTMP message, in this case 201 bytes.
+         </p></dd><dt><span class="term">14</span></dt><dd><p>
+           This is the content type of the RTMP message, which in
+           this case is to invoke a remote function call. (which we
+           later see is the connect function).
+         </p></dd><dt><span class="term">00000000</span></dt><dd><p>
+           The source is the NetConnection object used to start this
+           connection.
+         </p></dd></dl></div><p>
+
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="amf"></a>AMF 
Format</h2></div></div></div><p>
+    The AMF format is used in the LocalConnection, SharedObject,
+    NetConnection, and NetStream ActionScript classes. This is a means
+    of binary data interchange between Flash movies, or between a
+    Flash player and a Flash server.
+  </p><p>
+    Like the RTMP messages, an AMF packet header can be of a variable
+    size. The size is either the same as the initial header of the
+    RTMP message, or a 1 byte header, which is commonly used for
+    streaming audio or video data.
+  </p><p>
+    The body of an AMF packet may look something like this
+    example. The spaces have been added for clarity.
+    
+    </p><pre class="screen">
+      02  0007 636f6e6e656374
+    </pre><p>
+
+    </p><div class="variablelist"><dl><dt><span 
class="term">02</span></dt><dd><p>
+           This is a single byte header. The value of the first 2
+           bits is 0x3, and the AMF index is also 0x3.
+         </p></dd><dt><span class="term">0007</span></dt><dd><p>
+           This is the length in bytes of the string.
+         </p></dd><dt><span class="term">63 6f 6e 6e 65 63 
74</span></dt><dd><p>
+           This is the string. Note that there is no null terminator
+           since the length is specified.
+         </p></dd></dl></div><p>
+
+  </p></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="nsapi"></a>Chapter 7. 
Mozilla/Firefox NPAPI Plugin</h2></div></div></div><div class="toc"><p><b>Table 
of Contents</b></p><dl><dt><span class="sect1"><a href="#plugincapi">Plugin C 
API</a></span></dt><dt><span class="sect1"><a href="#plugincppapi">Plugin C++ 
API</a></span></dt><dt><span class="sect1"><a href="#glthread">OpenGL and 
Threads</a></span></dt><dt><span class="sect1"><a href="#eventhandle">Plugin 
Event Handling</a></span></dt></dl></div><p>
+    The Mozilla SDK has two API layers for plugins. The older layer is
+    documented in the <a class="ulink" 
href="http://www.gnu.org/software/gnash/manual/plugin.pdf"; target="_top">
+    Geeko Plugin API Reference</a>, and the newer layer doesn't
+    appear to be documented. The new API is simpler, and is portable
+    across multiple versions of Mozilla or Firefox. The new API is
+    just a layer on top of the older one, so this manual still
+    applies.
+  </p><p>
+    Most of the programming of a plugin is filling in real emphasis for
+    the standard API functions and methods. Firefox uses these to
+    create the plugin, and to send it data.
+  </p><p>
+    When initializing or destroying a plugin, no matter how many
+    instances are being used, the C API is used. These functions are
+    typically called once for each plugin that is loaded.
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="plugincapi"></a>Plugin C 
API</h2></div></div></div><p>
+      The lower layer is a C based API which is used by Firefox to
+      initialize and destroy a plugin. This is so a plugin can be
+      portable across multiple systems, since C++ emphasis is not portable
+      between most C++ compilers. This is where most of the behind the
+      scenes work is done in a plugin. For Gnash, the sources this
+      lower layer are in <span 
class="emphasis"><em>plugin/mozilla-sdk</em></span>. They were
+      added to the Gnash source tree so it wouldn't be necessary to
+      have the Mozilla development packages installed to compile the
+      Gnash plugin.
+    </p><p>
+      This is also the older API used for plugins, so is usually the
+      one used if you dig around for plugin examples on the web. These
+      are the main functions which have to be implemented in a plugin
+      for it to be recognized by the browser, and to be initialized
+      and destroyed.
+    </p><div class="variablelist"><dl><dt><span 
class="term">NS_PluginInitialize</span></dt><dd><p>
+           This C function gets called once when the plugin is
+           loaded, regardless of how many instantiations there are
+           actually playing movies. So this is where all the one
+           time only initialization stuff goes that is shared by all
+           the threads.
+         </p></dd><dt><span 
class="term">NS_NewPluginInstance</span></dt><dd><p>
+           This instantiates a new object for the browser. Returning
+           a pointer to the C++ plugin object is what ties the C++
+           and C emphasis parts of the API together.
+         </p></dd><dt><span 
class="term">NS_DestroyPluginInstance</span></dt><dd><p>
+           This destroys our instantiated object when the browser is
+           done.
+         </p></dd><dt><span class="term">NS_PluginShutdown</span></dt><dd><p>
+           This is called when a plugin is shut down, so this is
+           where all the one time only shutdown stuff goes.
+         </p></dd><dt><span 
class="term">NPP_GetMIMEDescription</span></dt><dd><p>
+           This is called to get the MIME types the plugin supports.
+         </p></dd><dt><span class="term">NS_PluginGetValue</span></dt><dd><p>
+           This is used by Firefox to query information from the
+           plugin, like the supported MIME type, the version number,
+           and a description.
+         </p></dd></dl></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="plugincppapi"></a>Plugin C++ API</h2></div></div></div><p>
+      The higher level layer is the one we are most concerned
+      with. This is an instantiation of the
+      <span class="emphasis"><em>nsPluginInstanceBase</em></span> class, as 
defined by the
+      Mozilla SDK, for our plugin. With this API, a plugin is mostly
+      defining the standard entry points for Firefox, and the emphasis
+      that implements the glue between the Firefox and our plugin.
+    </p><p>
+      These are called for each instantiation of plugin. If there are
+      three Flash movies on a web page, then three instances are
+      created. Unfortunately for plugin programmers, these functions
+      may randomly be called more than once, so it's good to use
+      initialization flags for things that should only be done one per
+      thread. For instance, <span 
class="emphasis"><em>nsPluginInstance::init()</em></span> and
+      <span class="emphasis"><em>nsPluginInstance::SetWindow()</em></span> are 
called more than
+      once, so the plugin must protect against actions that could be
+      destructive.
+    </p><div class="variablelist"><dl><dt><span 
class="term">nsPluginInstance::nsPluginInstance</span></dt><dd><p>
+           Create a new plugin object.
+         </p></dd><dt><span 
class="term">nsPluginInstance::init</span></dt><dd><p>
+           This methods initializes the plugin object, and is
+           called for every movie which gets played. This is where
+           the thread-specific information goes.
+         </p></dd><dt><span 
class="term">nsPluginInstance::SetWindow</span></dt><dd><p>
+           This sets up the window the plugin is supposed to render
+           into. This calls passes in various information used by
+           the plugin to setup the window. This may get called
+           multiple times by each instantiated object, so it can't
+           do much but window specific setup here. This is where the
+           main emphasis is that sets up the window for the plugin.
+         </p></dd><dt><span 
class="term">nsPluginInstance::NewStream</span></dt><dd><p>
+           Opens a new incoming data stream, which is the flash
+           movie we want to play. A URL can be pretty ugly, like in
+           this example:
+           
http://www.sickwave.com/swf/navbar/navbar_sw.swf?atfilms=http%3a//www.atm.com/af/home/&amp;shickwave=http%3a//www.sickwave.com&amp;gblst=http%3a//gbst.sickwave.com/gb/gbHome.jsp&amp;known=0
 
../flash/gui.swf?ip_addr=foobar.com&amp;ip_port=3660&amp;show_cursor=true&amp;path_prefix=../flash/&amp;trapallkeys=true"
+           So this is where we parse the URL to get all the options
+           passed in when invoking the plugin.
+         </p></dd><dt><span 
class="term">nsPluginInstance::Write</span></dt><dd><p>
+           Read the data stream from Mozilla/Firefox.  For now we
+           read the bytes and write them to a disk file.
+         </p></dd><dt><span 
class="term">nsPluginInstance::WriteReady</span></dt><dd><p>
+           Return how many bytes we can read into the buffer.
+         </p></dd><dt><span 
class="term">nsPluginInstance::DestroyStream</span></dt><dd><p>
+           Destroy the data stream we've been reading. For Gnash,
+           when the stream is destroyed means we've grabbed the
+           entire movie. So we signal the thread to start reading and
+           playing the movie.
+         </p></dd><dt><span 
class="term">nsPluginInstance::shut</span></dt><dd><p>
+           This is where the movie playing specific shutdown emphasis goes.
+         </p></dd><dt><span 
class="term">nsPluginInstance::~nsPluginInstance</span></dt><dd><p>
+           This destroys our plugin object.
+         </p></dd><dt><span 
class="term">NS_PluginInitialize::initGL</span></dt><dd><p>
+           This is a Gnash internal function that sets up OpenGL.
+         </p></dd><dt><span 
class="term">NS_PluginInitialize::destroyContext</span></dt><dd><p>
+           This is a Gnash internal function that destroys a GLX
+           context. 
+         </p></dd><dt><span 
class="term">nsPluginInstance::getVersion</span></dt><dd><p>
+           This returns the version of Mozilla this plugin supports.
+         </p></dd><dt><span 
class="term">nsPluginInstance::GetValue</span></dt><dd><p>
+           This returns information to the browser about the plugin's
+           name and description.
+         </p></dd><dt><span 
class="term">nsPluginInstance::URLNotify</span></dt><dd><p>
+         </p></dd></dl></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="glthread"></a>OpenGL and Threads</h2></div></div></div><p>
+      Neither OpenGL nor X11 has any built-in support for threads. Most
+      actions aren't even atomic, so care has to be made to not corrupt
+      any internal data. While it is difficult to render OpenGL from
+      multiple threads, it can be done with the proper locking. The
+      downside is the locking adds a performance hit, since all the
+      threads will have to have the access synchronized by using
+      mutexes.
+    </p><p>
+      The X11 context is maintained one per instantiation of the
+      plugin. It is necessary to lock access to the X11 context when
+      using threads by using <span 
class="emphasis"><em>XLockDisplay()</em></span> and
+      <span class="emphasis"><em>XUnlockDisplay()</em></span>. A connection to 
the X11
+      server is opened for every instantiation of the plugin using
+      <span class="emphasis"><em>XOpenDisplay()</em></span>.
+    </p><p>
+      The <span class="emphasis"><em>GLX Context</em></span> is maintained one 
per
+      instantiation of the plugin for a web page. If there are more
+      than one Flash movie, there is more than one GLX Context. A GLX
+      context can be created by using <span 
class="emphasis"><em>glXCreateContext()</em></span>,
+      and then later destroyed by using <span 
class="emphasis"><em>glXDestroyContext()</em></span>.
+      When swapping threads, the context is changed using
+      <span class="emphasis"><em>glXMakeCurrent()</em></span>.
+    </p><p>
+      All the emphasis that directly accesses a GLX context or the X11
+      display must be wrapped with a mutex.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="eventhandle"></a>Plugin Event Handling</h2></div></div></div><p>
+      Firefox on most UNIX systems is a GTK+ application, so it is
+      possible to have the plugin hook into the X11 event handling via
+      GLX or GTK. Since Firefox uses GTK, so does Gnash. This also
+      allows the addition of a right-click mouse menu for controlling
+      the player. The GTK build of Gnash offers the best browsing
+      experience as it's more functional than the SDL version.
+    </p><p>
+      It is also possible to disable the <span 
class="emphasis"><em>GTK</em></span> support so
+      only the older <span class="emphasis"><em>SDL</em></span> support is 
used. In this case 
+      Gnash can't support event handling within the browser. This
+      means that when using the SDL of the plugin, mouse clicks and
+      keys pressed get ignored. Windows also can't be resized, and
+      sometimes they overrun their boundaries as well. To disable the
+      GTK support and force SDL to be used anyway, configure with
+      <span class="emphasis"><em>--disable-glext</em></span>
+    </p><p>
+      
+    </p></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="appendix"></a>Appendix</h2></div></div></div><div class="sect2" 
lang="en"><div class="titlepage"><div><div><h3 class="title"><a 
name="codestyle"></a>Code Style</h3></div></div></div><p>
+      I know any discussion of coding styles leads to strong opinions,
+      so I'll state simply I follow the <a class="ulink" 
href="http://www.gnu.org/prep/standards/standards.html"; target="_top">GNU
+      Coding Standards</a>. Where there is some flexibility as to
+      the location of braces, I prefer mine on the end of a line when
+      using an <span class="emphasis"><em>if</em></span>, <span 
class="emphasis"><em>while</em></span>, or <span 
class="emphasis"><em>do</em></span>
+      statement. I find this more compact style easier to read and
+      parse by eye. I'm also a big fan of always using
+      braces around <span class="emphasis"><em>if</em></span> statements, even 
if they're one
+      liners.
+    </p><p>
+      Here's my tweaked style settings for <span 
class="emphasis"><em>Emacs</em></span>, the one
+      true editor to rule them all.
+
+      </p><pre class="programlisting">
+      (defconst my-style
+          '((c-tab-always-indent   . t)
+           (c-auto-newline        . t)
+           (c-hanging-braces-alist . (
+                                  (brace-list-intro)
+                                  (namespace-open)
+                                  (inline-open)
+                                  (block-open)
+                                  (brace-list-open)
+                                  (brace-list-close)
+                                  (brace-entry-open)
+                                  (brace-else-brace)
+                                  (brace-elseif-brace)
+                                  (class-open after)
+                                  (class-close)
+                                  (defun-open after)
+                                  (defun-close)
+                                  (extern-lang-open)
+                                  (inexpr-class-open)
+                                  (statement-open)
+                                  (substatement-open)
+                                  (inexpr-class-close)))
+            (c-hanging-colons-alist . ((member-init-intro before)
+                                   (inher-intro)
+                                   (case-label after)
+                                   (label after)
+                                   (access-label after)))
+            (c-offsets-alist   . (
+                                  (innamespace . 0)
+                                   (case-label  . 2)
+                                  ))
+            (c-cleanup-list    . (
+                                  (scope-operator)
+                                  (empty-defun-braces)
+                                  (brace-else-brace)
+                                  (brace-elseif-brace)
+                                  (defun-close-semi)
+                                  (list-close-comma)
+                                  )
+                               )
+    ;; no automatic newlines after ';' if following line non-blank or inside
+    ;; one-line inline methods
+    (add-to-list 'c-hanging-semi&amp;comma-criteria
+                'c-semi&amp;comma-no-newlines-before-nonblanks)
+    (add-to-list 'c-hanging-semi&amp;comma-criteria
+                'c-semi&amp;comma-no-newlines-for-oneline-inliners)
+;    (knr-argdecl-intro . -)
+    (c-echo-syntactic-information-p . t)
+    )
+  "My GNU Programming Style")
+    </pre><p>
+
+    </p><p>
+      Another coding consideration: comments are good!  Over
+      commenting isn't good.  Here is an over commented example:
+
+      </p><pre class="programlisting">
+       counter++;              // increment counter
+      </pre><p>
+      
+      Gnash also uses <a class="ulink" href="http://www.doxygen.org"; 
target="_top">Doxygen</a> style
+      comments. These are processed by Doxygen when building a cross
+      reference of all the classes, and is a good way to help push
+      internals documentation from the depths of the code into
+      documentation where it can be seen by others.
+    </p><p>
+      <span class="emphasis"><em>Doxygen</em></span> style comments for <span 
class="emphasis"><em>C++</em></span> code involves
+      simply using three slashes <span class="emphasis"><em>///</em></span> 
instead of the
+      standard two slashes <span class="emphasis"><em>//</em></span> used for 
C++
+      comments. Here's a short comment block for the
+      <span class="emphasis"><em>XML::cloneNode()</em></span> method:
+
+      </p><pre class="programlisting">
+       /// \brief copy a node
+       ///
+       /// Method; constructs and returns a new XML node of the same type,
+       /// name, value, and attributes as the specified XML object. If deep
+       /// is set to true, all child nodes are recursively cloned, resulting
+       /// in an exact copy of the original object's document tree.
+       XMLNode &amp;
+       XML::cloneNode(XMLNode &amp;newnode, bool deep) {
+       ...
+       }
+      </pre><p> 
+    </p><p>
+      The <span class="emphasis"><em>\brief</em></span> keyword means that the 
+      text becomes associated
+      when listing all the classes on the generated web pages. The
+      text after the blank link becomes the detailed description which
+      appears on the generated web page for that class and method.
+    </p></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="authors"></a>Chapter 8. 
Authors</h2></div></div></div><p>
+        <span class="application">Gnash</span> is maintained by Rob Savoye. 
Other active developers
+       are: Sandro Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad
+       Musick, Benjamin Wolsey, and Zou Lunkai. Please send all
+       comments and suggestions to <code class="email">&lt;<a class="email" 
href="mailto:address@hidden";>address@hidden
+       </a>&gt;</code>. Past and sometimes current developers are Tomas
+       Groth and Markus Gothe.
+    </p><p>
+        <span class="application">Gnash</span> was initially derived from 
<span class="application">GameSWF</span>.
+        <span class="application">GameSWF</span> is maintained by
+        Thatcher Ulrich <code class="email">&lt;<a class="email" 
href="mailto:address@hidden";>address@hidden</a>&gt;</code>.  The following
+        people contributed to <span class="application">GameSWF</span>:
+        Mike Shaver, Thierry Berger-Perrin,
+       Ignacio Castaño, Willem Kokke, Vitaly Alexeev, Alexander Streit, 
+        and Rob Savoye.
+    </p></div><div class="appendix" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="fdl"></a>Appendix A. GNU 
Free Documentation License</h2></div><div><p class="releaseinfo">
+      Version 1.1, March 2000
+    </p></div><div><p class="copyright">Copyright © 2000 Free Software 
Foundation, Inc.</p></div><div><div class="legalnotice"><a 
name="fdl-legalnotice"></a><p>
+       </p><div class="address"><p>Free Software Foundation, Inc. <span 
class="street">59 Temple Place, <br>
+        Suite 330</span>, <span class="city">Boston</span>, <span 
class="state">MA</span>  <br>
+        <span class="postcode">02111-1307</span>  <span 
class="country">USA</span></p></div><p> 
+       Everyone is permitted to copy and distribute verbatim copies of this 
+        license document, but changing it is not allowed.
+      </p></div></div></div></div><div class="toc"><p><b>Table of 
Contents</b></p><dl><dt><span class="sect1"><a href="#fdl-preamble">0. 
PREAMBLE</a></span></dt><dt><span class="sect1"><a href="#fdl-section1">1. 
APPLICABILITY AND DEFINITIONS</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section2">2. VERBATIM COPYING</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section3">3. COPYING IN 
QUANTITY</a></span></dt><dt><span class="sect1"><a href="#fdl-section4">4. 
MODIFICATIONS</a></span></dt><dt><span class="sect1"><a href="#fdl-section5">5. 
COMBINING DOCUMENTS</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section6">6. COLLECTIONS OF DOCUMENTS</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section7">7. AGGREGATION WITH INDEPENDENT 
WORKS</a></span></dt><dt><span class="sect1"><a href="#fdl-section8">8. 
TRANSLATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section9">9. 
TERMINATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section10">10. 
FUTURE REVISIONS OF THIS LICENSE</a></span></dt><dt><span class="sect1"><a 
href="#fdl-using">Addendum</a></span></dt></dl></div><div class="sect1" 
lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: 
both"><a name="fdl-preamble"></a>0. PREAMBLE</h2></div></div></div><p>
+      The purpose of this License is to make a manual, textbook, or
+      other written document "free" in the sense of
+      freedom: to assure everyone the effective freedom to copy and
+      redistribute it, with or without modifying it, either
+      commercially or non-commercially. Secondarily, this License
+      preserves for the author and publisher a way to get credit for
+      their work, while not being considered responsible for
+      modifications made by others.
+    </p><p>
+      This License is a kind of "copyleft", which means
+      that derivative works of the document must themselves be free in
+      the same sense. It complements the GNU General Public License,
+      which is a copyleft license designed for free software.
+    </p><p>
+      We have designed this License in order to use it for manuals for
+      free software, because free software needs free documentation: a
+      free program should come with manuals providing the same
+      freedoms that the software does. But this License is not limited
+      to software manuals; it can be used for any textual work,
+      regardless of subject matter or whether it is published as a
+      printed book. We recommend this License principally for works
+      whose purpose is instruction or reference.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section1"></a>1. APPLICABILITY AND 
DEFINITIONS</h2></div></div></div><p><a name="fdl-document"></a>
+      This License applies to any manual or other work that contains a
+      notice placed by the copyright holder saying it can be
+      distributed under the terms of this License. The
+      "Document", below, refers to any such manual or
+      work. Any member of the public is a licensee, and is addressed
+      as "you".
+    </p><p><a name="fdl-modified"></a>
+      A "Modified Version" of the Document means any work
+      containing the Document or a portion of it, either copied
+      verbatim, or with modifications and/or translated into another
+      language.
+    </p><p><a name="fdl-secondary"></a>
+      A "Secondary Section" is a named appendix or a
+      front-matter section of the <a class="link" 
href="#fdl-document">Document</a> that deals exclusively
+      with the relationship of the publishers or authors of the
+      Document to the Document's overall subject (or to related
+      matters) and contains nothing that could fall directly within
+      that overall subject. (For example, if the Document is in part a
+      textbook of mathematics, a Secondary Section may not explain any
+      mathematics.)  The relationship could be a matter of historical
+      connection with the subject or with related matters, or of
+      legal, commercial, philosophical, ethical or political position
+      regarding them.
+    </p><p><a name="fdl-invariant"></a>
+      The "Invariant Sections" are certain <a class="link" 
href="#fdl-secondary"> Secondary Sections</a> whose titles
+      are designated, as being those of Invariant Sections, in the
+      notice that says that the <a class="link" 
href="#fdl-document">Document</a> is released under this
+      License.
+    </p><p><a name="fdl-cover-texts"></a>
+      The "Cover Texts" are certain short passages of
+      text that are listed, as Front-Cover Texts or Back-Cover Texts,
+      in the notice that says that the <a class="link" 
href="#fdl-document">Document</a> is released under this
+      License.
+    </p><p><a name="fdl-transparent"></a>
+      A "Transparent" copy of the <a class="link" href="#fdl-document"> 
Document</a> means a machine-readable
+      copy, represented in a format whose specification is available
+      to the general public, whose contents can be viewed and edited
+      directly and straightforwardly with generic text editors or (for
+      images composed of pixels) generic paint programs or (for
+      drawings) some widely available drawing editor, and that is
+      suitable for input to text formatters or for automatic
+      translation to a variety of formats suitable for input to text
+      formatters. A copy made in an otherwise Transparent file format
+      whose markup has been designed to thwart or discourage
+      subsequent modification by readers is not Transparent.  A copy
+      that is not "Transparent" is called "Opaque".
+    </p><p>
+      Examples of suitable formats for Transparent copies include
+      plain ASCII without markup, Texinfo input format, LaTeX input
+      format, SGML or XML using a publicly available DTD, and
+      standard-conforming simple HTML designed for human
+      modification. Opaque formats include PostScript, PDF,
+      proprietary formats that can be read and edited only by
+      proprietary word processors, SGML or XML for which the DTD
+      and/or processing tools are not generally available, and the
+      machine-generated HTML produced by some word processors for
+      output purposes only.
+    </p><p><a name="fdl-title-page"></a>
+      The "Title Page" means, for a printed book, the
+      title page itself, plus such following pages as are needed to
+      hold, legibly, the material this License requires to appear in
+      the title page. For works in formats which do not have any title
+      page as such, "Title Page" means the text near the
+      most prominent appearance of the work's title, preceding the
+      beginning of the body of the text.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section2"></a>2. VERBATIM COPYING</h2></div></div></div><p>
+      You may copy and distribute the <a class="link" 
href="#fdl-document">Document</a> in any medium, either
+      commercially or noncommercially, provided that this License, the
+      copyright notices, and the license notice saying this License
+      applies to the Document are reproduced in all copies, and that
+      you add no other conditions whatsoever to those of this
+      License. You may not use technical measures to obstruct or
+      control the reading or further copying of the copies you make or
+      distribute. However, you may accept compensation in exchange for
+      copies. If you distribute a large enough number of copies you
+      must also follow the conditions in <a class="link" href="#fdl-section3" 
title="3. COPYING IN QUANTITY">section 3</a>.
+    </p><p>
+      You may also lend copies, under the same conditions stated
+      above, and you may publicly display copies.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section3"></a>3. COPYING IN QUANTITY</h2></div></div></div><p>
+      If you publish printed copies of the <a class="link" 
href="#fdl-document">Document</a> numbering more than 100,
+      and the Document's license notice requires <a class="link" 
href="#fdl-cover-texts">Cover Texts</a>, you must enclose
+      the copies in covers that carry, clearly and legibly, all these
+      Cover Texts: Front-Cover Texts on the front cover, and
+      Back-Cover Texts on the back cover. Both covers must also
+      clearly and legibly identify you as the publisher of these
+      copies. The front cover must present the full title with all
+      words of the title equally prominent and visible. You may add
+      other material on the covers in addition. Copying with changes
+      limited to the covers, as long as they preserve the title of the
+      <a class="link" href="#fdl-document">Document</a> and satisfy these
+      conditions, can be treated as verbatim copying in other
+      respects.
+    </p><p>
+      If the required texts for either cover are too voluminous to fit
+      legibly, you should put the first ones listed (as many as fit
+      reasonably) on the actual cover, and continue the rest onto
+      adjacent pages.
+    </p><p>
+      If you publish or distribute <a class="link" 
href="#fdl-transparent">Opaque</a> copies of the <a class="link" 
href="#fdl-document">Document</a> numbering more than 100,
+      you must either include a machine-readable <a class="link" 
href="#fdl-transparent">Transparent</a> copy along with
+      each Opaque copy, or state in or with each Opaque copy a
+      publicly-accessible computer-network location containing a
+      complete Transparent copy of the Document, free of added
+      material, which the general network-using public has access to
+      download anonymously at no charge using public-standard network
+      protocols. If you use the latter option, you must take
+      reasonably prudent steps, when you begin distribution of Opaque
+      copies in quantity, to ensure that this Transparent copy will
+      remain thus accessible at the stated location until at least one
+      year after the last time you distribute an Opaque copy (directly
+      or through your agents or retailers) of that edition to the
+      public.
+    </p><p>
+      It is requested, but not required, that you contact the authors
+      of the <a class="link" href="#fdl-document">Document</a> well before
+      redistributing any large number of copies, to give them a chance
+      to provide you with an updated version of the Document.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section4"></a>4. MODIFICATIONS</h2></div></div></div><p>
+      You may copy and distribute a <a class="link" 
href="#fdl-modified">Modified Version</a> of the <a class="link" 
href="#fdl-document">Document</a> under the conditions of
+      sections <a class="link" href="#fdl-section2" title="2. VERBATIM 
COPYING">2</a> and <a class="link" href="#fdl-section3" title="3. COPYING IN 
QUANTITY">3</a> above, provided that you release
+      the Modified Version under precisely this License, with the
+      Modified Version filling the role of the Document, thus
+      licensing distribution and modification of the Modified Version
+      to whoever possesses a copy of it. In addition, you must do
+      these things in the Modified Version:
+    </p><div class="itemizedlist"><ul type="opencircle"><li 
style="list-style-type: circle"><p><b>A. </b>
+           Use in the <a class="link" href="#fdl-title-page">Title
+           Page</a> (and on the covers, if any) a title distinct
+           from that of the <a class="link" href="#fdl-document">Document</a>, 
and from those of
+           previous versions (which should, if there were any, be
+           listed in the History section of the Document). You may
+           use the same title as a previous version if the original
+           publisher of that version gives permission.
+         </p></li><li style="list-style-type: circle"><p><b>B. </b>
+           List on the <a class="link" href="#fdl-title-page">Title
+           Page</a>, as authors, one or more persons or entities
+           responsible for authorship of the modifications in the
+           <a class="link" href="#fdl-modified">Modified Version</a>,
+           together with at least five of the principal authors of
+           the <a class="link" href="#fdl-document">Document</a> (all of
+           its principal authors, if it has less than five).
+         </p></li><li style="list-style-type: circle"><p><b>C. </b>
+           State on the <a class="link" href="#fdl-title-page">Title
+           Page</a> the name of the publisher of the <a class="link" 
href="#fdl-modified">Modified Version</a>, as the
+           publisher.
+         </p></li><li style="list-style-type: circle"><p><b>D. </b>
+           Preserve all the copyright notices of the <a class="link" 
href="#fdl-document">Document</a>.
+         </p></li><li style="list-style-type: circle"><p><b>E. </b>
+           Add an appropriate copyright notice for your modifications
+           adjacent to the other copyright notices.
+         </p></li><li style="list-style-type: circle"><p><b>F. </b>
+           Include, immediately after the copyright notices, a
+           license notice giving the public permission to use the
+           <a class="link" href="#fdl-modified">Modified Version</a> under
+           the terms of this License, in the form shown in the
+           Addendum below.
+         </p></li><li style="list-style-type: circle"><p><b>G. </b>
+           Preserve in that license notice the full lists of <a class="link" 
href="#fdl-invariant"> Invariant Sections</a> and
+           required <a class="link" href="#fdl-cover-texts">Cover
+           Texts</a> given in the <a class="link" 
href="#fdl-document">Document's</a> license notice.
+         </p></li><li style="list-style-type: circle"><p><b>H. </b>
+           Include an unaltered copy of this License.
+         </p></li><li style="list-style-type: circle"><p><b>I. </b>
+           Preserve the section entitled "History", and
+           its title, and add to it an item stating at least the
+           title, year, new authors, and publisher of the <a class="link" 
href="#fdl-modified">Modified Version </a>as given on
+           the <a class="link" href="#fdl-title-page">Title Page</a>.  If
+           there is no section entitled "History" in the
+           <a class="link" href="#fdl-document">Document</a>, create one
+           stating the title, year, authors, and publisher of the
+           Document as given on its Title Page, then add an item
+           describing the Modified Version as stated in the previous
+           sentence.
+         </p></li><li style="list-style-type: circle"><p><b>J. </b>
+           Preserve the network location, if any, given in the <a class="link" 
href="#fdl-document">Document</a> for public access
+           to a <a class="link" href="#fdl-transparent">Transparent</a>
+           copy of the Document, and likewise the network locations
+           given in the Document for previous versions it was based
+           on. These may be placed in the "History"
+           section.  You may omit a network location for a work that
+           was published at least four years before the Document
+           itself, or if the original publisher of the version it
+           refers to gives permission.
+         </p></li><li style="list-style-type: circle"><p><b>K. </b>
+           In any section entitled "Acknowledgements" or
+           "Dedications", preserve the section's title,
+           and preserve in the section all the substance and tone of
+           each of the contributor acknowledgements and/or
+           dedications given therein.
+         </p></li><li style="list-style-type: circle"><p><b>L. </b>
+           Preserve all the <a class="link" href="#fdl-invariant">Invariant
+           Sections</a> of the <a class="link" 
href="#fdl-document">Document</a>, unaltered in their
+           text and in their titles.  Section numbers or the
+           equivalent are not considered part of the section titles.
+         </p></li><li style="list-style-type: circle"><p><b>M. </b>
+           Delete any section entitled
+           "Endorsements". Such a section may not be
+           included in the <a class="link" href="#fdl-modified">Modified
+           Version</a>.
+         </p></li><li style="list-style-type: circle"><p><b>N. </b>
+           Do not retitle any existing section as
+           "Endorsements" or to conflict in title with
+           any <a class="link" href="#fdl-invariant">Invariant
+           Section</a>.
+         </p></li></ul></div><p>
+      If the <a class="link" href="#fdl-modified">Modified Version</a>
+      includes new front-matter sections or appendices that qualify as
+      <a class="link" href="#fdl-secondary">Secondary Sections</a> and
+      contain no material copied from the Document, you may at your
+      option designate some or all of these sections as invariant. To
+      do this, add their titles to the list of <a class="link" 
href="#fdl-invariant">Invariant Sections</a> in the
+      Modified Version's license notice.  These titles must be
+      distinct from any other section titles.
+    </p><p>
+      You may add a section entitled "Endorsements",
+      provided it contains nothing but endorsements of your <a class="link" 
href="#fdl-modified">Modified Version</a> by various
+      parties--for example, statements of peer review or that the text
+      has been approved by an organization as the authoritative
+      definition of a standard.
+    </p><p>
+      You may add a passage of up to five words as a <a class="link" 
href="#fdl-cover-texts">Front-Cover Text</a>, and a passage
+      of up to 25 words as a <a class="link" 
href="#fdl-cover-texts">Back-Cover Text</a>, to the end of
+      the list of <a class="link" href="#fdl-cover-texts">Cover Texts</a>
+      in the <a class="link" href="#fdl-modified">Modified Version</a>.
+      Only one passage of Front-Cover Text and one of Back-Cover Text
+      may be added by (or through arrangements made by) any one
+      entity. If the <a class="link" href="#fdl-document">Document</a>
+      already includes a cover text for the same cover, previously
+      added by you or by arrangement made by the same entity you are
+      acting on behalf of, you may not add another; but you may
+      replace the old one, on explicit permission from the previous
+      publisher that added the old one.
+    </p><p>
+      The author(s) and publisher(s) of the <a class="link" 
href="#fdl-document">Document</a> do not by this License
+      give permission to use their names for publicity for or to
+      assert or imply endorsement of any <a class="link" 
href="#fdl-modified">Modified Version </a>.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section5"></a>5. COMBINING DOCUMENTS</h2></div></div></div><p>
+      You may combine the <a class="link" href="#fdl-document">Document</a>
+      with other documents released under this License, under the
+      terms defined in <a class="link" href="#fdl-section4" title="4. 
MODIFICATIONS">section 4</a>
+      above for modified versions, provided that you include in the
+      combination all of the <a class="link" href="#fdl-invariant">Invariant
+      Sections</a> of all of the original documents, unmodified,
+      and list them all as Invariant Sections of your combined work in
+      its license notice.
+    </p><p>
+      The combined work need only contain one copy of this License,
+      and multiple identical <a class="link" href="#fdl-invariant">Invariant
+      Sections</a> may be replaced with a single copy. If there are
+      multiple Invariant Sections with the same name but different
+      contents, make the title of each such section unique by adding
+      at the end of it, in parentheses, the name of the original
+      author or publisher of that section if known, or else a unique
+      number. Make the same adjustment to the section titles in the
+      list of Invariant Sections in the license notice of the combined
+      work.
+    </p><p>
+      In the combination, you must combine any sections entitled
+      "History" in the various original documents,
+      forming one section entitled "History"; likewise
+      combine any sections entitled "Acknowledgements",
+      and any sections entitled "Dedications".  You must
+      delete all sections entitled "Endorsements."
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section6"></a>6. COLLECTIONS OF DOCUMENTS</h2></div></div></div><p>
+      You may make a collection consisting of the <a class="link" 
href="#fdl-document">Document</a> and other documents
+      released under this License, and replace the individual copies
+      of this License in the various documents with a single copy that
+      is included in the collection, provided that you follow the
+      rules of this License for verbatim copying of each of the
+      documents in all other respects.
+    </p><p>
+      You may extract a single document from such a collection, and
+      distribute it individually under this License, provided you
+      insert a copy of this License into the extracted document, and
+      follow this License in all other respects regarding verbatim
+      copying of that document.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section7"></a>7. AGGREGATION WITH INDEPENDENT 
WORKS</h2></div></div></div><p>
+      A compilation of the <a class="link" href="#fdl-document">Document</a> 
or its derivatives with
+      other separate and independent documents or works, in or on a
+      volume of a storage or distribution medium, does not as a whole
+      count as a <a class="link" href="#fdl-modified">Modified Version</a>
+      of the Document, provided no compilation copyright is claimed
+      for the compilation.  Such a compilation is called an
+      "aggregate", and this License does not apply to the
+      other self-contained works thus compiled with the Document , on
+      account of their being thus compiled, if they are not themselves
+      derivative works of the Document.  If the <a class="link" 
href="#fdl-cover-texts">Cover Text</a> requirement of <a class="link" 
href="#fdl-section3" title="3. COPYING IN QUANTITY">section 3</a> is applicable 
to these
+      copies of the Document, then if the Document is less than one
+      quarter of the entire aggregate, the Document's Cover Texts may
+      be placed on covers that surround only the Document within the
+      aggregate. Otherwise they must appear on covers around the whole
+      aggregate.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section8"></a>8. TRANSLATION</h2></div></div></div><p>
+      Translation is considered a kind of modification, so you may
+      distribute translations of the <a class="link" 
href="#fdl-document">Document</a> under the terms of <a class="link" 
href="#fdl-section4" title="4. MODIFICATIONS">section 4</a>. Replacing <a 
class="link" href="#fdl-invariant"> Invariant Sections</a> with
+      translations requires special permission from their copyright
+      holders, but you may include translations of some or all
+      Invariant Sections in addition to the original versions of these
+      Invariant Sections. You may include a translation of this
+      License provided that you also include the original English
+      version of this License. In case of a disagreement between the
+      translation and the original English version of this License,
+      the original English version will prevail.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section9"></a>9. TERMINATION</h2></div></div></div><p>
+      You may not copy, modify, sublicense, or distribute the <a class="link" 
href="#fdl-document">Document</a> except as expressly
+      provided for under this License. Any other attempt to copy,
+      modify, sublicense or distribute the Document is void, and will
+      automatically terminate your rights under this License. However,
+      parties who have received copies, or rights, from you under this
+      License will not have their licenses terminated so long as such
+      parties remain in full compliance.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section10"></a>10. FUTURE REVISIONS OF THIS 
LICENSE</h2></div></div></div><p>
+      The <a class="ulink" href="http://www.gnu.org/fsf/fsf.html"; 
target="_top">Free Software
+      Foundation</a> may publish new, revised versions of the GNU
+      Free Documentation License from time to time. Such new versions
+      will be similar in spirit to the present version, but may differ
+      in detail to address new problems or concerns. See <a class="ulink" 
href="http://www.gnu.org/copyleft"; 
target="_top">http://www.gnu.org/copyleft/</a>.
+    </p><p>
+      Each version of the License is given a distinguishing version
+      number. If the <a class="link" href="#fdl-document">Document</a>
+      specifies that a particular numbered version of this License
+      "or any later version" applies to it, you have the
+      option of following the terms and conditions either of that
+      specified version or of any later version that has been
+      published (not as a draft) by the Free Software Foundation. If
+      the Document does not specify a version number of this License,
+      you may choose any version ever published (not as a draft) by
+      the Free Software Foundation.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-using"></a>Addendum</h2></div></div></div><p>
+      To use this License in a document you have written, include a copy of
+      the License in the document and put the following copyright and
+      license notices just after the title page:
+    </p><div class="blockquote"><blockquote class="blockquote"><p>
+       Copyright 2008, Free Software Foundation.
+      </p><p>
+       Permission is granted to copy, distribute and/or modify this
+       document under the terms of the GNU Free Documentation
+       License, Version 1.1 or any later version published by the
+       Free Software Foundation; with no<a class="link" 
href="#fdl-invariant">Invariant Sections</a>, with no <a class="link" 
href="#fdl-cover-texts">Front-Cover Texts</a>,
+       and with no <a class="link" href="#fdl-cover-texts">Back-Cover
+       Texts</a>. A copy of the license is included in
+       the section entitled "GNU Free Documentation License".
+      </p></blockquote></div><p>
+      If your document contains nontrivial examples of program code,
+      we recommend releasing these examples in parallel under your
+      choice of free software license, such as the <a class="ulink" 
href="http://www.gnu.org/copyleft/gpl.html"; target="_top"> GNU General Public
+      License</a>, to permit their use in free software.
+    </p></div></div></div></body></html>

Index: doc/C/preformatted/gnashuser.html.in
===================================================================
RCS file: doc/C/preformatted/gnashuser.html.in
diff -N doc/C/preformatted/gnashuser.html.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnashuser.html.in        2 Mar 2008 16:32:22 -0000       
1.1
@@ -0,0 +1,1332 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; 
charset=ISO-8859-1"><title>Gnash User Manual</title><meta name="generator" 
content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" 
text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" 
lang="en"><div class="titlepage"><div><div><h1 class="title"><a 
name="index"></a>Gnash User Manual</h1></div><div><p class="releaseinfo">
+        This manual describes version 0.8.2 of Gnash.
+    </p></div><div><p class="copyright">Copyright © 2005, 2006, 2007, 2008 
Free Software Foundation</p></div><div><div class="legalnotice"><a 
name="legalnotice"></a><p>
+    Permission is granted to copy, distribute and/or modify this document
+    under the terms of the <a class="link" href="#fdl" title="Appendix A. GNU 
Free Documentation License"><em class="citetitle">GNU
+    Free Documentation License</em></a>, Version 1.1 or any later
+    version published by the Free Software Foundation with no Invariant
+    Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find
+    a copy of the GFDL at this 
+    <a class="link" href="#fdl" title="Appendix A. GNU Free Documentation 
License">link</a> or in the file COPYING-DOCS
+    distributed with this manual.
+   </p></div></div><div><div class="revhistory"><table border="1" width="100%" 
summary="Revision history"><tr><th align="left" valign="top" 
colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision 
Gnash User Manual version 0.1</td><td align="left">Feb 2008</td></tr><tr><td 
align="left" colspan="2"> 
+      <p class="author">Rob Savoye
+      <code class="email">&lt;<a class="email" 
href="mailto:address@hidden";>address@hidden</a>&gt;</code>
+      The end user parts of the manual have been pulled out of
+      the original version of the manual, and rewritten.
+      </p>
+      
+      <p class="publisher">Open Media Now! Foundation</p>
+    </td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table 
of Contents</b></p><dl><dt><span class="chapter"><a href="#intro">1. 
Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a 
href="#audience">Audience</a></span></dt><dt><span class="sect1"><a 
href="#runs-on">What Is Supported ?</a></span></dt></dl></dd><dt><span 
class="chapter"><a href="#usage">2. Using <span 
class="application">Gnash</span></a></span></dt><dd><dl><dt><span 
class="sect1"><a href="#options"><span class="application">Gnash</span> Command 
Line Options</a></span></dt><dt><span class="sect1"><a href="#keys"><span 
class="application">Gnash</span> Interactive Control 
Keys</a></span></dt><dt><span class="sect1"><a href="#gnashrc">User 
Configuration File</a></span></dt></dl></dd><dt><span class="chapter"><a 
href="#build">3. Installing and Configuring 
Gnash</a></span></dt><dd><dl><dt><span class="sect1"><a 
href="#requirements">Requirements</a></span></dt><dd><dl><dt><span 
class="sect2"><a href="#hardware">Hardware 
Requirements</a></span></dt><dt><span class="sect2"><a 
href="#software">Software Requirements</a></span></dt></dl></dd><dt><span 
class="sect1"><a href="#downloading">Downloading 
Gnash</a></span></dt><dd><dl><dt><span class="sect2"><a 
href="#gettingsource">Getting the Source</a></span></dt><dt><span 
class="sect2"><a href="#getcodecs">Getting Codec 
Support</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a 
href="#bugreport">4. Reporting Bugs</a></span></dt><dd><dl><dt><span 
class="sect1"><a href="#bugstep_package">Get a Fresh Binary 
Package</a></span></dt><dt><span class="sect1"><a 
href="#bugstep_search">Determine if the bug was previously 
reported</a></span></dt><dt><span class="sect1"><a 
href="#bugstep_guidelines">Review the bug writing 
guidelines</a></span></dt><dt><span class="sect1"><a 
href="#bugstep_file">Filing a bug report</a></span></dt></dl></dd><dt><span 
class="glossary"><a href="#glossary">Glossary</a></span></dt><dt><span 
class="chapter"><a href="#authors">5. Authors</a></span></dt><dt><span 
class="appendix"><a href="#fdl">A. GNU Free Documentation 
License</a></span></dt><dd><dl><dt><span class="sect1"><a 
href="#fdl-preamble">0. PREAMBLE</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section1">1. APPLICABILITY AND DEFINITIONS</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section2">2. VERBATIM 
COPYING</a></span></dt><dt><span class="sect1"><a href="#fdl-section3">3. 
COPYING IN QUANTITY</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section4">4. MODIFICATIONS</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section5">5. COMBINING DOCUMENTS</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section6">6. COLLECTIONS OF 
DOCUMENTS</a></span></dt><dt><span class="sect1"><a href="#fdl-section7">7. 
AGGREGATION WITH INDEPENDENT WORKS</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section8">8. TRANSLATION</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section9">9. TERMINATION</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section10">10. FUTURE REVISIONS OF THIS 
LICENSE</a></span></dt><dt><span class="sect1"><a 
href="#fdl-using">Addendum</a></span></dt></dl></dd></dl></div><div 
class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>2.1. <a 
href="#tb-command-line-options">Gnash Command Line Options</a></dt><dt>2.2. <a 
href="#tb-control-keys">Gnash Interactive Control Keys</a></dt><dt>2.3. <a 
href="#tb-config-variables">User Configuration Variables</a></dt><dt>3.1. <a 
href="#tb-os-cpu">Build Matrix</a></dt></dl></div><div class="chapter" 
lang="en"><div class="titlepage"><div><div><h2 class="title"><a 
name="intro"></a>Chapter 1. Introduction</h2></div></div></div><div 
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a 
href="#audience">Audience</a></span></dt><dt><span class="sect1"><a 
href="#runs-on">What Is Supported ?</a></span></dt></dl></div><p>
+    <span class="application">Gnash</span> is a free SWF movie player.  It is 
available as a
+    stand-alone application or as a plugin for several popular
+    web browsers. It supports playing media from a disk or streaming
+    over a network connection. Some popular video sharing sites like
+    YouTube are supported from a wide vaariety of devices from
+    embedded ones to modern desktops.
+  </p><p>
+    <span class="application">Gnash</span> has a better focus on security, 
allowing the user tight
+    control of all network or disk based I/O. Gnash also supports
+    extending ActionScript by creating your own. You can write
+    wrappers for any development library, and import them into the
+    player much like perl or python does.
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a 
name="audience"></a>Audience</h2></div></div></div><p>
+      This manual is primarily focused on users interested in how to
+      get Gnash installed from a package, and basic usage as a web
+      browser plugin. For more technical details, please refer to the
+      Gnash Reference manual.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="runs-on"></a>What Is Supported ?</h2></div></div></div><p>
+      Gnash is known to compile for most any POSIX and ANSI C++
+      conforming system if you have all the dependent libraries
+      installed. Systems we test on, and which Gnash is know to
+      run on are Ubuntu, Fedora, Debian, OpenBSD, NetBSD, FreeBSD,
+      Win32, and Darwin (OSX) primarily. Occasionally other platforms
+      are built, primarily by those distribution maintainers. This
+      includes BeOS, Haiku, Syllable, OS/2, Solaris, Slackware, and
+      Gentoo.
+    </p><p>
+      Gnash is a capable of reading up to SWF v9 files and opcodes,
+      but primarily supports SWF v7, with better SWF v8 and v9
+      support under heavy developement. With the 0.8.2 release,
+      Gnash includes initial parser support for SWF v8 and v9.
+      Not all ActionScript 2 classes are implemented yet, but all of the
+      most heavily used ones are. Many ActionScript 2 classes are
+      partially implemented; there is support for all of the
+      commonly used methods of each class.
+    </p><p>
+      Gnash has implemented about 80% of ActionScript v. 2.0, and has
+      begun implementing ActionScript v. 3.0. Gnash supports the
+      majority of Flash opcodes up to SWF version 9, and a wide
+      sampling of ActionScript classes for SWF version 8.
+    </p><p>
+      As ActionsScript 3 is a more developed version of
+      ActionScript 2, many of the same classes work for
+      both. Support has been added to Gnash's ActionScript library
+      to support the new ActionScript 3 filters, which get applied
+      to every class. Implementing ActionScript clases is often the
+      easiest way for new Gnash developers to make a contribution
+      without a deep internal knpowledge of Gnash.
+    </p><p>
+      Gnash has included video support since early 2007, but this is
+      an every changing field of reverse engineering. Many of the
+      popular video sharing sites use SWF v8 or v9, which Gnash
+      still has imperfect support for. This is improving all the
+      time, so often builds from a development snapshot will work
+      when using the older release packaged in your distribution
+      doesn't. You can find daily snapshots of the latest CVS tree
+      at: <a class="ulink" href="http://www.gnashdev.org/dev_snapshots/"; 
target="_top">
+      http://www.gnashdev.org/dev_snapshots</a>.
+    </p><p>
+      Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+      should work with Gnash. Gnash supports the loading of patent
+      free codecs like Ogg Vorbis or Theora from disk based files,
+      while work is being done to support these codecs when embedded
+      in a SWF file. Ffmpeg contains the codecs used by the current
+      SWF defintion, FLV, VP6 (ON2), H.263, H.264, and MP3.
+    </p></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="usage"></a>Chapter 2. 
Using <span class="application">Gnash</span></h2></div></div></div><div 
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a 
href="#options"><span class="application">Gnash</span> Command Line 
Options</a></span></dt><dt><span class="sect1"><a href="#keys"><span 
class="application">Gnash</span> Interactive Control 
Keys</a></span></dt><dt><span class="sect1"><a href="#gnashrc">User 
Configuration File</a></span></dt></dl></div><p>
+    When used as a standalone player, you can play any Flash file from
+    the command line by entering a command of the format: 
+    </p><pre class="programlisting">
+      gnash <em class="replaceable"><code>&lt;option&gt; 
&lt;flashfile.swf&gt;</code></em>
+    </pre><p>
+    The only required argument is the name (and location)of the file
+    to be played. 
+  </p><p>
+    The available options are listed in the following section, or you
+    may view them in the terminal window by executing the following at
+    the command line: 
+    </p><pre class="programlisting">
+      gnash --help |less
+    </pre><p>
+  </p><p>
+    The source code download of <span class="application">Gnash</span> 
includes several example .SWF
+    files.  They are located in the
+    <code class="filename">testsuite/samples/</code> directory of the <span 
class="application">Gnash</span>
+    source directory.  If you have installed <span 
class="application">Gnash</span> correctly, issuing
+    the a command similar to the following plays a short animation of
+    a car swerving and crashing: 
+    </p><pre class="programlisting">
+      gnash
+      /home/<em 
class="replaceable"><code>&lt;username&gt;</code></em>/gnash/testsuite/car_smash.swf
 
+    </pre><p>
+    </p><div class="mediaobject" align="center"><img 
src="images/car_crash.png" align="middle"></div><p>
+  </p><p>
+    The above is useful for playing Flash files downloaded to your
+    local system.  It is also possible to play Flash files directly
+    from the web.  To do so, use the <code class="option">-u</code> option 
along
+    with the URL of the desired file. 
+    </p><pre class="programlisting">
+      gnash -u http://example.domain.com/flashfile.swf
+    </pre><p>
+    Note that this will not work with every website; some embedded
+    Flash files are difficult to play. 
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="options"></a><span 
class="application">Gnash</span> Command Line Options</h2></div></div></div><p>
+      No options are required for  <span class="application">Gnash</span>'s 
default behavior.  However,
+      there are many options that can be used to that behavior. 
+    </p><p>
+      </p><pre class="programlisting">
+       gnash <em class="replaceable"><code>&lt;options&gt;</code></em>
+       <code class="filename">filename.swf</code> 
+      </pre><p>
+    </p><div class="table"><a name="tb-command-line-options"></a><p 
class="title"><b>Table 2.1. Gnash Command Line Options</b></p><div 
class="table-contents"><table summary="Gnash Command Line Options" 
border="1"><colgroup><col align="left"><col 
align="left"></colgroup><thead><tr><th align="left">Option</th><th 
align="left">Function</th></tr></thead><tbody><tr><td align="left"><code 
class="option">-h</code></td><td align="left">
+             Print usage information.
+           </td></tr><tr><td align="left">
+             <code class="option">-s factor</code>
+           </td><td align="left">
+             Scale the movie up/down by the specified factor.
+           </td></tr><tr><td align="left">
+             <code class="option">-c</code>
+           </td><td align="left">
+             Produce a core file instead of letting SDL trap it. By
+             default, SDL traps all signals, but sometimes a core file
+             is desired to assist with debugging.
+           </td></tr><tr><td align="left">
+             <code class="option">-d num</code>
+           </td><td align="left">
+             Number of milliseconds to delay in main loop. The main
+             loop polls continuously with a delay to adjust how long
+             <span class="emphasis"><em><span 
class="application">Gnash</span></em></span> sleeps between iterations of the
+             loop. The smaller the number, the higher the CPU load
+             gets, and of course, the more iterations of the main
+             command loop.
+           </td></tr><tr><td align="left">
+             <code class="option">-p</code>
+           </td><td align="left">
+             Run full speed (no sleep) and log frame rate.
+           </td></tr><tr><td align="left">
+             <code class="option">-a</code>
+           </td><td align="left">
+             Enable Actionscript debugging.
+           </td></tr><tr><td align="left">
+             <code class="option">-v</code>
+           </td><td align="left">
+             Be verbose; i.e. print debug messages to stdout.
+           </td></tr><tr><td align="left">
+             <code class="option">-va</code>
+           </td><td align="left">
+             Be verbose about movie Actions. 
+           </td></tr><tr><td align="left">
+             <code class="option">-vp</code>
+           </td><td align="left">
+             Be verbose about parsing the movie. Warning: this can
+             generate a lot of text, and can affect the performance of
+             the movie you are playing.
+           </td></tr><tr><td align="left">
+             <code class="option">-ml bias</code>
+           </td><td align="left">
+             Specify the texture LOD bias (float, default is -1) This
+             affects the fuzziness of small objects, especially small
+             text.
+           </td></tr><tr><td align="left">
+             <code class="option">-w</code>
+           </td><td align="left">
+             Write a debug log called gnash-dbg.log. This will 
+             record of all the debug messages whether they are printed
+             to the screen or not.
+           </td></tr><tr><td align="left">
+             <code class="option">-j</code>
+           </td><td align="left">
+             Specify the width of the window. This is mostly used
+             only by the plugin.
+           </td></tr><tr><td align="left">
+             <code class="option">-k</code>
+           </td><td align="left">
+             Specify the height of the window. This is mostly used
+             only by the plugin.
+           </td></tr><tr><td align="left">
+             <code class="option">-1</code>
+           </td><td align="left">
+             Play once; exit when/if movie reaches the last
+             frame. This is the default.
+           </td></tr><tr><td align="left">
+             <code class="option">-r [0|1|2|3]</code>
+           </td><td align="left">
+             <div class="itemizedlist"><ul type="disc"><li><p>
+                   0 disables rendering and sound (good for batch tests).
+                 </p></li><li><p>
+                   1 enables rendering and disables sound (default setting).
+                 </p></li><li><p>
+                   2 enables sound and disables rendering.
+                 </p></li><li><p>
+                   3 enables rendering and sound.
+                 </p></li></ul></div>
+           </td></tr><tr><td align="left">
+             <code class="option">-t sec</code>
+           </td><td align="left">
+             Timeout and exit after the specified number of
+             seconds. This is useful for movies which repeat
+             themselves.
+           </td></tr><tr><td align="left">
+             <code class="option">-g</code>
+           </td><td align="left">
+             Start <span class="application">Gnash</span> with a Flash 
debugger console so one can set
+             break points or watchpoints.
+           </td></tr><tr><td align="left">
+             <code class="option">-x id</code>
+           </td><td align="left">
+             This specifies the X11 window ID to display
+             in; this is mainly used by plugins.
+           </td></tr><tr><td align="left">
+             <code class="option">-b bits</code>
+           </td><td align="left">
+             Bit depth of output window (for example, 16 or 32). Appropriate
+             bit depths depend on the renderer and GUI library used.
+             
+           </td></tr><tr><td align="left">
+             <code class="option">-u url</code>
+           </td><td align="left">
+             Set the _url member of the root movie. This is useful 
+             when you download a movie and play it from a different 
+             location. See also the -U switch.
+           </td></tr><tr><td align="left">
+             <code class="option">-U baseurl</code>
+           </td><td align="left">
+             Set base URL for this run. URLs are resolved relative to 
+             this base. If omitted defaults to the _url member of the 
+             top-level movie (see the -u switch).
+           </td></tr><tr><td align="left">
+             <code class="option">-P entrymeter</code>
+           </td><td align="left">
+             Parameters are given in ParamName=Value syntax and are mostly 
+             useful to the plugin to honour EMBED tags attributes 
+             or explicit OBJECT PARAM tags. A common use for -P 
+             is to provide FlashVars 
+             (ie: -P "FlashVars=home=http://www.gnu.org";).
+           </td></tr><tr><td align="left">
+             <code class="option">-F filedescriptor</code>
+           </td><td align="left">
+             Use the given filedescriptor to send requests to the host
+             application. This is currently only used for GETURL requests.
+             The protocol is not documented yet, and also needs improvement.
+             Primary use for this switch is for the NPAPI plugin to properly
+             support javascript and target windows in geturl requests.
+           </td></tr></tbody></table></div></div><br 
class="table-break"></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="keys"></a><span class="application">Gnash</span> Interactive Control 
Keys</h2></div></div></div><p>
+      While a movie is playing, there are several control
+      keys. These can be used to step through frames, pause the
+      playing, and control other actions.
+    </p><div class="table"><a name="tb-control-keys"></a><p 
class="title"><b>Table 2.2. Gnash Interactive Control Keys</b></p><div 
class="table-contents"><table summary="Gnash Interactive Control Keys" 
border="1"><colgroup><col align="left"><col 
align="left"></colgroup><thead><tr><th align="left">Key Combination</th><th 
align="left">Function</th></tr></thead><tbody><tr><td align="left">
+             <code class="option">CTRL-Q</code>
+           </td><td align="left">
+             Quit/Exit.
+           </td></tr><tr><td align="left">
+             <code class="option">CTRL-W</code>
+           </td><td align="left">
+             Quit/Exit.
+           </td></tr><tr><td align="left">
+             <code class="option">ESC</code>
+           </td><td align="left">
+             Quit/Exit.
+           </td></tr><tr><td align="left">
+             <code class="option">CTRL-P</code>
+           </td><td align="left">
+             Toggle Pause.
+           </td></tr><tr><td align="left">
+             <code class="option">CTRL-R   </code>
+           </td><td align="left">
+             Restart the movie.
+           </td></tr><tr><td align="left">
+             <code class="option">CTRL-[ or kp-</code>
+           </td><td align="left">
+             Step back one frame.
+           </td></tr><tr><td align="left">
+             <code class="option">CTRL-] or kp+</code>
+           </td><td align="left">
+             Step forward one frame.
+           </td></tr><tr><td align="left">
+               <code class="option">CTRL-L</code>
+             </td><td align="left">
+               Force immediate redraw.
+             </td></tr><tr><td align="left">
+             <code class="option">CTRL-T</code>
+           </td><td align="left">
+             Debug.  Test the set_variable() function.
+           </td></tr><tr><td align="left">
+             <code class="option">CTRL-G</code>
+           </td><td align="left">
+             Debug.  Test the get_variable() function.
+           </td></tr><tr><td align="left">
+             <code class="option">CTRL-M</code>
+           </td><td align="left">
+             Debug.  Test the call_method() function.
+           </td></tr><tr><td align="left">
+             <code class="option">CTRL-B</code>
+           </td><td align="left">
+             Toggle the background color.
+           </td></tr></tbody></table></div></div><br 
class="table-break"></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="gnashrc"></a>User Configuration File</h2></div></div></div><p>
+Individual user preferences may be set by editing variables with the <code 
class="filename">.gnashrc</code> file:
+</p><pre class="programlisting">
+~/.gnashrc
+</pre><p>
+</p><p>
+Each line must begin with an action: either <span 
class="emphasis"><em>set</em></span> or, in the case of lists, also
+<span class="emphasis"><em>append</em></span>.
+</p><p>
+The values in this configuration file apply only to an individual user, and 
become the default settings of the standalone player and the plugin.  Note that 
any command line options take precedence over <code 
class="filename">.gnashrc</code> settings.
+</p><p>
+The variables in the <code class="filename">.gnashrc</code> file support three 
types of arguments: on/off, numeric values, or in the case of the
+    whitelist and blacklist, a list of hostnames as ASCII text.
+  </p><div class="table"><a name="tb-config-variables"></a><p 
class="title"><b>Table 2.3. User Configuration Variables</b></p><div 
class="table-contents"><table summary="User Configuration Variables" 
border="1"><colgroup><col align="left"><col align="left"><col 
align="left"></colgroup><thead><tr><th align="left">Variable</th><th 
align="left">Value</th><th 
align="left">Function</th></tr></thead><tbody><tr><td 
align="left">localdomain</td><td align="left">on/off</td><td align="left">This 
value can be set to either <span class="emphasis"><em>on</em></span> or
+           <span class="emphasis"><em>off</em></span>, and controls the 
loading of
+           external Flash movies over a network. This option
+           tells Gnash to only load Flash movies from the existing 
domain.</td></tr><tr><td align="left">localhost</td><td 
align="left">on/off</td><td align="left">This value can be set to either <span 
class="emphasis"><em>on</em></span> or
+           <span class="emphasis"><em>off</em></span>, and controls the 
loading of
+           external Flash movies over a network. This is a stricter
+           version of the <span class="emphasis"><em>localdomain</em></span> 
setting as
+           this allows the loading of Flash movies to the same host
+           that is running <span 
class="application">Gnash</span>.</td></tr><tr><td 
align="left">whitelist</td><td align="left">hostnames</td><td align="left">This 
is a list of hostnames separated by spaces, or <span 
class="emphasis"><em>off</em></span>
+           to disable the whitelist. The hostname must be given
+            without a protocol (http://, https://). If this list is populated,
+           <span class="application">Gnash</span> will only load external 
Flash movies from the specified hosts.  The
+           whitelist takes precedence over the blacklist. Because several 
files can
+           be parsed in succession, each file can override or add to
+           lists in other files. Use <span 
class="emphasis"><em>set</em></span> to override
+           all other lists or <span class="emphasis"><em>append</em></span> to 
add your blacklisted
+           hosts to lists in previously parsed files.</td></tr><tr><td 
align="left">blacklist</td><td align="left">hostnames</td><td align="left">This 
is a list of hostnames separated by spaces, or <span 
class="emphasis"><em>off</em></span>
+           to disable the blacklist. The hostname must be given
+            without a protocol (http://, https://).
+           External flash movies from these
+            domains are never allowed to load. If whitelist is present
+           and not empty, blacklist is not used. Because several files can
+           be parsed in succession, each file can override or add to
+           lists in other files. Use <span 
class="emphasis"><em>set</em></span> to override
+           all other lists or <span class="emphasis"><em>append</em></span> to 
add your blacklisted
+           hosts to lists in previously parsed files.</td></tr><tr><td 
align="left">localSandboxPath</td><td align="left">dirs</td><td 
align="left">This is a list of directories separated by spaces.
+           Only resources from these directories and from the directory
+            portion of movie filename (if loaded from filesystem) are allowed 
to load.
+           Because several files can be parsed in succession, each file can 
override
+           or add to lists in other files. Use <span 
class="emphasis"><em>set</em></span> to override
+           all other lists or <span class="emphasis"><em>append</em></span> to 
add new sandboxes.
+           Note that there's currently no way to *drop* the directory of base 
dir
+           from the list of allowed local sandboxes.
+           </td></tr><tr><td align="left">delay</td><td 
align="left">Number</td><td align="left"><span class="application">Gnash</span> 
uses a timer-based event mechanism to advance frames
+           at a steady rate. This option overrides the default
+           setting in Gnash to play a movie slower or faster.</td></tr><tr><td 
align="left">verbosity</td><td align="left">Number</td><td align="left">This is 
a numeric value which defines the default level of
+           verbosity from the player.</td></tr><tr><td 
align="left">MalformedSWFVerbosity</td><td align="left">on/off</td><td 
align="left">This value can be set to either <span 
class="emphasis"><em>on</em></span> or
+           <span class="emphasis"><em>off</em></span>, and controls whether 
malformed SWF errors should
+           be printed. If set to true, verbosity level is automatically 
incremented.
+           Set <code class="option">verbosity</code> to 0 afterwards to 
hush.</td></tr><tr><td align="left">ASCodingErrorsVerbosity</td><td 
align="left">on/off</td><td align="left">This value can be set to either <span 
class="emphasis"><em>on</em></span> or
+           <span class="emphasis"><em>off</em></span>, and controls whether 
ActionScript coding
+           errors should be printed. If set to true, verbosity level is
+           automatically incremented.  Set <code 
class="option">verbosity</code> to 0 afterwards to hush.</td></tr><tr><td 
align="left">debuglog</td><td align="left">Absolute path</td><td 
align="left">This is the full path and name of debug logfile as
+       produced by <span class="application">Gnash</span>. On systems with a 
UNIX-type shell,
+        a tilde prefix (~) will be expanded as by Posix shell requirements
+        (see 
http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_01).</td></tr><tr><td
 align="left">writelog</td><td align="left">on/off</td><td align="left">This 
value can be set to either <span class="emphasis"><em>on</em></span> or
+           <span class="emphasis"><em>off</em></span>, and controls whether a 
debug log
+           is always written by <span class="application">Gnash</span>, or not 
at all.</td></tr><tr><td align="left">sound</td><td align="left">on/off</td><td 
align="left">This value can be set to either <span 
class="emphasis"><em>on</em></span> or
+           <span class="emphasis"><em>off</em></span>, and controls the sound 
of the
+           standalone player. By default <span 
class="application">Gnash</span> enables playing the
+           sound in any Flash movie.</td></tr><tr><td 
align="left">pluginsound</td><td align="left">on/off</td><td align="left">This 
value can be set to either <span class="emphasis"><em>on</em></span> or
+           <span class="emphasis"><em>off</em></span>, and controls the sound 
of the
+           player when running as a browser plugin. By default, sound
+           is enabled when using <span class="application">Gnash</span> as a 
browser plugin.</td></tr><tr><td align="left">EnableExtensions</td><td 
align="left">on/off</td><td align="left">Set to <span 
class="emphasis"><em>on</em></span> to enable extensions. This option is <span 
class="emphasis"><em>off</em></span> by default</td></tr><tr><td 
align="left">StartStopped</td><td align="left">on/off</td><td align="left">Set 
to <span class="emphasis"><em>on</em></span> to have the GUI start in "stop" 
mode. This is useful in particular
+           for the plugin, so you have to explicitly start any movie on a 
webpage. This option is <span class="emphasis"><em>off</em></span> by default.
+         </td></tr><tr><td align="left">flashVersionString</td><td 
align="left">string</td><td align="left">Set the string returned by $version 
and System.capabilities.version.
+       Useful to get around some flash version detection movies.
+       Note that the version advertised by the plugin is NOT affected by this 
setting,
+       instead you need to set the GNASH_FLASH_VERSION environment variable for
+       the latter (which doesn't affect $version and 
System.capabilities.version).</td></tr><tr><td 
align="left">flashSystemOS</td><td align="left">string</td><td align="left">The 
string that Gnash should return for System.capabilities.OS</td></tr><tr><td 
align="left">flashSystemManufacturer</td><td align="left">string</td><td 
align="left">The string that Gnash should return for 
System.capabilities.manufacturer</td></tr><tr><td 
align="left">StreamsTimeout</td><td align="left">double</td><td align="left">
+Set the number of seconds after which streams download time out. Note that 
timeouts only occurs after the given number of seconds
+passed w/out anything was received.
+</td></tr><tr><td align="left">insecureSSL</td><td align="left">on/off</td><td 
align="left">If set to <span class="emphasis"><em>on</em></span>, no 
verification of SSL connections
+is performed. This means that, although the connection is encrypted, the server
+certificate could be invalid, may not belong to the host, or both. Equivalent
+to curl --insecure. By default, this option is <span 
class="emphasis"><em>off</em></span> and
+connections will fail when a host cannot be verified.</td></tr><tr><td 
align="left">SOLsafedir</td><td align="left">Absolute path</td><td 
align="left">The full path to a directory where <span 
class="application">Gnash</span> should store Shared Object files ("flash 
cookies") if
+they are enabled.</td></tr><tr><td align="left">SOLreadonly</td><td 
align="left">on/off</td><td align="left">If set to <span 
class="emphasis"><em>on</em></span>, <span class="application">Gnash</span> 
will not write Shared Object files.</td></tr><tr><td 
align="left">URLOpenerFormat</td><td align="left">string</td><td align="left">
+Set the format of an url opener command. The %u label would be substituted by 
the actual url to be opened.
+Examples:
+<pre class="programlisting">
+ set urlOpenerFormat firefox -remote 'openurl(%u)'
+ set urlOpenerFormat xdg-open %u
+ set urlOpenerFormat open %u
+ set urlOpenerFormat kfmclient exec %u
+</pre>
+</td></tr></tbody></table></div></div><br class="table-break"><p>
+The following example <code class="filename">.gnashrc</code> file allows a 
user to only play Flash files saved locally to the machine on which <span 
class="application">Gnash</span> is running.  It also specifically forbids 
content from doubleclick.com and mochibot.com.  <span 
class="application">Gnash</span>'s error output is set to be fairly verbose, 
with the debug log placed in a location convenient for the user.  Finally, 
sound is turned on for both the standalone player and the plugin.
+</p><pre class="programlisting">
+  
+    #
+    # Gnash client options
+    #
+
+    # Only access remote content from our local domain
+    set localdomain on
+
+    # Only access content from our local host
+    set localhost on
+
+    # These sites are OK
+    # uncommenting the following line will allow load of external
+    # movies *only* from the specified hosts.
+    #set whitelist www.doonesbury.com www.cnn.com www.9news.com
+
+    # Disable whitelists set in any other gnashrc files, because
+    # these could override our blacklist.
+    set whitelist off
+
+    # Don't access content from these sites
+    set blacklist www.doubleclick.com mochibot.com
+
+    # The delay between timer interrupts
+    set delay 50
+
+    # The default verbosity level
+    set verbosity 1
+
+    # Be verbose about malformed SWF
+    set MalformedSWFVerbosity true
+
+    # Be verbose about AS coding errors
+    set ASCodingErrorsVerbosity true
+
+    # The full path to the debug log
+    set debuglog ~/gnash-dbg.log
+
+    # Write a debug log to disk
+    set writelog on
+
+    # Enable or Disable sound for the standalone player
+    set sound on
+
+    # Enable or Disable sound for the standalone player
+    set pluginsound on
+
+    # Make sure SSL connections are always verified
+    set insecureSSL off
+
+    # Use firefox to open urls
+    set urlOpenerFormat firefox -remote 'openurl(%u)'
+
+  </pre></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="build"></a>Chapter 3. 
Installing and Configuring Gnash</h2></div></div></div><div 
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a 
href="#requirements">Requirements</a></span></dt><dd><dl><dt><span 
class="sect2"><a href="#hardware">Hardware 
Requirements</a></span></dt><dt><span class="sect2"><a 
href="#software">Software Requirements</a></span></dt></dl></dd><dt><span 
class="sect1"><a href="#downloading">Downloading 
Gnash</a></span></dt><dd><dl><dt><span class="sect2"><a 
href="#gettingsource">Getting the Source</a></span></dt><dt><span 
class="sect2"><a href="#getcodecs">Getting Codec 
Support</a></span></dt></dl></dd></dl></div><p>
+    There are two ways of installing Gnash:
+    <a class="link" href="#">using a package manager</a>
+    or <a class="link" href="#gettingsource" title="Getting the 
Source">installing from source</a>.
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a 
name="requirements"></a>Requirements</h2></div></div></div><p>
+      Before downloading and installing Gnash, check that your
+      hardware and software meet the following requirements.
+    </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="hardware"></a>Hardware 
Requirements</h3></div></div></div><p>
+       One of the goals of Gnash is to make it portable enough to
+       install on small devices.  As a result, the hardware
+       requirements are minimal. Gnash has even run on an ARM9 at 200
+       MHz with 32 MB of RAM! (It ran without video support in this
+       case.) While firm minimums have not been established, Gnash
+       has been shown to run successfully with the following:
+      </p><div class="itemizedlist"><ul type="disc"><li><p>
+           336 MHz processor
+         </p></li><li><p>
+           128 MB RAM
+         </p></li><li><p>
+           Gnash will run on anything from a raw frame
+           buffer up to an OpenGL-supporting graphics card.
+         </p></li></ul></div><p>
+       The following table provides a list of the Operating System/CPU
+       combinations on which Gnash has been shown to run. 
+      </p><div class="table"><a name="tb-os-cpu"></a><p class="title"><b>Table 
3.1. Build Matrix</b></p><div class="table-contents"><table summary="Build 
Matrix" border="1"><colgroup><col align="left"><col 
align="left"></colgroup><thead><tr><th align="left">Operating System</th><th 
align="left">Processor</th></tr></thead><tbody><tr><td align="left">OpenBSD, 
FreeBSD, NetBSD</td><td align="left">Alpha AXP, AMD64, i386, Itanium, PC-98, 
PowerPC, SPARC64 
+             </td></tr><tr><td align="left">Debian</td><td align="left">Alpha 
AXP, AMD64, ARM, hppa, i386, Itanium, MIPS,
+             PowerPC, IBM zSeries (s390), SPARC  
+             </td></tr><tr><td align="left">Fedora</td><td 
align="left">x86-32, x86-64, Geode GX, Geode LX
+             </td></tr><tr><td align="left">Gentoo</td><td align="left">AMD64, 
PowerPC, SPARC, x86 
+             </td></tr><tr><td align="left">Maemo 2.1</td><td 
align="left">i385, ARMv5t</td></tr><tr><td align="left">Scratchbox</td><td 
align="left">i386, ARMv5t</td></tr><tr><td align="left">Access Linux Platform
+             </td><td align="left">i386, ARMv5t</td></tr><tr><td 
align="left">Mandriva
+             </td><td align="left">i386, MIPS</td></tr><tr><td 
align="left">Open Embedded, OpenMoko, Poky
+             </td><td align="left">ARM
+             </td></tr><tr><td align="left">YellowDog Linux 6
+             </td><td align="left">PowerPC, PS3
+             </td></tr><tr><td align="left">OpenSuSE 10 
+             </td><td align="left">i586, x86-64 
+             </td></tr><tr><td align="left">Red Hat Enterprise, CentOS
+             </td><td align="left">x86-32, x86-64 
+             </td></tr><tr><td align="left">Ubuntu 
+             </td><td align="left">x86-64, x86-32, PowerPC, UltraSPARC 
+             </td></tr><tr><td align="left">Haiku</td><td 
align="left">i386</td></tr><tr><td align="left">Syllable</td><td 
align="left">i386</td></tr><tr><td align="left">Irix 6.5 
+             </td><td align="left">MIPS R10K 
+             </td></tr><tr><td align="left">Darwin (MacOS X)
+             </td><td align="left">PowerPC and x86-32 
+             </td></tr><tr><td align="left">Windows XP, Windows Vista</td><td 
align="left">x86-32</td></tr></tbody></table></div></div><br 
class="table-break"></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="software"></a>Software 
Requirements</h3></div></div></div><p>
+       The 0.8.2 release of Gnash has been designed to run on
+       UNIX/Linux variants, and has been run on most of the free ones.
+       However, Gnash has successfully run on Windows, Darwin (Mac OS X),
+       Irix, Solaris, BeOs, OS/2, and Haiku.  Gnash has also run on the
+       following 64-bit systems: PowerPC, Itanium, UltraSparc, and AMD64.
+       For now, it is important to be sure that the following code, testing,
+       and documentation dependencies are met before installing Gnash.  If
+       you will be downloading Gnash with a package manager, these
+       dependencies may be solved by the package manager.  Otherwise, you
+       must first verify that each of these dependencies are installed on the
+       target system.
+      </p></div></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="downloading"></a>Downloading Gnash</h2></div></div></div><p>
+       There are two ways to download Gnash: using a package manager or by
+       downloading the source code and building it on your system. If
+       possible, it is advisable to use a package manager to download Gnash,
+       as it will resolve dependencies for you.  However, if you want the
+       very latest features, or a Gnash package is not available for your
+       operating system, it is better to download the source code and build
+       Gnash locally. 
+      </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 
class="title"><a name="gettingsource"></a>Getting the 
Source</h3></div></div></div><p>
+         Gnash is available as a <a class="link" href="#sourcereleases" 
title="Releases">release
+         tarball</a>, a <a class="link" href="#sourcerepo" 
title="Repository">development 
+         checkout</a>, or a <a class="link" href="#sourcesnapshot" 
title="Snapshot">development
+         snapshot</a>.
+       </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 
class="title"><a name="sourcereleases"></a>Releases</h4></div></div></div><p>
+           The source can be acquired from a
+           <a class="ulink" href="http://www.gnu.org/prep/ftp.html"; 
target="_top">GNU FTP
+           Mirror</a>.  The release version is intended to be
+           stable, and is probably your best choice if the release took
+           place recently.  If you need features or fixes which were
+           introduced after the release, consider a 
+           <a class="link" href="#sourcerepo" title="Repository">CVS 
checkout</a> or the
+           <a class="link" href="#sourcesnapshot" title="Snapshot">daily 
snapshot</a>.
+         </p><p>
+           To download, select a mirror near you, then choose the
+           <code class="filename">gnash</code> directory.
+         </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="sourcesnapshot"></a>Snapshot</h4></div></div></div><p>
+           The daily development snapshot can be downloaded from
+           <a class="ulink" href="http://www.gnashdev.org/dev_snapshots/"; 
target="_top">http://www.gnashdev.org/dev_snapshots/</a>.
+           This is the best option if you need changes which were introduced
+           after the <a class="link" href="#sourcereleases" 
title="Releases">last release</a> of
+           Gnash, but are unable to <a class="link" href="#sourcerepo" 
title="Repository">download
+           directly from the repository.</a>
+         </p></div><div class="sect3" lang="en"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="sourcerepo"></a>Repository</h4></div></div></div><p>
+           The latest development sources are available via
+           anonymous CVS.  This is recommended
+           if you need features or bug fixes which were introduced after
+           the <a class="link" href="#sourcereleases" title="Releases">last 
release</a>.  Look at
+           the <a class="link" href="#sourcesnapshot" title="Snapshot">daily 
snapshot</a> if you
+           experience difficulty accessing the repository.
+         </p><p>
+           To download via anonymous CVS, first set the
+           environment variable <span 
class="command"><strong>CVS_RSH</strong></span> to
+           <span class="command"><strong>ssh</strong></span>, then check out 
the source code.
+           The example below uses the GNU Bourne-Again shell (bash): 
+         </p><pre class="screen">
+           export CVS_RSH="ssh"
+           cvs -z3 -d:pserver:address@hidden:/sources/gnash co gnash
+         </pre><p>
+           It is also possible to browse the repository
+           <a class="ulink" 
href="http://cvs.savannah.gnu.org/viewcvs/gnash/?root=gnash"; 
target="_top">http://cvs.savannah.gnu.org/viewcvs/gnash/?root=gnash</a> on the 
web.
+         </p></div></div><div class="sect2" lang="en"><div 
class="titlepage"><div><div><h3 class="title"><a name="getcodecs"></a>Getting 
Codec Support</h3></div></div></div><p>
+         Gnash requires codec support to handle audio and video
+         correctly. Some platforms like Ubuntu or Fedora under the
+         GNOME desktop will automatically notify the user that the
+         proper codecs aren't installed, and pop up a dialog box to
+         let the user download the codecs Gnash needs to make site
+         like YouTube work correctly. If you have installed Gnash on
+         any other platform, and video doesn't work, it's highly
+         likely you need to install the proper codecs. For most
+         platforms, this is the Gstreamer-ffmpeg plugin, available
+         from your distributions repository.
+       </p></div></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="bugreport"></a>Chapter 
4. Reporting Bugs</h2></div></div></div><div class="toc"><p><b>Table of 
Contents</b></p><dl><dt><span class="sect1"><a href="#bugstep_package">Get a 
Fresh Binary Package</a></span></dt><dt><span class="sect1"><a 
href="#bugstep_search">Determine if the bug was previously 
reported</a></span></dt><dt><span class="sect1"><a 
href="#bugstep_guidelines">Review the bug writing 
guidelines</a></span></dt><dt><span class="sect1"><a 
href="#bugstep_file">Filing a bug report</a></span></dt></dl></div><p>
+    The Gnash project relies on the community of Gnash users to test
+    the player, feedback is critical to any successful project.  Not
+    only does it let us know that people use Gnash, but it helps us  
+    understand the community's needs. Gnash uses a bug tracker on
+    <a class="ulink" href="http://savannah.gnu.org"; 
target="_top">http://savannah.gnu.org</a> to manage these reports.
+  </p><p>
+    When filing a report, please follow the guidelines below. The better
+    your bug report is, the easier it will be for the developers to
+    address the issue. Bug reports without enough information will
+    initially be asked to provide this information anyway. Adding
+    critical details, like the Operating System you are on, it's
+    version, and any relevant error messages from Gnash that you get.
+  </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="bugstep_package"></a>Get a Fresh 
Binary Package</h2></div></div></div><p>
+      For starters, it's a good idea to obtain a copy of the latest
+      snapshot. Although Gnash is primarily released as source, the
+      Gnash build infrastructure allows the automated building of
+      binary packages. Often the version of Gnash as packaged by a
+      GNU/Linux or BSD distribution is based on the last official
+      release, which could be months out of date. It is helpful if
+      this is the case to try a newer packaged build of Gnash. 
+    </p><p>
+      You can get a fresh binary package of Gnash, as well as recent 
+      source packages from
+      <a class="ulink" href="http://www.getgnash.org/packages/"; target="_top">
+       http://www.getgnash.org/packages
+      </a>. 
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="bugstep_search"></a>Determine if the bug was previously 
reported</h2></div></div></div><p>
+      Search the <a class="ulink" 
href="https://savannah.gnu.org/bugs/?group=gnash"; target="_top">Gnash
+      bug tracker</a> to see if the bug has already been identified.
+    </p><p>
+      If the issue has already been reported, you should not file
+      a bug report.  However, you may add some additional information
+      to the ticket if you feel that it will be beneficial to the
+      developers.  For instance, if someone reported a memory issue
+      on Ubuntu GNU/Linux, and you noticed the same problem on OpenBSD,
+      your stacktrace would be useful.  Conversely, adding a "me too"
+      note to a feature request is not helpful.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="bugstep_guidelines"></a>Review the bug writing 
guidelines</h2></div></div></div><p>
+      A good bug report should be precise, explicit, and discrete.
+      This means that there should be just one bug per ticket, and
+      that a ticket should contain the following information:
+    </p><div class="itemizedlist"><ul type="opencircle"><li 
style="list-style-type: circle"><p>
+         An overview of the problem;
+       </p></li><li style="list-style-type: circle"><p>
+         Instructions on how to replicate the bug;
+       </p></li><li style="list-style-type: circle"><p>
+         A description of what happened when you performed the steps
+         to replicate the bug, and what you expected to happen;
+       </p></li><li style="list-style-type: circle"><p>
+         Your system information: operating system name and version, as
+         well as the versions of major development dependencies;
+       </p></li><li style="list-style-type: circle"><p>
+         The release number or checkout timestamp for the version of Gnash
+         where you observe the problem;
+       </p></li><li style="list-style-type: circle"><p>
+         The file <code class="filename">config.log</code>, which should be
+         attached as a file;
+       </p></li><li style="list-style-type: circle"><p>
+         A descriptive title.
+       </p></li></ul></div><p>
+      Include any additional information that you feel might be useful
+      to the developers.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="bugstep_file"></a>Filing a bug report</h2></div></div></div><p>
+      After following the steps described above, you can file a bug report at 
+      <a class="ulink" href="https://savannah.gnu.org/bugs/?group=gnash"; 
target="_top">https://savannah.gnu.org/bugs/?group=gnash</a>.
+    </p></div></div><div class="glossary"><div class="titlepage"><div><div><h2 
class="title"><a name="glossary"></a>Glossary</h2></div></div></div><div 
class="glossdiv"><h3 class="title">A</h3><dl><dt>
+       ActionScript
+      </dt><dd><p>
+         <span class="emphasis"><em>ActionScript</em></span>, or "AS", is the 
scripting 
+         language for <span class="emphasis"><em>Flash</em></span>
+         applications. It is compiled to bytecode, which is a subset of
+         the <span class="emphasis"><em>SWF</em></span> format.
+       </p></dd><dt>
+       AGG
+      </dt><dd><p>
+         AGG is the AntiGrain 2D graphics library, which can be used
+         as a renderer in Gnash. It is faster than OpenGL on systems
+         without hardware graphics acceleration. As of Gnash version
+         0.8.1 it is the more feature complete renderer. 
+       </p></dd><dt>
+       AMF
+      </dt><dd><p>
+         <span class="emphasis"><em>AMF</em></span> 
+         is the object format used by <span 
class="emphasis"><em>Flash</em></span> 
+         for shared objects and streaming video.
+       </p></dd><dt>
+       as_environment
+      </dt><dd><p>
+         In Gnash terms, the as_environment, or ActionScript
+         execution environment, contains a stack of objects,
+         characters and values which are in the immediate environment
+         of the current fn_call. Please refer to the Gnash
+         ActionScript manual for more information. 
+        </p></dd></dl></div><div class="glossdiv"><h3 
class="title">C</h3><dl><dt>
+       Cairo
+      </dt><dd><p>
+         Cairo is a 2D graphics library with support for multiple
+         output devices. Can be used as a renderer in Gnash. A useful
+         feature of Cairo is that it will automatically use graphic
+         card acceleration when available. Cairo has an experimental
+         OpenGL backend. 
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">D</h3><dl><dt>
+       DejaGNU
+      </dt><dd><p>
+         DejaGNU is a framework for testing software.
+       </p></dd><dt>
+       DocBook
+      </dt><dd><p>
+         <span class="emphasis"><em>DocBook</em></span>
+         is a markup language for presentation-neutral 
+         documentation, such as manuals.
+       </p></dd><dt>
+       Doxygen
+      </dt><dd><p>
+         <span class="emphasis"><em>Doxygen</em></span> 
+         is a documentation generator for for multiple languages 
+         which uses comments in the source code to create stand-alone
+         documentation. 
+       </p></dd><dt>
+       Drupal
+      </dt><dd><p>
+         Drupal is a CMS/blog system used for the main Gnash website.
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">E</h3><dl><dt>
+       extensions
+      </dt><dd><p>
+         A <span class="application">Gnash</span> <span 
class="emphasis"><em>extension</em></span> is a plugin (not a
+         browser plugin) which implements additional functionality
+         beyond what is covered by <span class="emphasis"><em>Flash</em></span>
+         specification. These are shared libraries which are loaded
+         at runtime. 
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">F</h3><dl><dt>
+       ffmpeg
+      </dt><dd><p>
+         ffmpeg is an audio and video decoding library which can be 
+         used by Gnash to decode mp3, FLV and other media types.  
+       </p></dd><dt>
+       Flash
+      </dt><dd><p>
+         The term <span class="emphasis"><em>Flash</em></span> is used to 
describe both the 
+         Adobe IDE for creating <span class="emphasis"><em>SWF</em></span>
+         files, and the technology itself. Flash is a trademarked
+         term of Adobe's, we prfer to use SWF to refer to the files
+         themselves, as well as the format, instead of flash(tm).
+       </p></dd><dt>
+       FLV
+      </dt><dd><p>
+         FLV is a proprietary file format used to deliver Flash
+         video. It is used by YouTube, among others.  
+       </p></dd><dt>
+       FLTK
+      </dt><dd><p>
+         FLTK, or the 'Fast Light ToolKit', is a portable GUI library
+         which is intended to replace the SDL GUI. Currently in Gnash,
+         FLTK may be used with the Cairo and AGG renderers. FLTK has an
+         experimental Cairo backend. 
+       </p></dd><dt>
+       FrameBuffer
+      </dt><dd><p>
+         In Gnash, this is a GUI library that outputs directly to the
+         Linux Frame Buffer and so does not need a window system to
+         run. This makes it particularly suitable for use on small
+         devices. 
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">G</h3><dl><dt>
+       Gnash
+      </dt><dd><p>
+         Gnash is the GNU Flash movie player.
+       </p></dd><dt>
+       Gstreamer
+      </dt><dd><p>
+         Gstreamer is a multimedia framework which Gnash can use for
+         decoding audio and video. Gstreamer itself cannot decode
+         anything, so it needs some appropriate decoding-plugins to do
+         the work for it. Remember to install them if you use Gnash
+         with Gstreamer enabled. To get the best out of Gnashs
+         gstreamer-parts, it is recommended to install the
+         gst-plugins-good, gst-plugins-good and gst-ffmpeg plugins
+         packages.  
+       </p></dd><dt>
+       GTK
+      </dt><dd><p>
+         GTK is the GIMP Toolkit GUI library. It is one of the GUI
+         options for Gnash. As of Gnash 0.7.2, this is the more
+         performant and feature-rich choice. GTK uses Cairo
+         internally. 
+       </p></dd><dt>
+      GUI
+    </dt><dd><p>
+       A <span class="emphasis"><em>GUI</em></span> is a 
+       "graphical user interface". In <span class="application">Gnash</span>, 
the GUI 
+       library provides a wrapper for mouse and keyboard events, 
+       menus, windowing (where available) and a drawing area. 
+       You must choose a GUI library during the
+       configuration stage of building Gnash.
+      </p></dd></dl></div><div class="glossdiv"><h3 
class="title">K</h3><dl><dt>
+       Klash
+      </dt><dd><p>
+         <span class="emphasis"><em>Klash</em></span> was the name given to 
the stand-alone 
+         instance of <span class="application">Gnash</span> which used the KDE 
GUI.  It has been replaced with 
+         an implementation using Qt.  Some documentation may incorrectly
+         refer to the Konqueror plugin as <span 
class="emphasis"><em>Klash</em></span>.
+         The plugin was renamed <span class="emphasis"><em>Kpart</em></span>.
+       </p></dd><dt>
+       Kpart
+      </dt><dd><p>
+         <span class="emphasis"><em>Kpart</em></span> is a plugin for 
Konqueror which is
+         enabled with the <a class="link" href="#">configuration option</a>
+         <span class="emphasis"><em>--enable-klash</em></span>.
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">L</h3><dl><dt>
+       libmad
+      </dt><dd><p>
+         libmad is a mp3-decoding library, which used to be an option for Gnash
+         handling of sound (dropped since 0.8.2).
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">M</h3><dl><dt>
+       Mesa
+      </dt><dd><p>
+         <span class="emphasis"><em>Mesa</em></span> is the free software 
OpenGL 
+         implementation.  <span class="application">Gnash</span> documentation 
will sometimes use the
+         glossterms 'OpenGL' and 'Mesa' interchangeably.
+       </p></dd><dt>
+       Ming
+      </dt><dd><p>
+         Ming is a C library for generating SWF ("Flash") format
+         movies, plus a set of wrappers for using the library. It is
+         used by the Gnash project for generating testcases.  
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">N</h3><dl><dt>
+       Nellymoser
+      </dt><dd><p>
+         Nellymoser is a proprietary audio codec introduced in the
+         Flash Player in version 6. For more information, please see
+         Wikipedia. 
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">O</h3><dl><dt>
+       OpenGL
+      </dt><dd><p>
+         OpenGL (Open Graphics Library) is a standard specification
+         defining a cross-language cross-platform API for writing
+         applications that produce 3D and 2D computer
+         graphics. Accelerated graphic cards usually provide OpenGL at
+         the hardware level. Please refer to Wikipedia for availability
+         of free software OpenGL hardware drivers. A free software
+         implementation of the API is available (Mesa). OpenGL can be
+         used as a renderer in Gnash. 
+       </p></dd><dt>
+       ORM
+      </dt><dd><p>
+         ORM is a system for ensuring the rights of the creator over a piece 
of digital content. It is more passive than DRM.
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">P</h3><dl><dt>
+       plugin
+      </dt><dd><p>
+         The glossterm <span class="emphasis"><em>plugin</em></span> is used 
in <span class="application">Gnash</span> to
+         refer to both any <span class="application">Gnash</span> browser 
plugin, as well as the Firefox
+         plugin specifically.  The Konqueror plugin is called
+         <span class="emphasis"><em>Kpart</em></span>.  Sometimes, the term is 
used in
+         an even more generic sense to refer to 
+         <span class="emphasis"><em>extensions</em></span>.
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">Q</h3><dl><dt>
+       Qt
+      </dt><dd><p>
+         Qt is a GUI library which is used by KDE. The plugin version
+         of Gnash using this GUI library is Kpart. The standalone
+         version is enabled with --enable-gui=kde. 
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">R</h3><dl><dt>
+       renderer
+      </dt><dd><p>
+         The <span class="emphasis"><em>renderer</em></span> is the subsystem 
of <span class="application">Gnash</span>
+         which renders content.  Only one renderer may be used; it is
+         selected at configuration time if building from source.
+       </p><p>
+         Available renderers are: AGG, OpenGL, and Cairo. In terms of 
+         feature completeness, AGG comes first; followed by OpenGL and 
+         then Cairo. In most cases, AGG is preferred for performance, 
+         except cases where it is beneficial to have hardware accelerated 
+         rendering (for example, when you have a very slow CPU but a very 
+         fast graphics card). In this case OpenGL should be used.
+       </p></dd><dt>
+       RTMP
+    </dt><dd><p>
+       RTMP is the Real Time Messaging Protocol primarily used with
+       to stream audio and video over the internet to the Flash
+       Player client. 
+      </p></dd><dt>
+       RTMPT
+      </dt><dd><p>
+         RTMPT is basically a HTTP wrapper around the RTMP protocol
+         that is sent using POST requests from the client to the
+         server. Because of the non-persistent nature of HTTP
+         connections, RTMPT requires the clients to poll for updates
+         periodically in order to get notified about events that are
+         generated by the server or other clients.  
+       </p></dd><dt>
+       RTMPTS
+      </dt><dd><p>
+         RTMPTS is the same as RTMPT, but instead of being a HTTP
+         wrapper, it is a HTTP SSL wrapper (HTTP secure connection). 
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">S</h3><dl><dt>
+       SDL
+      </dt><dd><p>
+         Simple DirectMedia Layer is a cross-platform multimedia free
+         software library that creates an abstraction over various
+         platforms' graphics, sound, and input APIs. Gnash can use it
+         as a GUI and/or as a sound handler. Note that the two usages
+         are independent of each other: you can use it for a task and
+         not for the other if you wish. At time or writing (2007-01-11)
+         the SDL GUI lacks menus and a performant input event
+         architecture; the SDL sound handler is the most feature rich,
+         supporting Video through ffmpeg. 
+       </p></dd><dt>
+       sound handler
+      </dt><dd><p>
+         The <span class="emphasis"><em>sound handler</em></span> is the part 
of <span class="application">Gnash</span>
+         which handles both event sounds and streaming sound.  Audio
+         from external sources are also handled through the sound handler
+         when SDL is used.  The sound handler must be selected during
+         configuration of Gnash when compiling.
+       </p><p>
+         There are currently two sound handlers available in <span 
class="application">Gnash</span>:
+         ffmpeg and Gstreamer.  The ffmpeg sound handler uses SDL for
+         mixing.
+         The Gstreamer-sound handler uses the available 
+         plugins to decode the audio, so it might not work if some 
+         important plugins are missing.  The GST sound handler is 
+         recommended (the default).
+       </p></dd><dt>
+       sprite
+      </dt><dd><p>
+         A sprite is an element of an Flash Movie. It's basically a
+         Movie inside another, having its own timeline. 
+       </p></dd><dt>
+       Stage
+      </dt><dd><p>
+         The visible area of a Flash movie. The name derives from a      
theater analogy. Graphical elements are referred to as
+         characters.  
+       </p></dd><dt>
+       SWF
+      </dt><dd><p>
+         <span class="emphasis"><em>SWF</em></span> is the file format for 
+         <span class="emphasis"><em>Flash</em></span> movies.
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">T</h3><dl><dt>
+       Tamarin
+      </dt><dd><p>
+         The Tamarin project seeks to create an open source
+         implementation of the ECMAScript 4th edition language
+         specification. The code is used by Adobe as part of the
+         ActionScript Virtual Machine within the Adobe Flash
+         Player. Gnash does not use Tamarin; it already has a working
+         virtual server and most ActionScript classes are implemented. 
+       </p></dd><dt>
+       timeline
+      </dt><dd><p>
+         In Flash technology, a timeline is a sequence of "frames". A
+         single Flash movie can contain multiple timelines, each
+         independently controlled (STOP or PLAY). At regular intervals
+         (FPS) the player advances all timelines in PLAY mode to the
+         next frame, looping back when last frame is reached. 
+       </p></dd></dl></div><div class="glossdiv"><h3 
class="title">X</h3><dl><dt>
+       X.org
+      </dt><dd><p>
+         X.org is the most commonly used X server; it was forked from
+         XFree86. 
+       </p></dd></dl></div></div><div class="chapter" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="authors"></a>Chapter 5. 
Authors</h2></div></div></div><p>
+        <span class="application">Gnash</span> is maintained by Rob Savoye. 
Other active developers
+       are: Sandro Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad
+       Musick, Benjamin Wolsey, and Zou Lunkai. Please send all
+       comments and suggestions to <code class="email">&lt;<a class="email" 
href="mailto:address@hidden";>address@hidden
+       </a>&gt;</code>. Past and sometimes current developers are Tomas
+       Groth and Markus Gothe.
+    </p><p>
+        <span class="application">Gnash</span> was initially derived from 
<span class="application">GameSWF</span>.
+        <span class="application">GameSWF</span> is maintained by
+        Thatcher Ulrich <code class="email">&lt;<a class="email" 
href="mailto:address@hidden";>address@hidden</a>&gt;</code>.  The following
+        people contributed to <span class="application">GameSWF</span>:
+        Mike Shaver, Thierry Berger-Perrin,
+       Ignacio Castaño, Willem Kokke, Vitaly Alexeev, Alexander Streit, 
+        and Rob Savoye.
+    </p></div><div class="appendix" lang="en"><div 
class="titlepage"><div><div><h2 class="title"><a name="fdl"></a>Appendix A. GNU 
Free Documentation License</h2></div><div><p class="releaseinfo">
+      Version 1.1, March 2000
+    </p></div><div><p class="copyright">Copyright © 2000 Free Software 
Foundation, Inc.</p></div><div><div class="legalnotice"><a 
name="fdl-legalnotice"></a><p>
+       </p><div class="address"><p>Free Software Foundation, Inc. <span 
class="street">59 Temple Place, <br>
+        Suite 330</span>, <span class="city">Boston</span>, <span 
class="state">MA</span>  <br>
+        <span class="postcode">02111-1307</span>  <span 
class="country">USA</span></p></div><p> 
+       Everyone is permitted to copy and distribute verbatim copies of this 
+        license document, but changing it is not allowed.
+      </p></div></div></div></div><div class="toc"><p><b>Table of 
Contents</b></p><dl><dt><span class="sect1"><a href="#fdl-preamble">0. 
PREAMBLE</a></span></dt><dt><span class="sect1"><a href="#fdl-section1">1. 
APPLICABILITY AND DEFINITIONS</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section2">2. VERBATIM COPYING</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section3">3. COPYING IN 
QUANTITY</a></span></dt><dt><span class="sect1"><a href="#fdl-section4">4. 
MODIFICATIONS</a></span></dt><dt><span class="sect1"><a href="#fdl-section5">5. 
COMBINING DOCUMENTS</a></span></dt><dt><span class="sect1"><a 
href="#fdl-section6">6. COLLECTIONS OF DOCUMENTS</a></span></dt><dt><span 
class="sect1"><a href="#fdl-section7">7. AGGREGATION WITH INDEPENDENT 
WORKS</a></span></dt><dt><span class="sect1"><a href="#fdl-section8">8. 
TRANSLATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section9">9. 
TERMINATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section10">10. 
FUTURE REVISIONS OF THIS LICENSE</a></span></dt><dt><span class="sect1"><a 
href="#fdl-using">Addendum</a></span></dt></dl></div><div class="sect1" 
lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: 
both"><a name="fdl-preamble"></a>0. PREAMBLE</h2></div></div></div><p>
+      The purpose of this License is to make a manual, textbook, or
+      other written document "free" in the sense of
+      freedom: to assure everyone the effective freedom to copy and
+      redistribute it, with or without modifying it, either
+      commercially or non-commercially. Secondarily, this License
+      preserves for the author and publisher a way to get credit for
+      their work, while not being considered responsible for
+      modifications made by others.
+    </p><p>
+      This License is a kind of "copyleft", which means
+      that derivative works of the document must themselves be free in
+      the same sense. It complements the GNU General Public License,
+      which is a copyleft license designed for free software.
+    </p><p>
+      We have designed this License in order to use it for manuals for
+      free software, because free software needs free documentation: a
+      free program should come with manuals providing the same
+      freedoms that the software does. But this License is not limited
+      to software manuals; it can be used for any textual work,
+      regardless of subject matter or whether it is published as a
+      printed book. We recommend this License principally for works
+      whose purpose is instruction or reference.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section1"></a>1. APPLICABILITY AND 
DEFINITIONS</h2></div></div></div><p><a name="fdl-document"></a>
+      This License applies to any manual or other work that contains a
+      notice placed by the copyright holder saying it can be
+      distributed under the terms of this License. The
+      "Document", below, refers to any such manual or
+      work. Any member of the public is a licensee, and is addressed
+      as "you".
+    </p><p><a name="fdl-modified"></a>
+      A "Modified Version" of the Document means any work
+      containing the Document or a portion of it, either copied
+      verbatim, or with modifications and/or translated into another
+      language.
+    </p><p><a name="fdl-secondary"></a>
+      A "Secondary Section" is a named appendix or a
+      front-matter section of the <a class="link" 
href="#fdl-document">Document</a> that deals exclusively
+      with the relationship of the publishers or authors of the
+      Document to the Document's overall subject (or to related
+      matters) and contains nothing that could fall directly within
+      that overall subject. (For example, if the Document is in part a
+      textbook of mathematics, a Secondary Section may not explain any
+      mathematics.)  The relationship could be a matter of historical
+      connection with the subject or with related matters, or of
+      legal, commercial, philosophical, ethical or political position
+      regarding them.
+    </p><p><a name="fdl-invariant"></a>
+      The "Invariant Sections" are certain <a class="link" 
href="#fdl-secondary"> Secondary Sections</a> whose titles
+      are designated, as being those of Invariant Sections, in the
+      notice that says that the <a class="link" 
href="#fdl-document">Document</a> is released under this
+      License.
+    </p><p><a name="fdl-cover-texts"></a>
+      The "Cover Texts" are certain short passages of
+      text that are listed, as Front-Cover Texts or Back-Cover Texts,
+      in the notice that says that the <a class="link" 
href="#fdl-document">Document</a> is released under this
+      License.
+    </p><p><a name="fdl-transparent"></a>
+      A "Transparent" copy of the <a class="link" href="#fdl-document"> 
Document</a> means a machine-readable
+      copy, represented in a format whose specification is available
+      to the general public, whose contents can be viewed and edited
+      directly and straightforwardly with generic text editors or (for
+      images composed of pixels) generic paint programs or (for
+      drawings) some widely available drawing editor, and that is
+      suitable for input to text formatters or for automatic
+      translation to a variety of formats suitable for input to text
+      formatters. A copy made in an otherwise Transparent file format
+      whose markup has been designed to thwart or discourage
+      subsequent modification by readers is not Transparent.  A copy
+      that is not "Transparent" is called "Opaque".
+    </p><p>
+      Examples of suitable formats for Transparent copies include
+      plain ASCII without markup, Texinfo input format, LaTeX input
+      format, SGML or XML using a publicly available DTD, and
+      standard-conforming simple HTML designed for human
+      modification. Opaque formats include PostScript, PDF,
+      proprietary formats that can be read and edited only by
+      proprietary word processors, SGML or XML for which the DTD
+      and/or processing tools are not generally available, and the
+      machine-generated HTML produced by some word processors for
+      output purposes only.
+    </p><p><a name="fdl-title-page"></a>
+      The "Title Page" means, for a printed book, the
+      title page itself, plus such following pages as are needed to
+      hold, legibly, the material this License requires to appear in
+      the title page. For works in formats which do not have any title
+      page as such, "Title Page" means the text near the
+      most prominent appearance of the work's title, preceding the
+      beginning of the body of the text.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section2"></a>2. VERBATIM COPYING</h2></div></div></div><p>
+      You may copy and distribute the <a class="link" 
href="#fdl-document">Document</a> in any medium, either
+      commercially or noncommercially, provided that this License, the
+      copyright notices, and the license notice saying this License
+      applies to the Document are reproduced in all copies, and that
+      you add no other conditions whatsoever to those of this
+      License. You may not use technical measures to obstruct or
+      control the reading or further copying of the copies you make or
+      distribute. However, you may accept compensation in exchange for
+      copies. If you distribute a large enough number of copies you
+      must also follow the conditions in <a class="link" href="#fdl-section3" 
title="3. COPYING IN QUANTITY">section 3</a>.
+    </p><p>
+      You may also lend copies, under the same conditions stated
+      above, and you may publicly display copies.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section3"></a>3. COPYING IN QUANTITY</h2></div></div></div><p>
+      If you publish printed copies of the <a class="link" 
href="#fdl-document">Document</a> numbering more than 100,
+      and the Document's license notice requires <a class="link" 
href="#fdl-cover-texts">Cover Texts</a>, you must enclose
+      the copies in covers that carry, clearly and legibly, all these
+      Cover Texts: Front-Cover Texts on the front cover, and
+      Back-Cover Texts on the back cover. Both covers must also
+      clearly and legibly identify you as the publisher of these
+      copies. The front cover must present the full title with all
+      words of the title equally prominent and visible. You may add
+      other material on the covers in addition. Copying with changes
+      limited to the covers, as long as they preserve the title of the
+      <a class="link" href="#fdl-document">Document</a> and satisfy these
+      conditions, can be treated as verbatim copying in other
+      respects.
+    </p><p>
+      If the required texts for either cover are too voluminous to fit
+      legibly, you should put the first ones listed (as many as fit
+      reasonably) on the actual cover, and continue the rest onto
+      adjacent pages.
+    </p><p>
+      If you publish or distribute <a class="link" 
href="#fdl-transparent">Opaque</a> copies of the <a class="link" 
href="#fdl-document">Document</a> numbering more than 100,
+      you must either include a machine-readable <a class="link" 
href="#fdl-transparent">Transparent</a> copy along with
+      each Opaque copy, or state in or with each Opaque copy a
+      publicly-accessible computer-network location containing a
+      complete Transparent copy of the Document, free of added
+      material, which the general network-using public has access to
+      download anonymously at no charge using public-standard network
+      protocols. If you use the latter option, you must take
+      reasonably prudent steps, when you begin distribution of Opaque
+      copies in quantity, to ensure that this Transparent copy will
+      remain thus accessible at the stated location until at least one
+      year after the last time you distribute an Opaque copy (directly
+      or through your agents or retailers) of that edition to the
+      public.
+    </p><p>
+      It is requested, but not required, that you contact the authors
+      of the <a class="link" href="#fdl-document">Document</a> well before
+      redistributing any large number of copies, to give them a chance
+      to provide you with an updated version of the Document.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section4"></a>4. MODIFICATIONS</h2></div></div></div><p>
+      You may copy and distribute a <a class="link" 
href="#fdl-modified">Modified Version</a> of the <a class="link" 
href="#fdl-document">Document</a> under the conditions of
+      sections <a class="link" href="#fdl-section2" title="2. VERBATIM 
COPYING">2</a> and <a class="link" href="#fdl-section3" title="3. COPYING IN 
QUANTITY">3</a> above, provided that you release
+      the Modified Version under precisely this License, with the
+      Modified Version filling the role of the Document, thus
+      licensing distribution and modification of the Modified Version
+      to whoever possesses a copy of it. In addition, you must do
+      these things in the Modified Version:
+    </p><div class="itemizedlist"><ul type="opencircle"><li 
style="list-style-type: circle"><p><b>A. </b>
+           Use in the <a class="link" href="#fdl-title-page">Title
+           Page</a> (and on the covers, if any) a title distinct
+           from that of the <a class="link" href="#fdl-document">Document</a>, 
and from those of
+           previous versions (which should, if there were any, be
+           listed in the History section of the Document). You may
+           use the same title as a previous version if the original
+           publisher of that version gives permission.
+         </p></li><li style="list-style-type: circle"><p><b>B. </b>
+           List on the <a class="link" href="#fdl-title-page">Title
+           Page</a>, as authors, one or more persons or entities
+           responsible for authorship of the modifications in the
+           <a class="link" href="#fdl-modified">Modified Version</a>,
+           together with at least five of the principal authors of
+           the <a class="link" href="#fdl-document">Document</a> (all of
+           its principal authors, if it has less than five).
+         </p></li><li style="list-style-type: circle"><p><b>C. </b>
+           State on the <a class="link" href="#fdl-title-page">Title
+           Page</a> the name of the publisher of the <a class="link" 
href="#fdl-modified">Modified Version</a>, as the
+           publisher.
+         </p></li><li style="list-style-type: circle"><p><b>D. </b>
+           Preserve all the copyright notices of the <a class="link" 
href="#fdl-document">Document</a>.
+         </p></li><li style="list-style-type: circle"><p><b>E. </b>
+           Add an appropriate copyright notice for your modifications
+           adjacent to the other copyright notices.
+         </p></li><li style="list-style-type: circle"><p><b>F. </b>
+           Include, immediately after the copyright notices, a
+           license notice giving the public permission to use the
+           <a class="link" href="#fdl-modified">Modified Version</a> under
+           the terms of this License, in the form shown in the
+           Addendum below.
+         </p></li><li style="list-style-type: circle"><p><b>G. </b>
+           Preserve in that license notice the full lists of <a class="link" 
href="#fdl-invariant"> Invariant Sections</a> and
+           required <a class="link" href="#fdl-cover-texts">Cover
+           Texts</a> given in the <a class="link" 
href="#fdl-document">Document's</a> license notice.
+         </p></li><li style="list-style-type: circle"><p><b>H. </b>
+           Include an unaltered copy of this License.
+         </p></li><li style="list-style-type: circle"><p><b>I. </b>
+           Preserve the section entitled "History", and
+           its title, and add to it an item stating at least the
+           title, year, new authors, and publisher of the <a class="link" 
href="#fdl-modified">Modified Version </a>as given on
+           the <a class="link" href="#fdl-title-page">Title Page</a>.  If
+           there is no section entitled "History" in the
+           <a class="link" href="#fdl-document">Document</a>, create one
+           stating the title, year, authors, and publisher of the
+           Document as given on its Title Page, then add an item
+           describing the Modified Version as stated in the previous
+           sentence.
+         </p></li><li style="list-style-type: circle"><p><b>J. </b>
+           Preserve the network location, if any, given in the <a class="link" 
href="#fdl-document">Document</a> for public access
+           to a <a class="link" href="#fdl-transparent">Transparent</a>
+           copy of the Document, and likewise the network locations
+           given in the Document for previous versions it was based
+           on. These may be placed in the "History"
+           section.  You may omit a network location for a work that
+           was published at least four years before the Document
+           itself, or if the original publisher of the version it
+           refers to gives permission.
+         </p></li><li style="list-style-type: circle"><p><b>K. </b>
+           In any section entitled "Acknowledgements" or
+           "Dedications", preserve the section's title,
+           and preserve in the section all the substance and tone of
+           each of the contributor acknowledgements and/or
+           dedications given therein.
+         </p></li><li style="list-style-type: circle"><p><b>L. </b>
+           Preserve all the <a class="link" href="#fdl-invariant">Invariant
+           Sections</a> of the <a class="link" 
href="#fdl-document">Document</a>, unaltered in their
+           text and in their titles.  Section numbers or the
+           equivalent are not considered part of the section titles.
+         </p></li><li style="list-style-type: circle"><p><b>M. </b>
+           Delete any section entitled
+           "Endorsements". Such a section may not be
+           included in the <a class="link" href="#fdl-modified">Modified
+           Version</a>.
+         </p></li><li style="list-style-type: circle"><p><b>N. </b>
+           Do not retitle any existing section as
+           "Endorsements" or to conflict in title with
+           any <a class="link" href="#fdl-invariant">Invariant
+           Section</a>.
+         </p></li></ul></div><p>
+      If the <a class="link" href="#fdl-modified">Modified Version</a>
+      includes new front-matter sections or appendices that qualify as
+      <a class="link" href="#fdl-secondary">Secondary Sections</a> and
+      contain no material copied from the Document, you may at your
+      option designate some or all of these sections as invariant. To
+      do this, add their titles to the list of <a class="link" 
href="#fdl-invariant">Invariant Sections</a> in the
+      Modified Version's license notice.  These titles must be
+      distinct from any other section titles.
+    </p><p>
+      You may add a section entitled "Endorsements",
+      provided it contains nothing but endorsements of your <a class="link" 
href="#fdl-modified">Modified Version</a> by various
+      parties--for example, statements of peer review or that the text
+      has been approved by an organization as the authoritative
+      definition of a standard.
+    </p><p>
+      You may add a passage of up to five words as a <a class="link" 
href="#fdl-cover-texts">Front-Cover Text</a>, and a passage
+      of up to 25 words as a <a class="link" 
href="#fdl-cover-texts">Back-Cover Text</a>, to the end of
+      the list of <a class="link" href="#fdl-cover-texts">Cover Texts</a>
+      in the <a class="link" href="#fdl-modified">Modified Version</a>.
+      Only one passage of Front-Cover Text and one of Back-Cover Text
+      may be added by (or through arrangements made by) any one
+      entity. If the <a class="link" href="#fdl-document">Document</a>
+      already includes a cover text for the same cover, previously
+      added by you or by arrangement made by the same entity you are
+      acting on behalf of, you may not add another; but you may
+      replace the old one, on explicit permission from the previous
+      publisher that added the old one.
+    </p><p>
+      The author(s) and publisher(s) of the <a class="link" 
href="#fdl-document">Document</a> do not by this License
+      give permission to use their names for publicity for or to
+      assert or imply endorsement of any <a class="link" 
href="#fdl-modified">Modified Version </a>.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section5"></a>5. COMBINING DOCUMENTS</h2></div></div></div><p>
+      You may combine the <a class="link" href="#fdl-document">Document</a>
+      with other documents released under this License, under the
+      terms defined in <a class="link" href="#fdl-section4" title="4. 
MODIFICATIONS">section 4</a>
+      above for modified versions, provided that you include in the
+      combination all of the <a class="link" href="#fdl-invariant">Invariant
+      Sections</a> of all of the original documents, unmodified,
+      and list them all as Invariant Sections of your combined work in
+      its license notice.
+    </p><p>
+      The combined work need only contain one copy of this License,
+      and multiple identical <a class="link" href="#fdl-invariant">Invariant
+      Sections</a> may be replaced with a single copy. If there are
+      multiple Invariant Sections with the same name but different
+      contents, make the title of each such section unique by adding
+      at the end of it, in parentheses, the name of the original
+      author or publisher of that section if known, or else a unique
+      number. Make the same adjustment to the section titles in the
+      list of Invariant Sections in the license notice of the combined
+      work.
+    </p><p>
+      In the combination, you must combine any sections entitled
+      "History" in the various original documents,
+      forming one section entitled "History"; likewise
+      combine any sections entitled "Acknowledgements",
+      and any sections entitled "Dedications".  You must
+      delete all sections entitled "Endorsements."
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section6"></a>6. COLLECTIONS OF DOCUMENTS</h2></div></div></div><p>
+      You may make a collection consisting of the <a class="link" 
href="#fdl-document">Document</a> and other documents
+      released under this License, and replace the individual copies
+      of this License in the various documents with a single copy that
+      is included in the collection, provided that you follow the
+      rules of this License for verbatim copying of each of the
+      documents in all other respects.
+    </p><p>
+      You may extract a single document from such a collection, and
+      distribute it individually under this License, provided you
+      insert a copy of this License into the extracted document, and
+      follow this License in all other respects regarding verbatim
+      copying of that document.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section7"></a>7. AGGREGATION WITH INDEPENDENT 
WORKS</h2></div></div></div><p>
+      A compilation of the <a class="link" href="#fdl-document">Document</a> 
or its derivatives with
+      other separate and independent documents or works, in or on a
+      volume of a storage or distribution medium, does not as a whole
+      count as a <a class="link" href="#fdl-modified">Modified Version</a>
+      of the Document, provided no compilation copyright is claimed
+      for the compilation.  Such a compilation is called an
+      "aggregate", and this License does not apply to the
+      other self-contained works thus compiled with the Document , on
+      account of their being thus compiled, if they are not themselves
+      derivative works of the Document.  If the <a class="link" 
href="#fdl-cover-texts">Cover Text</a> requirement of <a class="link" 
href="#fdl-section3" title="3. COPYING IN QUANTITY">section 3</a> is applicable 
to these
+      copies of the Document, then if the Document is less than one
+      quarter of the entire aggregate, the Document's Cover Texts may
+      be placed on covers that surround only the Document within the
+      aggregate. Otherwise they must appear on covers around the whole
+      aggregate.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section8"></a>8. TRANSLATION</h2></div></div></div><p>
+      Translation is considered a kind of modification, so you may
+      distribute translations of the <a class="link" 
href="#fdl-document">Document</a> under the terms of <a class="link" 
href="#fdl-section4" title="4. MODIFICATIONS">section 4</a>. Replacing <a 
class="link" href="#fdl-invariant"> Invariant Sections</a> with
+      translations requires special permission from their copyright
+      holders, but you may include translations of some or all
+      Invariant Sections in addition to the original versions of these
+      Invariant Sections. You may include a translation of this
+      License provided that you also include the original English
+      version of this License. In case of a disagreement between the
+      translation and the original English version of this License,
+      the original English version will prevail.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section9"></a>9. TERMINATION</h2></div></div></div><p>
+      You may not copy, modify, sublicense, or distribute the <a class="link" 
href="#fdl-document">Document</a> except as expressly
+      provided for under this License. Any other attempt to copy,
+      modify, sublicense or distribute the Document is void, and will
+      automatically terminate your rights under this License. However,
+      parties who have received copies, or rights, from you under this
+      License will not have their licenses terminated so long as such
+      parties remain in full compliance.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-section10"></a>10. FUTURE REVISIONS OF THIS 
LICENSE</h2></div></div></div><p>
+      The <a class="ulink" href="http://www.gnu.org/fsf/fsf.html"; 
target="_top">Free Software
+      Foundation</a> may publish new, revised versions of the GNU
+      Free Documentation License from time to time. Such new versions
+      will be similar in spirit to the present version, but may differ
+      in detail to address new problems or concerns. See <a class="ulink" 
href="http://www.gnu.org/copyleft"; 
target="_top">http://www.gnu.org/copyleft/</a>.
+    </p><p>
+      Each version of the License is given a distinguishing version
+      number. If the <a class="link" href="#fdl-document">Document</a>
+      specifies that a particular numbered version of this License
+      "or any later version" applies to it, you have the
+      option of following the terms and conditions either of that
+      specified version or of any later version that has been
+      published (not as a draft) by the Free Software Foundation. If
+      the Document does not specify a version number of this License,
+      you may choose any version ever published (not as a draft) by
+      the Free Software Foundation.
+    </p></div><div class="sect1" lang="en"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="fdl-using"></a>Addendum</h2></div></div></div><p>
+      To use this License in a document you have written, include a copy of
+      the License in the document and put the following copyright and
+      license notices just after the title page:
+    </p><div class="blockquote"><blockquote class="blockquote"><p>
+       Copyright 2008, Free Software Foundation.
+      </p><p>
+       Permission is granted to copy, distribute and/or modify this
+       document under the terms of the GNU Free Documentation
+       License, Version 1.1 or any later version published by the
+       Free Software Foundation; with no<a class="link" 
href="#fdl-invariant">Invariant Sections</a>, with no <a class="link" 
href="#fdl-cover-texts">Front-Cover Texts</a>,
+       and with no <a class="link" href="#fdl-cover-texts">Back-Cover
+       Texts</a>. A copy of the license is included in
+       the section entitled "GNU Free Documentation License".
+      </p></blockquote></div><p>
+      If your document contains nontrivial examples of program code,
+      we recommend releasing these examples in parallel under your
+      choice of free software license, such as the <a class="ulink" 
href="http://www.gnu.org/copyleft/gpl.html"; target="_top"> GNU General Public
+      License</a>, to permit their use in free software.
+    </p></div></div></div></body></html>

Index: doc/C/preformatted/gnashuser.ref.in
===================================================================
RCS file: doc/C/preformatted/gnashuser.ref.in
diff -N doc/C/preformatted/gnashuser.ref.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnashuser.ref.in 2 Mar 2008 16:32:22 -0000       1.1
@@ -0,0 +1,4583 @@
+START-INFO-DIR-ENTRY
+This is gnash_ref.info, produced by makeinfo version 4.11 from gnash_ref.texi.
+
+* Gnash Reference Manual: (gnash_ref).   Gnash
+END-INFO-DIR-ENTRY
+
+
+File: gnash_ref.info,  Node: Top,  Next: Introduction,  Up: (dir)
+
+Gnash Reference Manual
+**********************
+
+* Menu:
+
+* Introduction::
+* Building from Source::
+* Software Internals::
+* Gnash Extensions::
+* RTMP Protocol::
+* Mozilla/Firefox NSAPI Plugin::
+* Appendix::
+* Authors::
+* GNU Free Documentation License::
+
+--- The Detailed Node Listing ---
+
+Introduction
+
+* Audience::
+* What Is Supported ?::
+
+Building from Source
+
+* Overview::
+* Getting The Source::
+* Code Dependencies::
+* Testing Dependencies::
+* Documentation Dependencies::
+* Configuring Gnash::
+* Compiling the Code::
+* Creating the Documentation::
+* Running the Tests::
+
+Software Internals
+
+* A Tour of Gnash::
+* Sound handling in Gnash::
+* Testing : Testing.
+* Adding New ActionScript Class::
+
+Gnash Extensions
+
+* Creating A New Extension::
+* Debugging An Extension::
+* Included Extensions::
+
+RTMP Protocol
+
+* AMF Format::
+
+Mozilla/Firefox NSAPI Plugin
+
+* Plugin C API::
+* Plugin C++ API::
+* OpenGL and Threads::
+* Plugin Event Handling::
+
+Appendix
+
+* Code Style::
+
+GNU Free Documentation License
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_ref.info,  Node: Introduction,  Next: Building from Source,  Prev: 
Top,  Up: Top
+
+1 Introduction
+**************
+
+Gnash is a free SWF movie player.  It is available as a stand-alone
+application or as a plugin for several popular web browsers. It
+supports playing media from a disk or streaming over a network
+connection. Some popular video sharing sites like YouTube are supported
+from a wide vaariety of devices from embedded ones to modern desktops.
+
+   Gnash has a better focus on security, allowing the user tight
+control of all network or disk based I/O. Gnash also supports extending
+ActionScript by creating your own. You can write wrappers for any
+development library, and import them into the player much like perl or
+python does.
+
+* Menu:
+
+* Audience::
+* What Is Supported ?::
+
+
+File: gnash_ref.info,  Node: Audience,  Next: What Is Supported ?,  Up: 
Introduction
+
+1.1 Audience
+============
+
+This manual is primarily focused on users interested in how to get
+Gnash installed from a package, and basic usage as a web browser
+plugin. For more technical details, please refer to the Gnash Reference
+manual.
+
+
+File: gnash_ref.info,  Node: What Is Supported ?,  Prev: Audience,  Up: 
Introduction
+
+1.2 What Is Supported ?
+=======================
+
+Gnash is known to compile for most any POSIX and ANSI C++ conforming
+system if you have all the dependent libraries installed. Systems we
+test on, and which Gnash is know to run on are Ubuntu, Fedora, Debian,
+OpenBSD, NetBSD, FreeBSD, Win32, and Darwin (OSX) primarily.
+Occasionally other platforms are built, primarily by those distribution
+maintainers. This includes BeOS, Haiku, Syllable, OS/2, Solaris,
+Slackware, and Gentoo.
+
+   Gnash is a capable of reading up to SWF v9 files and opcodes, but
+primarily supports SWF v7, with better SWF v8 and v9 support under
+heavy developement. With the 0.8.2 release, Gnash includes initial
+parser support for SWF v8 and v9.  Not all ActionScript 2 classes are
+implemented yet, but all of the most heavily used ones are. Many
+ActionScript 2 classes are partially implemented; there is support for
+all of the commonly used methods of each class.
+
+   Gnash has implemented about 80% of ActionScript v. 2.0, and has
+begun implementing ActionScript v. 3.0. Gnash supports the majority of
+Flash opcodes up to SWF version 9, and a wide sampling of ActionScript
+classes for SWF version 8.
+
+   As ActionsScript 3 is a more developed version of ActionScript 2,
+many of the same classes work for both. Support has been added to
+Gnash's ActionScript library to support the new ActionScript 3 filters,
+which get applied to every class. Implementing ActionScript clases is
+often the easiest way for new Gnash developers to make a contribution
+without a deep internal knpowledge of Gnash.
+
+   Gnash has included video support since early 2007, but this is an
+every changing field of reverse engineering. Many of the popular video
+sharing sites use SWF v8 or v9, which Gnash still has imperfect support
+for. This is improving all the time, so often builds from a development
+snapshot will work when using the older release packaged in your
+distribution doesn't. You can find daily snapshots of the latest CVS
+tree at: http://www.gnashdev.org/dev_snapshots
+(http://www.gnashdev.org/dev_snapshots/).
+
+   Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+should work with Gnash. Gnash supports the loading of patent free
+codecs like Ogg Vorbis or Theora from disk based files, while work is
+being done to support these codecs when embedded in a SWF file. Ffmpeg
+contains the codecs used by the current SWF defintion, FLV, VP6 (ON2),
+H.263, H.264, and MP3.
+
+
+File: gnash_ref.info,  Node: Building from Source,  Next: Software Internals,  
Prev: Introduction,  Up: Top
+
+2 Building from Source
+**********************
+
+* Menu:
+
+* Overview::
+* Getting The Source::
+* Code Dependencies::
+* Testing Dependencies::
+* Documentation Dependencies::
+* Configuring Gnash::
+* Compiling the Code::
+* Creating the Documentation::
+* Running the Tests::
+
+
+File: gnash_ref.info,  Node: Overview,  Next: Getting The Source,  Up: 
Building from Source
+
+2.1 Overview
+============
+
+The typical process of building from source will involve getting the
+source (*note Getting The Source::), build dependencies (*note Code
+Dependencies::), configuration (*note Configuring Gnash::), compilation
+(*note Compiling the Code::), testing (*note Running the Tests::), and
+installation (*note Installation::).  A simplified overview of the
+process would be:
+
+
+             ./autogen.sh
+             ./configure
+             make
+             make check
+             make install
+
+   If you are compiling with GCC you will probably need to use a machine
+with at least 128 megabytes of physical RAM; 64MB is not enough for a
+couple of the files, even with swap enabled and optimisation turned off.
+
+   At present the Gnash source is about 30 MB to extracted and
+configured and requires a total of about 125 megabytes to compile it.
+
+   Continue reading for detailed step-by-step instructions of the
+entire procedure.
+
+
+File: gnash_ref.info,  Node: Getting The Source,  Next: Code Dependencies,  
Prev: Overview,  Up: Building from Source
+
+2.2 Getting The Source
+======================
+
+* Menu:
+
+* Releases::
+* CVS Access::
+
+
+File: gnash_ref.info,  Node: Releases,  Next: CVS Access,  Up: Getting The 
Source
+
+2.2.1 Releases
+--------------
+
+Tarballs of official releases can be found in the download area of the
+project's GNU Savannah page at http://savannah.gnu.org/projects/gnash
+(http://savannah.gnu.org/projects/gnash) or under
+http://ftp.gnu.org/gnu/gnash (http://ftp.gnu.org/gnu/gnash)
+
+
+File: gnash_ref.info,  Node: CVS Access,  Prev: Releases,  Up: Getting The 
Source
+
+2.2.2 CVS Access
+----------------
+
+The latest Gnash development sources are available via anonymous CVS.
+Use the following commands to check them out (just hit return when you
+are prompted for the password):
+
+
+         export CVS_RSH=ssh
+         cvs -z3 -d:pserver:address@hidden:/sources/gnash co gnash
+
+you will then be able to update your copy from the repository using
+
+
+         cd gnash
+         cvs update -d
+
+   If you only have access to the internet via a web proxy, you will
+find daily source snapshots of the latest CVS tree in
+http://www.gnashdev.org/dev_snapshots
+(http://www.gnashdev.org/dev_snapshots/)
+
+
+File: gnash_ref.info,  Node: Code Dependencies,  Next: Testing Dependencies,  
Prev: Getting The Source,  Up: Building from Source
+
+2.3 Code Dependencies
+=====================
+
+Gnash has a number of dependencies on other packages.  If you install
+the dependencies using a package manager, be certain to install the
+development versions of the packages.  The normal versions are often
+missing the headers Gnash needs to compile.
+
+   Some dependencies have other dependencies, like GTk also needs
+glib2, atk, and pango to produce a fully linked executable. Different
+distributions also use differing dependencies, sometimes a package will
+depend on libxml2 on one system, but libexpat on another.
+
+*Code Dependency Table*
+
+Name       Level      Version    DescriptionExplanationapt-get    RPM/Yum
+                                                       package    packageBSD
+                                                                  package
+Boost      Required   1.32 or     Boost is  In Gnash,  `libboost-thread-dev,`
+                      higher     a library  Boost      
libboost-date-time-devlibboost-thread-devel,
+                                 of         libraries  
libboost-devlibboost-date-time-devel
+                                 portable   are used   '          '`
+                                 C++        extensively,           
boost-headers,
+                                 classes    primarily             boost-libs,
+                                 and        boost-gthread           or just
+                                 templates. and                   boost '
+                                            boost-date-time.           
+                                            Boost is              
+                                            used for              
+                                            thread                
+                                            and mutext            
+                                            handling.             
+libxml2    Required               Libxml2   This       
`libxml2-dev'`libxml2-devel'`libxml2'
+                                 is the     library               
+                                 GNOME XML  is used               
+                                 parser     to parse              
+                                 library    messages              
+                                 and is     for the               
+                                 available  XML                   
+                                 at         XMLNode,              
+                                 http://xmlsoft.orgor                    
+                                 (http://xmlsoft.org).XMLSocket             
+                                            ActionScript           
+                                            classes.              
+AGG        Possibly   2.4 or      AGG is    Gnash      
`libagg-dev'`agg-devel'`agg'
+           Required   higher     the        requires              
+                                 AntiGrain  the                   
+                                 low-level  installation           
+                                 2D         of at                 
+                                 graphics   least one             
+                                 library.   renderer.             
+                                            AGG is                
+                                            considered            
+                                            the _best             
+                                            supported_            
+                                            renderer              
+                                            for Gnash.            
+OpenGL     Possibly               OpenGL    Gnash      
`libgl1-mesa-dev'`libmesa-devel'`mesa'
+           Required              is a       requires              
+                                 standard   the                   
+                                 specificationinstallation           
+                                 defining a of at                 
+                                 cross-languageleast one             
+                                 cross-platformrenderer.             
+                                 API for    If you                
+                                 writing    don't                 
+                                 applicationshave a                
+                                 which      hardware              
+                                 produce    accelerated           
+                                 3D and 2D  driver,               
+                                 graphics.  you're                
+                                 It         better                
+                                 supports   off using             
+                                 hardware   AGG for               
+                                 acceleration.the                   
+                                 You can    renderer.             
+                                 download                         
+                                 a free                           
+                                 implementation                      
+                                 from                             
+                                 http://www.mesa3d.org                      
+                                 (http://www.mesa3d.org),                      
+                                 although                         
+                                 it                               
+                                 doesn't                          
+                                 support                          
+                                 hardware                         
+                                 acceleration.                      
+Cairo      Possibly               Cairo is  Gnash      
`libcairo2-dev'`cairo-devel'`cairo'
+           Required              a 2D       requires              
+                                 graphics   the                   
+                                 library    installation           
+                                 with       of at                 
+                                 support    least one             
+                                 for        renderer.             
+                                 multiple   Cairo is              
+                                 output     considered            
+                                 devices.   the                   
+                                 It will    _least                
+                                 automaticallysupported_            
+                                 use        renderer              
+                                 graphic    for Gnash.            
+                                 card                             
+                                 acceleration                      
+                                 when                             
+                                 available,                       
+                                 and has                          
+                                 an                               
+                                 experimental                      
+                                 OpenGL                           
+                                 backend.                         
+GTK        Possibly   2.2 or      GTK is    Gnash      
`libgtk2.0-dev'`gtk-devel'`gtk+2'
+           Required   higher     the GIMP   requires              
+                                 Toolkit    the                   
+                                 GUI        installation           
+                                 library    of at                 
+                                 used by    least one             
+                                 the GNOME  GUI                   
+                                 desktop.   library.              
+                                 It uses    GTK is                
+                                 Cairo      considered            
+                                 internally.to be the             
+                                 Gtk        _best                 
+                                 enables    supported_            
+                                 better     GUI                   
+                                 integrationlibrary               
+                                 with       option                
+                                 Firefox,   for Gnash.            
+                                 as well                          
+                                 as better                        
+                                 event                            
+                                 handling                         
+                                 and                              
+                                 higher                           
+                                 level GUI                        
+                                 constructs                       
+                                 like                             
+                                 menus and                        
+                                 dialog                           
+                                 boxes.                           
+GtkGlExt   Possibly               GtkGlExt  This       
`libgtkglext1-dev'`gtkglext-devel'`gtkglext'
+           Required              integrates library               
+                                 OpenGL     is                    
+                                 into GTK.  required              
+                                            in order              
+                                            to use                
+                                            the GTK               
+                                            GUI                   
+                                            library               
+                                            in                    
+                                            conjunction           
+                                            with the              
+                                            OpenGL                
+                                            renderer.             
+SDL        Possibly               The       Gnash      
`libsdl1.2-dev'`SDL-devel'`SDL-1.2'
+           Required              Simple     requires              
+                                 DirectMediathe                   
+                                 Layer is   installation           
+                                 a          of at                 
+                                 cross-platformleast one             
+                                 multimedia GUI                   
+                                 library    library.              
+                                 which      SDL may               
+                                 provides   also be               
+                                 abstractionused as a             
+                                 for        sound                 
+                                 audio,     handler               
+                                 graphics,  regardless            
+                                 sound and  of                    
+                                 input      whether               
+                                 APIs.      it is                 
+                                 SDL is     employed              
+                                 available  as a GUI              
+                                 from       library.              
+                                 http://www.libsdl.orgThe GUI               
+                                 (http://www.libsdl.org).library               
+                                            is                    
+                                            _poorly               
+                                            supported_            
+                                            in Gnash,             
+                                            but the               
+                                            sound                 
+                                            handler               
+                                            is the                
+                                            _best                 
+                                            supported_            
+                                            in Gnash.             
+FLTK       Possibly   2.0 or      The Fast  Gnash      No         No
+           Required   higher     Light      requires   distributiondistribution
+                                 ToolKit    the        packages   packages
+                                 is a       installationare        are
+                                 portable   of at      available. available.No
+                                 GUI        least one             distribution
+                                 library    GUI                   packages
+                                 which is   library.              are
+                                 intended   FLTK may              available.
+                                 as a       be used               
+                                 replacementin                    
+                                 for the    conjunction           
+                                 SDL GUI.   with the              
+                                            Cairo and             
+                                            AGG                   
+                                            renderers.            
+KDE        Possibly               Kdelibs   Gnash      
`kdelibs3-dev,`kdelibs-devel,
+           Required              is a       requires   
kdebase-dev'kdebase-devel'`kdelibs,
+                                 collection the                   kdebase'
+                                 of         installation           
+                                 libraries  of at                 
+                                 needed to  least one             
+                                 compile    GUI                   
+                                 KDE        library.              
+                                 applications.Kdelibs               
+                                            is also               
+                                            required              
+                                            for the               
+                                            Kpart                 
+                                            plugin                
+                                            for                   
+                                            Konqueror.            
+Gstreamer  Optional               Gstreamer If you     
`libgstreamer0.8-dev'`gstreamer-devel'`gstreamer-0.10'
+                                 is a       would                 
+                                 video      like                  
+                                 handler.   video                 
+                                            playback,             
+                                            you must              
+                                            install               
+                                            one of                
+                                            the video             
+                                            handlers.             
+gst-ffmpeg Possibly               gst-ffmpegThis       
`gstreamer0.8-ffmpeg-dev'`gstreamer-ffmpeg-devel'`gstreamer-ffmpeg'
+           Required              allows     package               
+                                 you to     is                    
+                                 use the    required              
+                                 FFMPEG     if you                
+                                 decoder    would                 
+                                 with       like to               
+                                 Gstreamer. use                   
+                                            Gstreamer             
+                                            as a                  
+                                            video                 
+                                            handler.              
+FFMPEG     Possibly               FFMPEG    If you     
`ffmpeg-dev'`ffmpeg-devel'`ffmpeg'
+           Required              is a       would                 
+                                 video      like                  
+                                 handler.   video                 
+                                            playback,             
+                                            you must              
+                                            install               
+                                            one of                
+                                            the video             
+                                            handlers.             
+                                            When                  
+                                            using the             
+                                            gstreamer-ffmpeg           
+                                            plugin,               
+                                            ffmpeg                
+                                            doesn't               
+                                            need to be            
+                                            installed,            
+                                            as it's               
+                                            part of               
+                                            the                   
+                                            plugin.               
+                                            For                   
+                                            systems               
+                                            without               
+                                            Gstreamer             
+                                            support,              
+                                            ffmpeg                
+                                            can be                
+                                            used                  
+                                            directly.             
+JPEG       Optional              JPEG       This       
`libjpeg62-dev'`libjpeg'`jpeg'
+                                 (http://www.ijg.org/)library               
+                                 is a       is used               
+                                 lossy      for                   
+                                 image      rendering             
+                                 format     JPEGs.                
+                                 which is                         
+                                 heavily                          
+                                 used for                         
+                                 images.                          
+PNG        Optional              PNG        This       
`libpng12-dev'`libpng'`png'
+                                 (http://www.libpng.org/pub/png/)library       
        
+                                 is a       is used               
+                                 patent-freefor                   
+                                 image      rendering             
+                                 format     PNGs.                 
+                                 which is                         
+                                 comparable                       
+                                 to _GIF_.                        
+libcurl    Optional               libcurl   This       
`libcurl4-gnutls'`libcurl'`curl'
+                                 is the     library               
+                                 multiprotocalis used               
+                                 file       for URL               
+                                 transfer   downloading.           
+                                 library.                         
+Glib2      Optional               Glib2 is  This       
`glib2-dev'`glib2-devel'`glib2'
+                                 a          library               
+                                 dependency is used               
+                                 of Gtk,    for                   
+                                 and is a   convenience.           
+                                 collection                       
+                                 of                               
+                                 commonly                         
+                                 used                             
+                                 functions.                       
+Atk        Optional               Atk is a  This       `atk-dev'  
`atk-devel'`atk'
+                                 dependency library               
+                                 of Gtk,    is used               
+                                 and is     for                   
+                                 used for   accessiblity..           
+                                 accessibility                      
+                                 support.                         
+Pango      Optional               Pango is  This       
`pango-dev'`pango-devel'`pango'
+                                 a          library               
+                                 dependency is used               
+                                 of Gtk,    for font              
+                                 and is     handling.             
+                                 used for                         
+                                 font                             
+                                 handling.                        
+automake   Possibly   1.6.0       Automake  This       `automake' 
`automake'`automake'
+           Required              is a tool  package               
+                                 for        is                    
+                                 generating required              
+                                 _Makefile.in_to run                
+                                 files.     _autogen.sh_,           
+                                            which is              
+                                            a                     
+                                            requirement           
+                                            if you                
+                                            are using             
+                                            the                   
+                                            development           
+                                            source                
+                                            from CVS.             
+autoconf   Possibly   2.59        Autoconf  This       `autoconf' 
`autoconf'`autoconf'
+           Required              is a       package               
+                                 package    is                    
+                                 for        required              
+                                 generating to run                
+                                 configure  _autogen.sh_,           
+                                 scripts.   which is              
+                                            a                     
+                                            requirement           
+                                            if you                
+                                            are using             
+                                            the                   
+                                            development           
+                                            source                
+                                            from CVS.             
+gettext    Possibly   0.14.6      Gettext   This       `gettext'  
`gettext'`gettext'
+           Required              is part    package               
+                                 of the     is                    
+                                 GNU        required              
+                                 Translationto run                
+                                 Project.   _autogen.sh_,           
+                                            which is              
+                                            a                     
+                                            requirement           
+                                            if you                
+                                            are using             
+                                            the                   
+                                            development           
+                                            source                
+                                            from CVS.             
+libtool    Possibly   1.5.22      This is   This       
`libltdl3-dev'`libtool'`libtool'
+           Required              a generic  package               
+                                 library    is                    
+                                 support    required              
+                                 script.    to run                
+                                            _autogen.sh_,           
+                                            which is              
+                                            a                     
+                                            requirement           
+                                            if you                
+                                            are using             
+                                            the                   
+                                            development           
+                                            source                
+                                            from CVS.             
+
+
+File: gnash_ref.info,  Node: Testing Dependencies,  Next: Documentation 
Dependencies,  Prev: Code Dependencies,  Up: Building from Source
+
+2.4 Testing Dependencies
+========================
+
+Gnash tries to run as many tests as possible, but will simply skip
+tests if the tools to run them are unavailable.
+
+*Testing Dependency Table*
+
+Name       Level      Version    DescriptionExplanationapt-get    RPM/Yum
+                                                       package    packageBSD
+                                                                  package
+Ming       Optional   0.4.0_beta4 Ming is   Ming is    No         No
+                      or higher  an         the        distributiondistribution
+                                 ActionScriptprimary    packages   packages
+                                 compiler.  compiler   are        are
+                                            for        available. available.No
+                                            ActionScript           distribution
+                                            testcases.            packages
+                                                                  are
+                                                                  available.
+Mtasc      Optional   1.12 or     Mtasc is  Mtasc is   `mtasc'    No
+                      higher     an         used in               distribution
+                                 ActionScriptsome                  packages
+                                 compiler.  tests.                are
+                                                                  available.No
+                                                                  distribution
+                                                                  packages
+                                                                  are
+                                                                  available.
+swfc       Optional   part of     Swfc a    Swfc is    No         No
+                      swftools   swf        used in    distributiondistribution
+                      0.8.1      decompiler.some       packages   packages
+                                            testcases. are        are
+                                                       available. available.No
+                                                                  distribution
+                                                                  packages
+                                                                  are
+                                                                  available.
+swfmill    Optional   0.2.12      Swfmill   Swfmill    No         No
+                                 is an      is used    distributiondistribution
+                                 XML-based  in some    packages   packages
+                                 SWF        testcases. are        are
+                                 (Shockwave            available. available.No
+                                 Flash)                           distribution
+                                 processing                       packages
+                                 tool.                            are
+                                                                  available.
+Python     Optional   2.4 or      Python    Python is  `python'   
`python'`python'
+                      higher     is a       used by               
+                                 scripting  part of               
+                                 language.  the                   
+                                            testing               
+                                            framework.            
+DejaGnu    Optional   1.4 or      DejaGnu   DejaGnu    `dejagnu'  
`dejagnu'`dejagnu'
+                      higher     is a       is used               
+                                 testing    to run                
+                                 framework. multiple              
+                                            tests in              
+                                            an                    
+                                            automated             
+                                            fashion.              
+
+
+File: gnash_ref.info,  Node: Documentation Dependencies,  Next: Configuring 
Gnash,  Prev: Testing Dependencies,  Up: Building from Source
+
+2.5 Documentation Dependencies
+==============================
+
+The following packages are used to build Gnash's documentation.
+
+*Documentation Dependency Table*
+
+Name       Level      Version    DescriptionExplanationapt-get    RPM/Yum
+                                                       package    packageBSD
+                                                                  package
+Docbook    Required              Docbook    Gnash      
`docbook-utils'`docbook-dtd41-sgml'
+                                 
(http://http://docbook.sourceforge.net/)documentationand        and
+                                 is is an   is         
`docbook-dsssl'`docbook-style-dsssl'docbook
+                                 industry-standardwritten               
+                                 XML        in                    
+                                 format     Docbook.              
+                                 for                              
+                                 technical                        
+                                 documentation.                      
+                                 You can                          
+                                 download                         
+                                 it from                          
+                                 
http://sourceforge.net/project/showfiles.php?group_id=21935#files               
       
+                                 
(http://sourceforge.net/project/showfiles.php?group_id=21935#files).            
          
+DocBook2X  Optional               This      DocBook2X  
`docbook2x'`docbook2x'`docbook2x'
+                                 software   is                    
+                                 package    required              
+                                 converts   to                    
+                                 Docbook    produce               
+                                 documents  HTML and              
+                                 to the     Texinfo               
+                                 traditionalformats.              
+                                 man page                         
+                                 format,                          
+                                 GNU                              
+                                 Texinfo                          
+                                 format,                          
+                                 and HTML                         
+                                 (via                             
+                                 Texinfo)                         
+                                 format.                          
+                                 It is                            
+                                 available                        
+                                 at                               
+                                 http://docbook2x.sourceforge.net/             
         
+                                 (http://docbook2x.sourceforge.net/).          
            
+DocBook-utilsOptional               This      
DocBook-utils`docbook-utils'`docbook-utils'`docbook-utils'
+                                 software   is                    
+                                 package    required              
+                                 converts   to                    
+                                 Docbook    produce               
+                                 documents  HTML and              
+                                 to the     Texinfo               
+                                 traditionalformats.              
+                                 man page                         
+                                 format,                          
+                                 GNU                              
+                                 Texinfo                          
+                                 format,                          
+                                 and HTML                         
+                                 (via                             
+                                 Texinfo)                         
+                                 format.                          
+Texinfo    Possibly               Texinfo   Texinfo    `texinfo'  
`texinfo'`texinfo'
+           Required              can be     is                    
+                                 used to    required              
+                                 convert    if you                
+                                 DocBook2X  wish to               
+                                 output     product               
+                                 into GNU   GNU info              
+                                 info       pages.                
+                                 pages.                           
+                                 You can                          
+                                 download                         
+                                 it from                          
+                                 http://ftp.gnu.org/gnu/texinfo/               
       
+                                 (http://ftp.gnu.org/gnu/texinfo/).            
          
+FOP        Optional   0.20.5      FormattingFOP is     `fop'      `fop'`fop'
+                                 Objects    required              
+                                 Processor  for PDF               
+                                 is a       output.               
+                                 print                            
+                                 formatter                        
+                                 driven by                        
+                                 XSL                              
+                                 formatting                       
+                                 objects.                         
+                                 It is a                          
+                                 Java                             
+                                 application                      
+                                 which can                        
+                                 output                           
+                                 PDF, PCL,                        
+                                 PS, SVG,                         
+                                 XML,                             
+                                 Print,                           
+                                 AWT, MIF,                        
+                                 and Text.                        
+                                 It is                            
+                                 available                        
+                                 at                               
+                                 http://xmlgraphics.apache.org/fop/            
          
+                                 (http://xmlgraphics.apache.org/fop/).         
             
+Java       Possibly               FOP       Sun's      Download   Download
+(j2re)     Required              requires   Java       the        the
+                                 Sun's      runtime    package    package
+                                 Java       (j2re) is  from Sun   from Sun
+                                 runtime    required   
(http://java.sun.com).(http://java.sun.com).
+                                 (GCJ does  to use                
+                                 not work   FOP.                  
+                                 with                             
+                                 FOP).                            
+                                 You can                          
+                                 download                         
+                                 it from                          
+                                 http://java.sun.com                      
+                                 (http://java.sun.com).                      
+JAI        Possibly               Sun's     JAI is     Download   Download
+           Required              Java       required   the        the
+                                 Advanced   if you     package    package
+                                 Imaging    wish to    from Sun   from Sun
+                                 API can    include    
(http://java.sun.com/products/java-media/jai/iio.html).(http://java.sun.com/products/java-media/jai/iio.html).
+                                 be         graphics              
+                                 downloaded in a PDF              
+                                 from       file being            
+                                 
http://java.sun.com/products/java-media/jai/iio.htmlgenerated             
+                                 
(http://java.sun.com/products/java-media/jai/iio.html).with FOP.             
+
+   If you install j2re, set the _JAVA_HOME_ environment variable to the
+top directory of the j2re installation.  If you encounter problems with
+the Java installation, you may also need to add this path to the
+_CLASSPATH_ environment variable.
+
+
+File: gnash_ref.info,  Node: Configuring Gnash,  Prev: Documentation 
Dependencies,  Up: Building from Source
+
+2.6 Configuring Gnash
+=====================
+
+Gnash, like most GNU projects, allows a user to select various options
+before compiling its source code. These options include selecting from
+the available features, specifying custom paths for installation, and
+cross compiling support uses GNU Autoconf
+(http://www.gnu.org/software/autoconf/) for configuration.
+
+   If you opted to download the [Cross reference to non-existant ID
+"sourcerepo"] of Gnash, the _configure_ script will not be included.
+It can be created by running _autogen.sh_ from the source root
+directory:
+
+
+           ./autogen.sh
+
+Note that there are some dependencies (*note Code Dependencies::) for
+autogen.
+
+   All the standard `configure' options are available.  In addition,
+Gnash has two types of options: those that [Cross reference to
+non-existant ID "features"], and those that specify custom paths for
+development packages (*note Specifying Custom Paths::) which are not
+found during the default search.  A complete list of _all_
+configuration options, including standard ones, can be seen by typing:
+
+
+           ./configure --help |less
+
+Read further for a more detailed explanation of Gnash-specific options.
+
+   The syntax for running _configure_ is as follows:
+
+
+           configure <options>
+
+The example below shows the `configure' options which create the
+smallest working standalone version of Gnash.  In this example,
+`configure' is being run from the source root directory:
+
+
+         ./configure --disable-debugger --disable-cygnal \
+         --disable-plugin --enable-media=ffmpeg --enable-gui=sdl
+
+   By default, you shouldn't need to supply any options to configure.
+The configure script will attempt to determine what to build based on
+the development libraries you have installed. The default configuration
+for Gnash is both GTK and KDE GUIs, the AGG renderer, and Gstreamer for
+mltimedia support, with no extensions built.
+
+   Being higher portable, Gnash has many configuration options
+available, and not all are supposed to work together. A common mistake
+when configuring Gnash is to supply too many options, overdriving
+Gnash's ability to do the right thing.
+
+* Menu:
+
+* Features::
+* Specifying Custom Paths::
+
+
+File: gnash_ref.info,  Node: Features,  Next: Specifying Custom Paths,  Up: 
Configuring Gnash
+
+2.6.1 Features
+--------------
+
+Some switches can be used during configuration to enable or disable
+features of Gnash. Some of the most important configuration options are:
+
+   * `--enable-gui' lets you specify your GUI of choice.  The default
+     option is GTK.
+
+   * `--enable-renderer' allows a renderer to be chosen.  The default
+     renderer is AGG.
+
+   * `--enable-media' permits a media handler to be selected.  The
+     default is Gstreamer.
+
+   A complete list of available features follows.
+
+*Configuration Options - Features*
+
+Option                               Function
+`--enable-debugger'                  Enable support for the Flash
+                                     debugger. The debugger is mainly of
+                                     interest to Flash developers, and
+                                     is still under development.
+`--enable-lirc'                       Enable support for the LIRC remote
+                                     control protocol.
+`--enable-cygnal'                     Build the Cygnal streaming media
+                                     server.
+`--disable-menus'                     Disable building all the menus for
+                                     the GUI. THis is used by mobile
+                                     devices without as much screen
+                                     space.
+`--enable-docbook'                   Enable the generation of HTML,
+                                     INFO, and MAN versions of the
+                                     documentation from the Docbook XML.
+                                     You will then be able to use `make
+                                     html', `make info', and `make man'
+                                     commands. By default, man,info and
+                                     html pages are generated.
+`--enable-gui=gtk|sdl|kde|fltk|fb|hildon|alp'Select the Graphic User Interface
+                                     to use (choose one).?
+                                     [undisplayable block object]
+`--enable-i810-lod-bias'             Enable fix for Intel 810 LOD bias
+                                     problem. Older versions of libMesa
+                                     on the Intel i810 or i815 graphics
+                                     processor need this flag or Gnash
+                                     will core dump. This has been fixed
+                                     in newer versions (summer 2005) of
+                                     libMesa.
+`--enable-media=ffmpeg|gst|none'      Select the specified media decoder
+                                     and sound engine.  FFMPEG uses the
+                                     SDL sound engine; GST uses its own.
+                                     `GST' is the default decoder.  ?
+                                     [undisplayable block object] You
+                                     should only select one media
+                                     decoder.
+`--disable-nsapi'`--enable-nsapi'    Force disable/enable building the
+                                     NPAPI plugin.  By default the
+                                     Mozilla plugin is built if the GTK
+                                     gui is selected.  Specify the
+                                     `--with-npapi-plugindir=' option to
+                                     specify where the plugin should be
+                                     installed.
+`--disable-kparts'`--enable-kparts'  Force disable/enable building the
+                                     KPARTS plugin. By default the KDE
+                                     plugin is built if the kde gui is
+                                     selected.  Specify the
+                                     `--with-kde-plugindir=' and
+                                     `--with-kde-servicesdir=' options
+                                     (or more generally the
+                                     `--with-kde-pluginprefix=' one) to
+                                     specify where the plugin should be
+                                     installed. The default installation
+                                     dir is extracted from kde-config.
+`--disable-plugins'                  Disable build of both kparts and
+                                     npapi plugins
+`--enable-renderer=opengl|cairo|agg' Enable support for the a graphics
+                                     backend. Currently only `opengl' and
+                                     `agg' work sufficiently. OpenGL is
+                                     used when you have hardware
+                                     accelerated graphics. AGG i used
+                                     when you do not have hardware
+                                     accelerated graphics. Typically
+                                     most desktop machines have OpenGL
+                                     support, and most embedded systems
+                                     do not. OpenGl is the default when
+                                     building Gnash, although the
+                                     quality of AGG's rendering is
+                                     currently superior to OpenGL.
+`--enable-sdk-install'               Enable installing the libraries and
+                                     headers as an SDK.
+`--disable-shared'                   Enable installing the shared
+                                     libraries and headers.  Note that
+                                     the extensions mechanism may not
+                                     work if shared libraries are
+                                     disabled.
+`--enable-strict'                    Turn verbose GCC compiler warnings.
+                                     By default only `-Wall' is used
+                                     with GCC.
+`--enable-fps-debug'                 Enable FPS debugging code. When
+                                     this feature is compiled in you can
+                                     use the -f switch of Gnash to have
+                                     FPS printed at regular intervals.
+`--enable-write'                     Makes the Mozilla plugin write the
+                                     currently playing SWF movie to
+                                     `/tmp'.
+`--disable-mit-shm'                  Disable support for the MIT-SHM X
+                                     extensions.  Currently support is
+                                     only available using GTK gui and
+                                     AGG renderer.  Keeping it enabled
+                                     is not a problem as it will not be
+                                     used if not available in the
+                                     current X session.
+
+
+File: gnash_ref.info,  Node: Specifying Custom Paths,  Prev: Features,  Up: 
Configuring Gnash
+
+2.6.2 Specifying Custom Paths
+-----------------------------
+
+By default, none of these options should be required unless you want
+Gnash to use a specific version of a development package, or if the
+configure test fails to find a component.  Please [Cross reference to
+non-existant ID "bugreport"] if a configure test fails.
+
+   The following custom path options are available:
+
+*Custom Path Options*
+
+Option                               Function
+`--x-includes=DIR'                    X include files are in DIR.
+`--x-libraries=DIR'                   X library files are in DIR.
+`--with-libxml=PFX'                   Prefix to where libxml is
+                                     installed.
+`--with-libxml-libraries=DIR'         Directory where libxml library is
+                                     installed.
+`--with-libxml-includes=DIR'          Directory where libxml header
+                                     files are installed.
+`--with-docbook=DIR'                  Directory where the DocBook
+                                     style-sheets are installed.
+`--with-sdl-prefix=PFX'               Prefix where SDL is installed.
+`--with-zlib-incl'                    Directory where zlib header is
+                                     installed.
+`--with-zlib-lib'                     Directory where zlib library is
+                                     installed.
+`--with-jpeg-incl'                    Directory where jpeg header is
+                                     installed.
+`--with-jpeg-lib'                     Directory where jpeg library is
+                                     installed.
+`--with-png-incl'                     Directory where png header is
+                                     installed.
+`--with-png-lib'                      Directory where png library is
+                                     installed.
+`--with-qt-dir'                       Directory where QT is installed.
+                                     This is only used by the Klash
+                                     plugin.
+`--with-qt-includes'                  Directory where the QT header
+                                     files are installed. This is only
+                                     used by the Klash plugin.
+`--with-qt-libraries'                 Directory where the QT libraries
+                                     are installed. This is only used by
+                                     the Klash plugin.
+`--with-npapi-plugindir'              This is the directory to install
+                                     the NPAPI (Mozilla) plugin in.  By
+                                     default it goes to
+                                     ~/.mozilla/plugins.
+`--with-kde-pluginprefix'             This option sets the default
+                                     install dir for all KPARTS (kde)
+                                     files.  The plugin will be
+                                     installed in PREFIX/lib/kde3, use
+                                     `-with-kde-plugindir' to override.
+                                     The service file in
+                                     PREFIX/share/services, use
+                                     `--with-kde-servicesdir' to
+                                     override. The config file in
+                                     PREFIX/share/config, use
+                                     `--with-kde-configdir' to override.
+                                     The appdata file in
+                                     PREFIX/share/apps/klash, use
+                                     `--with-kde-appsdatadir' to
+                                     override.
+`--with-kde-plugindir'                This is the directory to install
+                                     the KPARTS (kde) plugin in.  By
+                                     default it is what's set by
+                                     -with-kde-pluginprefix or what's
+                                     returned by kde-config -install
+                                     module -expandvars, or
+                                     $(prefix)/share/services if
+                                     kde-config is not found.
+`--with-kde-servicesdir'              This is the directory to install
+                                     the KPARTS (kde) service in.  By
+                                     default it is what's set by
+                                     -with-kde-pluginprefix or what's
+                                     returned by kde-config -install
+                                     services -expandvars, or
+                                     $(libdir)/kde3 if kde-config is not
+                                     found.
+`--with-kde-configdir'                This is the directory to install
+                                     the KPARTS (kde) config files in.
+                                     By default it is what's set by
+                                     -with-kde-pluginprefix or what's
+                                     returned by kde-config -install
+                                     config -expandvars, or
+                                     $(prefix)/share/config if
+                                     kde-config is not found.
+`--with-kde-appsdatadir'              This is the directory to install
+                                     the KPARTS (kde) application data
+                                     files in.  By default it is what's
+                                     set by -with-kde-pluginprefix or
+                                     what's returned by kde-config
+                                     -install data -expandvars, or
+                                     $(prefix)/share/apps if kde-config
+                                     is not found.
+`--with-ming'                         Ming is used to build test cases,
+                                     but not by the Gnash player itself.
+`--with-ogg_incl'                     Directory where the libogg headers
+                                     are installed.
+`--with-ogg_lib'                      Directory where the libogg library
+                                     is installed.
+`--with-gstreamer-incl'               Directory where the Gstreamer
+                                     headers are installed. Gstreamer
+                                     version 0.10 or greater must be
+                                     used.
+`--with-gstreamer-lib'                Directory where the Gstreamer
+                                     library is installed. Gstreamer
+                                     version 0.10 or greater must be
+                                     used.
+`--with-opengl-includes'              Directory where OpenGL (libMesa)
+                                     headers are installed.
+`--with-opengl-lib'                   Directory where the OpenGL
+                                     (libMesa) library is installed.
+`--with-glext-incl'                   Directory where GtkGlExt headers
+                                     are installed.
+`--with-glext-lib'                    Directory where the GtkGlExt
+                                     library is installed.
+`--with-gtk2-incl'                    Directory where the Gtk2 headers
+                                     are installed.
+`--with-gtk2-lib'                     Directory where the Gtk2 library
+                                     is installed.
+`--with-cairo_incl'                   Directory where the Cairo headers
+                                     are installed.
+`--with-cairo-lib'                    Directory where the Cairo library
+                                     is installed.
+`--with-glib-incl'                    Directory where the Glib headers
+                                     are installed.
+`--with-glib-lib'                     Directory where the Glib library
+                                     is installed.
+`--with-pango-incl'                   Directory where the Pango headers
+                                     are installed.
+`--with-pango-lib'                    Directory where the Pango library
+                                     is installed.
+`--with-atk-incl'                     Directory where the ATK headers
+                                     are installed.
+`--with-atk-lib'                      Directory where the ATK library is
+                                     installed.
+`--with-pthread-incl'                 Directory where the Pthread
+                                     headers are installed.
+`--with-pthread-lib'                  Directory where the Pthread
+                                     library is installed.
+`--with-agg-incl'                     Directory where the AGG
+                                     (Antigrain) headers are installed.
+`--with-agg-lib'                      Directory where the AGG
+                                     (Antigrain) library is installed.
+`--with-ffmpeg-incl'                  Directory where the FFMPEG headers
+                                     are installed.
+`--with-ffmpeg-lib'                   Directory where the FFMPEG library
+                                     is installed.
+`--with-boost-incl'                   Directory where the Boost headers
+                                     are installed.
+`--with-boost-lib'                    Directory where the Boost library
+                                     is installed.
+`--with-curl-incl'                    Directory where the libCurl
+                                     headers are installed.
+`--with-curl-lib'                     Directory where the libCurl
+                                     library is installed.
+
+   Once you have [Cross reference to non-existant ID
+"pre-configuration"] Gnash, you are ready to build the code.  Gnash is
+built using _GNU make_.
+
+* Menu:
+
+* Overview::
+* Getting The Source::
+* Code Dependencies::
+* Testing Dependencies::
+* Documentation Dependencies::
+* Configuring Gnash::
+* Compiling the Code::
+* Creating the Documentation::
+* Running the Tests::
+
+
+File: gnash_ref.info,  Node: Compiling the Code,  Next: Creating the 
Documentation,  Up: Building from Source
+
+2.7 Compiling the Code
+======================
+
+The most basic way to compile code is simply:
+
+
+       make
+
+If the compilation ends with an error, check the output of _configure_
+and ensure that you are not missing any required prerequisites.  The
+output of `make' can be verbose; you may wish to pipe the output to a
+file.
+
+   The variables used by _make_ can be redefined when the program is
+invoked, if you desire it.   The most interesting flags are _CFLAGS_
+and _CXXFLAGS_, which are often used to enable debugging or turn of
+optimization.  The default value for both of these variables is _-O2
+-g_.  A list of influential environment variables can be seen in the
+configuration help:
+
+     ./configure --help
+
+   In the following example, debugging is enabled and optimization is
+disabled:
+
+     make CFLAGS=-g CXXFLAGS=-g
+
+
+File: gnash_ref.info,  Node: Creating the Documentation,  Next: Running the 
Tests,  Prev: Compiling the Code,  Up: Building from Source
+
+2.8 Creating the Documentation
+==============================
+
+By default, documentation is not built when you install (*note
+Installation::) Gnash.  This is because there are a number of [Cross
+reference to non-existant ID "docdepend"].  Documentation is built when
+it is specified with a specific target in the generated `Makefile' in
+the `doc/C' sub-directory.  If you type `make install' in this
+directory, all documents will be built.
+
+   You must specify a target output format when you wish to create
+documentation.  The available output formats are: `html', `pdf', `info',
+`man', and `alldocs'.  It is also possible to output `GNOME help' if
+the [Cross reference to non-existant ID "features"] `--enable-ghelp'
+was used.  The `alldocs' target will build all output formats except
+_GNOME help_.  For example, to create HTML output, type:
+
+
+       make html
+
+   Gnash also uses Doxygen
+(http://www.stack.nl/~dimitri/doxygen/index.html) to produce _HTML_
+documentation of Gnash internals.  You must have Doxygen installed to
+produce this documentation, which is built from the `doc' directory
+with the command (documents will be placed in the subdirectory
+`apidoc/html'):
+
+
+       make apidoc
+
+
+File: gnash_ref.info,  Node: Running the Tests,  Prev: Creating the 
Documentation,  Up: Building from Source
+
+2.9 Running the Tests
+=====================
+
+Before beginning the potentially lengthy install, it is wise to test
+the installation.  If a test fails, please report it by following the
+[Cross reference to non-existant ID "bugreport"].
+
+* Menu:
+
+* Using DejaGnu::
+* Running The Tests Manually::
+* Installation::
+* Cross Configuring::
+
+
+File: gnash_ref.info,  Node: Using DejaGnu,  Next: Running The Tests Manually, 
 Up: Running the Tests
+
+2.9.1 Using DejaGnu
+-------------------
+
+The easiest way to run Gnash's test suite is to install _DejaGnu
+(http://www.gnu.org/software/dejagnu)_.  After installing DejaGnu, run:
+
+
+         make check
+
+* Menu:
+
+* Increasing Verbosity::
+* Running Some Tests::
+
+
+File: gnash_ref.info,  Node: Increasing Verbosity,  Next: Running Some Tests,  
Up: Using DejaGnu
+
+2.9.1.1 Increasing Verbosity
+............................
+
+If you encounter a problem with a test, increasing the verbosity may
+make the issue easier to spot.  Additional details are visible when
+_RUNTESTFLAGS_ are used to add the _verbose_ and _all_ options.  The
+`verbose' option prints more information about the testing process,
+while the `all' option includes details on passing tests.
+
+
+           make check RUNTESTFLAGS="-v -a"
+
+
+File: gnash_ref.info,  Node: Running Some Tests,  Prev: Increasing Verbosity,  
Up: Using DejaGnu
+
+2.9.1.2 Running Some Tests
+..........................
+
+It is possible to run just a single test, or a subdirectory of tests,
+by specifying the directory or compiled test file.
+
+   Some tests rely on _testsuite/Dejagnu.swf_, which in turn relies on
+_Ming_.  This file is created when you run `make check' for the entire
+testsuite, and can also be created on demand:
+
+
+           make -C testsuite Dejagnu.swf
+
+   In this example, the `clip_as_button2' test is compiled and run:
+
+
+           make -C testsuite/samples clip_as_button2-TestRunner
+           cd testsuite/samples && ./clip_as_button2-TestRunner
+
+This creates and runs all the tests in the directory `movies.all':
+
+
+           make -C testsuite/movies.all check
+
+
+File: gnash_ref.info,  Node: Running The Tests Manually,  Next: Installation,  
Prev: Using DejaGnu,  Up: Running the Tests
+
+2.9.2 Running The Tests Manually
+--------------------------------
+
+You may also run test cases by hand, which can be useful if you want to
+see all the debugging output from the test case.  Often the messages
+which come from deep within Gnash are most useful for development.
+
+   The first step is to compile the test case, which can be done with
+`make XML-v#.swf' where the '#' is replaced with the _target_ SWF
+version or versions.  For example:
+
+
+         make XML-v{5,6,7,8}.swf
+
+* Menu:
+
+* Movie tests::
+* ActionScript Unit Tests::
+
+
+File: gnash_ref.info,  Node: Movie tests,  Next: ActionScript Unit Tests,  Up: 
Running The Tests Manually
+
+2.9.2.1 Movie tests
+...................
+
+This creates a Flash movie version of the test case, which can be run
+with a standalone Flash player.  For instance, the target for SWF
+version 6 could be run with Gnash:
+
+
+           gnash -v XML-v6.swf
+
+
+File: gnash_ref.info,  Node: ActionScript Unit Tests,  Prev: Movie tests,  Up: 
Running The Tests Manually
+
+2.9.2.2 ActionScript Unit Tests
+...............................
+
+Unit tests for ActionScript classes in `testsuite/actionscript.all' are
+run without a graphical display:
+
+
+           gprocessor -v XML-v6.swf
+
+
+File: gnash_ref.info,  Node: Installation,  Next: Cross Configuring,  Prev: 
Running The Tests Manually,  Up: Running the Tests
+
+2.9.3 Installation
+------------------
+
+Now that Gnash has been compiled and tested, use the following command
+to install it:
+
+
+           make install
+
+The above command installs the standalone player.  If the correct files
+were found by `configure' and if the `--disable-plugin' option was not
+specified, the Gnash browser plugin is also installed.
+
+   Gnash installs a number of libraries (*note Libraries::), namely:
+_libbase_, _libgeometry_, _libbackend_, _libserver_, and _libmozsdk_.
+Executables (*note Executables::) consist of the (optional) plugin,
+`gprocessor', `cygnal',  and `gnash'.  Documentation (*note
+Documentation::) may also be installed.  The installation location is
+controlled with the _-prefix_ configure option (*note Specifying Custom
+Paths::), except for plugins, which are explicitly set with
+_-plugin-dir_.
+
+   Note that if you are using a single file-system _NFS_ mounted to
+multiple platforms, the configuration option (*note Specifying Custom
+Paths::) _-exec-prefix_ may be used to specify where platform-dependent
+executables and libraries are installed.
+
+* Menu:
+
+* Libraries::
+* Executables::
+* Documentation::
+
+
+File: gnash_ref.info,  Node: Libraries,  Next: Executables,  Up: Installation
+
+2.9.3.1 Libraries
+.................
+
+Installed libraries are located in `/usr/local/lib' by default.  If the
+_-prefix_ option was used in [Cross reference to non-existant ID
+"pre-configuration"], the libraries will be installed in the directory
+`lib' inside the path you specified.  If the libraries are stored in a
+non-standard location, you must identify the path in one of two ways.
+
+   The traditional way to do this on UNIX platforms is to set the
+_LD_LIBRARY_PATH_ variable to the path plus `/lib'.  For example, if you
+installed in `/home/gnash', the _LD_LIBRARY_PATH_ path would be
+`/home/gnash/lib'.  Multiple paths are delimited with a colon (':').
+
+   GNU/Linux allows the custom path to be added to `/etc/ld.so.conf'.
+After adding the path, run _ldconfig_ as root to update the runtime
+cache.
+
+
+File: gnash_ref.info,  Node: Executables,  Next: Documentation,  Prev: 
Libraries,  Up: Installation
+
+2.9.3.2 Executables
+...................
+
+The Mozilla plugin is built from headers (the Mozilla SDK) provided
+with Gnash and does not need extra development packages to be
+installed. By default, the plugin is installed to
+`~/.mozilla/plugins/'. To enable the plugin for other users, copy the
+file `libgnashplugin.so' to `.mozilla/plugins/' in their home directory.
+You may also specify the plugin installation directory by using the
+`--with-plugindir' option at configuration time (*note Specifying
+Custom Paths::).
+
+   These defaults are likely to change in future versions of Gnash.
+
+   The remaining executables are installed in the `bin' subdirectory of
+the directory specified by during configuration.  If no path was
+specified, the default is `/usr/local/bin'.
+
+
+File: gnash_ref.info,  Node: Documentation,  Prev: Executables,  Up: 
Installation
+
+2.9.3.3 Documentation
+.....................
+
+Documentation is not built by default; please refer to the section on
+documentation (*note Creating the Documentation::) for more information
+on building documentation.
+
+   `man' and `info' are installed in `/usr/local/share/man' and
+`/usr/local/share/info' respectively, unless the `--mandir' or
+`--infodir' configuration options (*note Specifying Custom Paths::) are
+used.
+
+   _GNOME help_ documentation uses the directory
+`/usr/local/share/gnash/doc/gnash/C/' by default.  A configuration file
+in the Gnash source tree, `doc/C/gnash.omf' is used to specify under
+which menu item Gnash appears in the _GNOME help_ system.
+
+
+File: gnash_ref.info,  Node: Cross Configuring,  Prev: Installation,  Up: 
Running the Tests
+
+2.9.4 Cross Configuring
+-----------------------
+
+To cross configure and compile Gnash, begin by building a target system
+on your workstation.  This includes cross compilers for the target
+architecture, and some system headers.  You will also need to cross
+compile all the [Cross reference to non-existant ID "docdepend"]
+normally needed to build Gnash. This can on occasion be a daunting
+process, as not libraries will cross configure and cross compile. There
+is more information about cross compiling all the dependant packages on
+the http://www.gnashdev.org (http://www.gnashdev.org) web site.
+
+   If you need to build your own tool chain, that is beyond the scope
+of this manual. There are various resources on the web for howto's on
+building GCC based cross toolchains. Two popular sites are
+http://frank.harvard.edu/~coldwell/toolchain/
+(http://frank.harvard.edu/~coldwell/toolchain/) and
+http://www.kegel.com/crosstool/ (http://www.kegel.com/crosstool/). This
+can also be a very time consuming and frustrating process, even for
+experienced developers.
+
+   Because the process of building your own cross tool chain can be
+harder than one may wish, there are several other cross development
+environments that simulate a native environment to make it easier to
+develop. These also let you develop for both native and cross builds.
+Several popular ones are Access Linux Platform
+(http://www.access-company.com/products/linux/alp.html), Scratchbox
+(http://www.scratchbox.org/), Open Embedded
+(http://www.openembedded.org/), Maemo (http://maemo.org/).
+
+   To build for an ARM based system on an x86 based systems, configure
+like this using the traditional style cross toolchain, configure like
+this:
+
+
+         ../../gnash/configure --build=i686-pc-linux-gnu
+         --host=arm-linux --prefix=/usr/local/arm/oe --disable-nsapi
+         --disable-kparts --enable-gui=fb --enable-renderer=agg
+         --disable-shared --disable-menus
+
+   The important configuration options are the ones which specify the
+architecture for the build:
+
+-target
+     The target architecture, where the final executables are expected
+     to run.
+
+-host
+     The host architecture, where the executables are expected to run.
+     Usually this is the same as the _-target_, except when building a
+     compiler as a Canadian Cross.  In this case, you might build a
+     cross compiler on a UNIX system which runs on a win32 machine,
+     producing code for a third architecture, such as ARM.  In this
+     example, _-target_ would be 'arm-unknown-linux-gnu', while _-host_
+     would be 'win32'.
+
+-build
+     This is the system the build is running on.
+
+   The following example of _configure_ builds for an ARM system on an
+x86 system.  It was run after an ARM system was built in `/usr/arm' and
+other required libraries were cross compiled.
+
+
+           ./configure -target=arm-unknown-linux-gnu --prefix=/usr/arm \
+           --host=arm-unknown-linux-gnu --build=i686-pc-linux-gnu 
--disable-plugin
+
+
+File: gnash_ref.info,  Node: Software Internals,  Next: Gnash Extensions,  
Prev: Building from Source,  Up: Top
+
+3 Software Internals
+********************
+
+* Menu:
+
+* A Tour of Gnash::
+* Sound handling in Gnash::
+* Testing : Testing.
+* Adding New ActionScript Class::
+
+
+File: gnash_ref.info,  Node: A Tour of Gnash,  Next: Sound handling in Gnash,  
Up: Software Internals
+
+3.1 A Tour of Gnash
+===================
+
+The top level of Gnash has several libraries, _libgnashbase_,
+_libgnashgeo_, _libgnashserver_, _libgnashasobjs_ and
+_libgnashbackend_. There are several utility programs included for
+debug parsing and processing of Flash movie files, and other useful
+utilitis for examining local Shared Objects and sniffingh
+LocalConnections.
+
+* Menu:
+
+* The Libraries::
+* The Applications::
+* The Plugin::
+* The Debug Logging System::
+
+
+File: gnash_ref.info,  Node: The Libraries,  Next: The Applications,  Up: A 
Tour of Gnash
+
+3.1.1 The Libraries
+-------------------
+
+* Menu:
+
+* libgnashbase::
+* libgnashgeo::
+* libgnashgui::
+* libgnashserver::
+* libgnashasobjs::
+* libgnashamf::
+* libgnashbackend::
+* libgnashplugin::
+* libklashpart::
+
+
+File: gnash_ref.info,  Node: libgnashbase,  Next: libgnashgeo,  Up: The 
Libraries
+
+3.1.1.1 libgnashbase
+....................
+
+Libgnashbase contains support classes used by the rest of the code.This
+library has no dependencies on any of the other Gnash libraries.
+
+   Gnash makes heavy use of smart pointers, so memory allocations are
+freed up automatically by the interpreter. Both STL and Boost smart
+pointers are used.
+
+
+File: gnash_ref.info,  Node: libgnashgeo,  Next: libgnashgui,  Prev: 
libgnashbase,  Up: The Libraries
+
+3.1.1.2 libgnashgeo
+...................
+
+Libgnashgeo contains code for device independent graphics routines.
+
+
+File: gnash_ref.info,  Node: libgnashgui,  Next: libgnashserver,  Prev: 
libgnashgeo,  Up: The Libraries
+
+3.1.1.3 libgnashgui
+...................
+
+Libgnashgui contains code for a portable GUI class that supports using
+GTK2, a framebuffer, SDL, or KDE, FLTK, or Aqua.
+
+
+File: gnash_ref.info,  Node: libgnashserver,  Next: libgnashasobjs,  Prev: 
libgnashgui,  Up: The Libraries
+
+3.1.1.4 libgnashserver
+......................
+
+Libgnashserver is the guts of the interpreter itself. This is where the
+main code for the interpreter lives. Includes in libserver are the two
+support libraries for the parser and the core of the virtual machine.
+
+
+File: gnash_ref.info,  Node: libgnashasobjs,  Next: libgnashamf,  Prev: 
libgnashserver,  Up: The Libraries
+
+3.1.1.5 libgnashasobjs
+......................
+
+Libgnashasobjs contains all the ActionScript classes used by the
+interpreter.
+
+
+File: gnash_ref.info,  Node: libgnashamf,  Next: libgnashbackend,  Prev: 
libgnashasobjs,  Up: The Libraries
+
+3.1.1.6 libgnashamf
+...................
+
+AMF is the data format used internally by SWF files. This is Gnash's
+support library to handle AMF data. This is used by the ActionScript
+classes SharedObject and LocalConnection. This is also used by the
+NetStream class when using thre RTMP streaming network protocol.
+
+
+File: gnash_ref.info,  Node: libgnashbackend,  Next: libgnashplugin,  Prev: 
libgnashamf,  Up: The Libraries
+
+3.1.1.7 libgnashbackend
+.......................
+
+Libgnashbackend is a library containing the rendering code that glues
+this display to the Gnash. Supported rendering backends are OpenGL,
+Cairo, and AGG.
+
+
+File: gnash_ref.info,  Node: libgnashplugin,  Next: libklashpart,  Prev: 
libgnashbackend,  Up: The Libraries
+
+3.1.1.8 libgnashplugin
+......................
+
+Libgnashplugin is the Mozilla/Firefox plugin.
+
+
+File: gnash_ref.info,  Node: libklashpart,  Prev: libgnashplugin,  Up: The 
Libraries
+
+3.1.1.9 libklashpart
+....................
+
+Libklashpart is the Konqueror plugin.
+
+
+File: gnash_ref.info,  Node: The Applications,  Next: The Plugin,  Prev: The 
Libraries,  Up: A Tour of Gnash
+
+3.1.2 The Applications
+----------------------
+
+There are currently a few standalone programs in Gnash, which serve to
+either assist with Gnash development or play flash movies.
+
+* Menu:
+
+* The Standalone Player::
+* Gprocesser::
+* SOLdumper::
+* Dumpshm::
+
+
+File: gnash_ref.info,  Node: The Standalone Player,  Next: Gprocesser,  Up: 
The Applications
+
+3.1.2.1 The Standalone Player
+.............................
+
+This is the standalone OpenGL back-end used to play movies. There are
+several command-line options and keyboard control keys used by Gnash.
+
+
+File: gnash_ref.info,  Node: Gprocesser,  Next: SOLdumper,  Prev: The 
Standalone Player,  Up: The Applications
+
+3.1.2.2 Gprocesser
+..................
+
+Gprocesser is used to print out the actions (using the -va option) or
+the parsing (using the -vp option) of a flash movie. It is also used to
+produce the _.gsc_ files that Gnash uses to cache data, thereby
+speeding up the loading of files.
+
+
+File: gnash_ref.info,  Node: SOLdumper,  Next: Dumpshm,  Prev: Gprocesser,  
Up: The Applications
+
+3.1.2.3 SOLdumper
+.................
+
+SOLDumper is a utility program used to find and dump the content of
+_Local Shared Objects_, also called "Flash Cookies" by some.
+
+
+File: gnash_ref.info,  Node: Dumpshm,  Prev: SOLdumper,  Up: The Applications
+
+3.1.2.4 Dumpshm
+...............
+
+Dumpshm is a program used to find and dump the contents of the
+_LocalConnection_ shared memory segment.
+
+
+File: gnash_ref.info,  Node: The Plugin,  Next: The Debug Logging System,  
Prev: The Applications,  Up: A Tour of Gnash
+
+3.1.3 The Plugin
+----------------
+
+The plugin is designed to work within Mozilla or Firefox, although
+there is Konqueror support as well. The plugin uses the Mozilla NSAPI
+plugin API to be cross platform, and is portable, as well as being well
+integrated into Mozilla based browsers.
+
+* Menu:
+
+* Current Status::
+* GUI Support::
+* Mozplugger::
+* Klash::
+
+
+File: gnash_ref.info,  Node: Current Status,  Next: GUI Support,  Up: The 
Plugin
+
+3.1.3.1 Current Status
+......................
+
+As of March 30, 2006, the plugin works! This works in a fashion similar
+to MozPlugger in that the standalone player is used instead of using a
+thread. This gets around the issue of having to maintain a separate
+player to support the plugin. It also gets around the other issues that
+Gnash itself is not thread safe at this time.
+
+   As of Jan, 2007, streaming video, ala "YouTube" works, along with
+other video sharing sites.
+
+
+File: gnash_ref.info,  Node: GUI Support,  Next: Mozplugger,  Prev: Current 
Status,  Up: The Plugin
+
+3.1.3.2 GUI Support
+...................
+
+Any plugin that wants to display in a browser window needs to be tied
+into the windowing system of the platform being used. On GNU/Linux
+systems, Firefox is a GTK2+ application.  There is also KDE support
+through the use of the Klash plugin.
+
+   Gnash can use either several different GUI toolkits to create the
+window, and to handle events for the standalone player.
+
+   The SDL version is more limited, but runs on all platforms,
+including win32. It has no support for event handling, which means
+mouse clicks, keyboard presses, and window resizing doesn't work. I
+personally find the default event handler slow and unresponsive. Gnash
+has support to use fast events, (currently not enabled) which is an SDL
+hack using a background thread to pump events into the SDL event queue
+at a much higher rate.
+
+   There are a variety of development libraries that build a GUI widget
+system on top of SDL and OpenGL. The use of these to add menus and
+dialog boxes to the SDL version is being considered.
+
+   The GTK support is currently the most functional, and the best
+integrated into Firefox. The performance of this version is better than
+the SDL version because of the more efficient event handling within
+GTK. For the best end user experience, use the GTK enabled version.
+
+   GTK also allows Gnash to have menus and dialog boxes. Currently this
+is only being utilized in a limited fashion for now. There is a right
+mouse button menu that allows the user to control the movie being
+player the same way the existing keyboard commands do.
+
+
+File: gnash_ref.info,  Node: Mozplugger,  Next: Klash,  Prev: GUI Support,  
Up: The Plugin
+
+3.1.3.3 Mozplugger
+..................
+
+Mozplugger (http://mozplugger.mozdev.org/) is a _Mozilla/Firefox_
+plugin that uses external programs to play video, audio, and other
+multimedia content in the browser. With some support added to the
+external application, it's possible to force the external program to
+use the internal window in the browser where this plugin is supposed to
+display. This enables one to then run the standalone player and display
+its output in the browser.
+
+   While this is not an optimal solution, it does enable one to use
+Gnash as the flash player when browsing. The main issue appears to be
+that the Flash movie being played doesn't get any mouse or keyboard
+input. That may be a mozplugger configuration issue, however.
+
+   Use of MozPlugger is obsolete now that the Gnash plugin works.
+Still, this may be useful still on some platforms.
+
+   Add this to your _$(HOME)/.mozilla/mozpluggerrc_ file to enable this:
+
+
+           application/x-shockwave-flash:swf:Shockwave Gnash
+             nokill embed noisy ignore_errors hidden fill swallow(Gnash) loop: 
gnash -v "$file" -x $window
+             : gnash -v "$file" -x $window
+
+   Once this is added, you must delete the
+_$(HOME)/.mozilla/firefox/pluginreg.dat_ file to force Firefox to
+register the plugins again. This is an ASCII text file, so if the patch
+has been added correctly, you'll see an entry for _swf_ files after it
+is recreated. You will need to restart Firefox to recreate this file.
+
+   This file is not recreated immediately when restarting Firefox, but
+waits till the first time a plugin is used. You can force creation of
+this file by typing _about:plugins_ into the URL entry of the browser
+window. The output will also contain information about the mozplugger.
+You should see an entry for Gnash now.
+
+
+File: gnash_ref.info,  Node: Klash,  Prev: Mozplugger,  Up: The Plugin
+
+3.1.3.4 Klash
+.............
+
+Klash is MozPlugger type support for KDE's Konqueror web browser. Klash
+makes Gnash a _kpart_, so it's integrated into KDE better than when
+using MozPlugger. Klash uses the standalone player, utilizing Gnash's
+"-x" window plugin command line option.
+
+   By default, Klash is not built. To enable building Klash, use the
+_-enable-klash_ option when configuring. Other than installing, there
+is nothing else that needs to be done to install Klash.
+
+
+File: gnash_ref.info,  Node: The Debug Logging System,  Prev: The Plugin,  Up: 
A Tour of Gnash
+
+3.1.4 The Debug Logging System
+------------------------------
+
+Gnash supports a debug logging system which supports both C and C++
+natively. This means you can use both _printf()_ style debug messages
+and C++ _iostreams_ style, where you can print C++ objects directly as
+you would when using _cout_.
+
+   In the beginning, Gnash only supported the C API for debug logging,
+so it is the most heavily used in Gnash. This API was used in the
+_log_msg()_ and _log_error()_ functions, and used a callback to set
+them up.
+
+   If a filename is not specified at object construction time, a
+default name of _gnash-dbg.log_ is used. If Gnash is started from the
+command line, the debug log will be created in the current directory.
+When executing Gnash from a launcher under _GNOME_ or _KDE_ the debug
+file goes in your home directory, since that's considered the current
+directory.
+
+   There is common functionality between using the C or C++ API.
+Optional output is based on flags that can be set or unset. Multiple
+levels of verbosity are supported, so you can get more output by
+supplying multiple _-v_ options on the command line. You can also
+disable the creation of the debug log.
+
+   Currently the use of the C++ API for logging is discouraged, do to
+performance issues.and the generic log_msg() has been replaced by more
+spcific function calls to allow more control of what gets displayed and
+logged.
+
+* Menu:
+
+* Logging System C API::
+* Logging System C++ API::
+
+
+File: gnash_ref.info,  Node: Logging System C API,  Next: Logging System C++ 
API,  Up: The Debug Logging System
+
+3.1.4.1 Logging System C API
+............................
+
+These functions are clones of the originals as they were used for
+Gnash. These function the same as always except output can be logged to
+disk now as well. These currently print no timestamp with the output,
+which is the older functionality. As these functions are implemented on
+top of the C++ API now, they can be used without corrupting the output
+buffers.
+
+log_error(const char* fmt, ...)
+     Display an error message if verbose output is enabled. By default
+     the error messages are always written to the disk file, but
+     optionally displayed in the terminal.
+
+void log_unimpl
+     Displays a warning to the user about missing Gnash features.  We
+     expect all calls to this function to disappear over time, as we
+     implement those features of Flash.
+
+void log_trace
+     Used only for explicit user traces
+
+void log_debug
+     Logs debug information.
+
+void log_action
+     Log action execution information. Wrap all calls to this function
+     (and other related statements) into an IF_VERBOSE_ACTION macro, so
+     to allow completely removing all the overhead at compile time and
+     reduce it at runtime.
+
+void log_parse
+     Log SWF parsing  Wrap all calls to this function (and other
+     related statements) into an IF_VERBOSE_PARSE macro, so to allow
+     completely removing all the overhead at compile time and reduce it
+     at runtime.
+
+void log_security
+     Display a message with security related information.
+
+void log_swferror
+     This indicates an error in how the binary SWF file was
+     constructed, i.e.probably a bug in the tools used to build the SWF
+     file. Wrap all calls to this function (and other related
+     statements) into an IF_VERBOSE_MALFORMED_SWF macro, so to allow
+     completely removing all the overhead at compile time and reduce it
+     at runtime.
+
+log_warning(const char* fmt, ...)
+     Display a warning message if verbose output is enabled. By default
+     the error messages are always written to the disk file, but
+     optionally displayed in the terminal.
+
+
+File: gnash_ref.info,  Node: Logging System C++ API,  Prev: Logging System C 
API,  Up: The Debug Logging System
+
+3.1.4.2 Logging System C++ API
+..............................
+
+This is the new C++ streams based API that can be used to print C++
+objects natively. All output lines are timestamped.
+
+   There are two macros used for program tracing. these can be used in
+both C or C++ code with one little difference. Since C doesn't have
+destructors, you must call _GNASH_REPORT_RETURN_ at the end of a
+function to display the function returning message.
+
+GNASH_REPORT_FUNCTION;
+     When this is included in a C++ method, a message is printed when
+     entering and exiting this method by hooking into the constructor
+     and destructor. These are always written to the disk file, but
+     optionally written to the screen only at the highest levels of
+     verbosity.
+
+GNASH_REPORT_RETURN;
+     This is used by C functions to print the returning from function
+     debug message. For C++, this macro is executed automatically by
+     the destructor.
+
+   This is the main API for the logging system. By default everything
+is setup to write to the default _gnash-dbg.log_ file whenever a
+verbose option is supplied. Optionally it is possible to open a log
+file with a specified name, allowing multiple output files.
+
+closeLog(void)
+     Close a debug log. The disk file remains.
+
+removeLog(void)
+     Delete the debug log file from disk.
+
+setVerbosity(void)
+     Increment the verbosity level.
+
+setVerbosity(int)
+     Set the verbosity level.
+
+setStamp(bool flag)
+     If _flag_ is _true_, then print a timestamp prefixed to every
+     output line. If _flag_ is _false_, then don't print a timestamp.
+
+setWriteDisk(bool flag)
+     If _flag_ is _true_, then create the disk file. If _flag_ is
+     _false_, then don't create the disk file.
+
+
+File: gnash_ref.info,  Node: Sound handling in Gnash,  Next: Testing,  Prev: A 
Tour of Gnash,  Up: Software Internals
+
+3.2 Sound handling in Gnash
+===========================
+
+When a SWF-file contains audio Gnash uses its sound handlers to play it.
+At the moment there are two sound handlers, but it is likely that more
+will be made.
+
+   There are two different settings related to sound support: _[Cross
+reference to non-existant ID "pluginsound"]_ and _[Cross reference to
+non-existant ID "standalonesound"]_.  This was done in order to allow
+the plugin to be independently configured, for instance to block sound
+from advertisements.
+
+* Menu:
+
+* Sound types::
+* Sound parsing::
+* Sound playback::
+* The SDL sound backend::
+* The Gstreamer backend::
+* Future audio backends::
+* Detailed description of the Gstreamer backend::
+
+
+File: gnash_ref.info,  Node: Sound types,  Next: Sound parsing,  Up: Sound 
handling in Gnash
+
+3.2.1 Sound types
+-----------------
+
+Sounds can be divided into two groups: event-sounds and soundstreams.
+Event-sounds are contained in a single SWF frame, but the playtime can
+span multiple frames. Soundstreams can be (and normally are) divided
+between the SWF frames the soundstreams spans. This means that if a
+gotoframe-action jumps to a frame which contains data for a soundstream,
+playback of the stream can be picked up from there.
+
+
+File: gnash_ref.info,  Node: Sound parsing,  Next: Sound playback,  Prev: 
Sound types,  Up: Sound handling in Gnash
+
+3.2.2 Sound parsing
+-------------------
+
+When Gnash parses a SWF-file, it creates a sound handler if possible
+and hands over the sounds to it. Since the event-sounds are contained
+in one frame, the entire event-sound is retrieved at once, while a
+soundstream maybe not be completely retrieved before the entire
+SWF-file has been parsed. But since the entire soundstream doesn't need
+to be present when playback starts, it is not necessary to wait.
+
+
+File: gnash_ref.info,  Node: Sound playback,  Next: The SDL sound backend,  
Prev: Sound parsing,  Up: Sound handling in Gnash
+
+3.2.3 Sound playback
+--------------------
+
+When a sound is about to be played Gnash calls the sound handler, which
+then starts to play the sound and return. All the playing is done by
+threads (in both SDL and Gstreamer), so once started the audio and
+graphics are not sync'ed with each other, which means that we have to
+trust both the graphic backend and the audio backend to play at correct
+speed.
+
+
+File: gnash_ref.info,  Node: The SDL sound backend,  Next: The Gstreamer 
backend,  Prev: Sound playback,  Up: Sound handling in Gnash
+
+3.2.4 The SDL sound backend
+---------------------------
+
+The current SDL sound backend has replaced the original sound handler,
+based on SDL_mixer, which by design had some limitations, making it
+difficult to implement needed features such as support for soundstreams.
+The SDL sound backend supports both event-sounds and soundstreams,
+using Gnash's internal ADPCM, and optionally MP3 support, using either
+FFMPEG or LIBMAD.  When it receives sound data it is stored without
+being decoded, unless it is ADPCM, which is decoded in the parser. When
+playing, backend relies on a function callback for retrieving output
+sound, which is decoded and re-sampled if needed, and all sound output
+is mixed together.  The current SDL sound backend was made since Gnash
+needed a working sound backend as soon as possible, and since the
+gstreamer backend at the time suffered from bugs and/or lack of
+features in gstreamer. The result was the most complete and best sound
+handler so far.  The advantages of the SDL sound handler is speed, and
+ease of use, while its only real disadvantage is that it has to be
+compiled with MP3 support, which some Linux distributions will probably
+not like...
+
+
+File: gnash_ref.info,  Node: The Gstreamer backend,  Next: Future audio 
backends,  Prev: The SDL sound backend,  Up: Sound handling in Gnash
+
+3.2.5 The Gstreamer backend
+---------------------------
+
+The Gstreamer backend, though not complete, supports both soundstreams
+and event-sounds. When receiving sound data it stores it compressed,
+unless if it's ADPCM event-sounds, which it decodes by the parser.
+When the playback starts, the backend sets up a Gstreamer bin
+containing a decoder (and other things needed) and places it in a
+Gstreamer pipeline, which plays the audio. All the sound data is not
+passed at once, but in small chunks, and via callbacks the pipeline
+gets fed. The advantages of the Gstreamer backend is that it supports
+both kinds of sound, it avoids all the legal MP3-stuff, and it should
+be relatively easy to add VORBIS support. The drawbacks are that it has
+longer "reply delay" when starting the playback of a sound, and it
+suffers under some bugs in Gstreamer that are yet to be fixed.
+
+
+File: gnash_ref.info,  Node: Future audio backends,  Next: Detailed 
description of the Gstreamer backend,  Prev: The Gstreamer backend,  Up: Sound 
handling in Gnash
+
+3.2.6 Future audio backends
+---------------------------
+
+It would probably be desirable to make more backends in the future,
+either because other and better backend systems are brought to our
+attention, or perhaps because an internal sound handling is better
+suited for embedded platform with limited software installed.
+
+
+File: gnash_ref.info,  Node: Detailed description of the Gstreamer backend,  
Prev: Future audio backends,  Up: Sound handling in Gnash
+
+3.2.7 Detailed description of the Gstreamer backend
+---------------------------------------------------
+
+Gstreamer uses pipelines, bins and elements. Pipelines are the main
+bin, where all other bins or elements are places. Visually the audio
+pipeline in Gnash looks like this:
+
+
+        ___
+       |Bin|_
+       |___| \
+        ___   \ _____       ____________
+       |Bin|___|Adder|_____|Audio output|
+       |___|   |_____|     |____________|
+        ___   /
+       |Bin|_/
+       |___|
+
+   There is one bin for each sound which is being played. If a sound is
+played more the once at the same time, multiple bins will be made. The
+bins contains:
+
+
+
+       
|source|---|capsfilter|---|decoder|---|aconverter|---|aresampler|---|volume|
+
+   In the source element we place parts of the undecoded sound data, and
+when playing the pipeline will pull the data from the element. Via
+callbacks it is refilled if needed. In the capsfilter the data is
+labeled with the format of the data. The decoder (surprise!) decodes
+the data. The audioconverter converts the now raw sound data into a
+format accepted by the adder, all input to the adder must in the same
+format. The audio re-sampler re-samples the raw sound data into a sample
+accepted by the adder, all input to the adder must in the same sample
+rate. The volume element makes it possible to control the volume of
+each sound.
+
+   When a sound is done being played it emits a End-Of-Stream-signal
+(EOS), which is caught by an event-handler-callback, which then makes
+sure that the bin in question is removed from the pipeline. When a
+sound is told by Gnash to stop playback before it has ended playback,
+we do something (not yet finally implemented), which makes the bin emit
+an EOS, and the event-handler-callback will remove the sound from the
+pipeline. Unfortunately Gstreamer currently has a bug which causes the
+entire pipeline to stop playing when unlinking an element from the
+pipeline; so far no fix is known.
+
+   Gstreamer also contains a bug concerning linking multiple elements to
+the adder in rapid succession, which causes to adder to "die" and stop
+the playback.
+
+
+File: gnash_ref.info,  Node: Testing,  Next: Adding New ActionScript Class,  
Prev: Sound handling in Gnash,  Up: Software Internals
+
+3.3 Testing
+===========
+
+Instructions on running tests (*note Running the Tests::) can be found
+in the section on building Gnash.
+
+* Menu:
+
+* Testing Tools::
+* Test Cases::
+* Writing ActionScript Tests::
+* Writing Ming-based self-contained SWF tests::
+* Writing self-contained SWF tests with other compilers::
+* Writing Test Runners::
+
+
+File: gnash_ref.info,  Node: Testing Tools,  Next: Test Cases,  Up: Testing
+
+3.3.1 Testing Tools
+-------------------
+
+Currently Gnash uses three other tools to help with testing. Two of
+these are free compilers for the Flash format. This lets us write
+simple test cases for Gnash to test specific features, and to see how
+the features operate.
+
+   The primary compiler used at this time is Ming (http://ming.sf.net).
+Since release 0.3, _Ming_ includes a command-line compiler, _makeswf_.
+This allows test case development to be done entirely with free tools.
+
+   The other tools are optional.  DejaGnu
+(http://www.gnu.org/software/dejagnu) is used to run multiple test
+cases in an automated manner. _DejaGnu_ is used by many other GNU
+(http://www.gnu.org) projects like GCC (http://gcc.gnu.org) and Samba
+(http://www.samba.org).
+
+
+File: gnash_ref.info,  Node: Test Cases,  Next: Writing ActionScript Tests,  
Prev: Testing Tools,  Up: Testing
+
+3.3.2 Test Cases
+----------------
+
+ActionScript test cases are located under testsuite/actionscript.all/;
+these are organized in one file for the ActionScript class.  Other
+Ming-generated tests are under testsuite/ming-misc.all/; these are
+typically used to test specific tag types.  Full movies are located in
+testsuite/movies.all/ and sample movies are found in testsuite/samples/.
+Other directories in testsuite/ are (or shall be) used for other kind
+of tests.
+
+
+File: gnash_ref.info,  Node: Writing ActionScript Tests,  Next: Writing 
Ming-based self-contained SWF tests,  Prev: Test Cases,  Up: Testing
+
+3.3.3 Writing ActionScript Tests
+--------------------------------
+
+Writing ActionScript tests is very simple. The _makeswf_ compiler makes
+use of the C preprocessor, thus allowing the inclusion of definitions
+for macros and external files. We use these feature to provide common
+utilities for test units.
+
+   Each test unit sets an _rcsid_ variable, includes the _check.as_
+file and performs some checks using the provided macros. Here is an
+example:
+
+
+
+         // This variable will be used by check.as
+         // to show testcase info as part of the test runs.
+         rcsid="Name and version of this testcase, usually the RCS id";
+
+         #include "check.as"
+
+         // Test object creation
+         check(new Object() instanceOf Object);
+
+         // Test parseInt
+         check(isNaN(parseInt('none')));
+
+         // Test assignment
+         var a = 1;
+         check_equals(a, 1);
+
+         // .. your tests here ...
+
+   The check(expr) macro will _trace_ PASSED or FAILED together with
+the expression being evaluated and the line number of the check. This
+is the format expected by DejaGnu.
+
+   The _check_equals(obtained, expected)_ macro uses equality operator
+_==_ to check for equality. When possible, use of the _check_equals()_
+macro is preferred over _check()_ because it shows what the actual
+result was in case of a failure.
+
+   Additionally, the check.as file provides a transparent way to send
+results to a TextField rather then using trace. This is very useful
+when you use a flash player without tracing support.
+
+   Test units are built by running _make TestName-v#.swf_.  This will
+use TestName.as as source and the value of # as target version.
+Allowed target version are from 5 to 8 (inclusive).
+
+   Note that if you get a syntax error from the compiler, the line
+number will refer to the pre-processed file. This file is called
+_TestName.as.pp_ or _TestName-v#.swf.frame#.pp_ (depending on Ming
+version) and it's not thrown away by _makeswf_ to make debugging easier.
+
+   Sometimes an expression is only supported by a specific SWF version,
+or it's evaluated differently by different SWF versions.  For this
+purpose the framework provides an OUTPUT_VERSION macro that you can use
+to switch code based on output version. For example:
+
+
+
+         #if OUTPUT_VERSION >= 7
+         check(_root.getSWFVersion == OUTPUT_VERSION);
+         #endif
+
+
+File: gnash_ref.info,  Node: Writing Ming-based self-contained SWF tests,  
Next: Writing self-contained SWF tests with other compilers,  Prev: Writing 
ActionScript Tests,  Up: Testing
+
+3.3.4 Writing Ming-based self-contained SWF tests
+-------------------------------------------------
+
+Ming-based test cases are located in testsuite/misc-ming.all and
+contain a test generator and a test runner.  The test generator
+(usually a C program) is used to produce the SWF file, while the test
+runner (a C++ program) will run it using a MovieTester class.  Note
+that only the test generator needs Ming, not the test runner, so if
+Ming isn't installed on the user's host, the test cases can still be
+run as long as SWF has been distributed.
+
+   Producing tests using Ming has the advantage that you can easily see
+and modify the full source code for the SWF movie, and you can use some
+facilities (*note Using Ming-based test generators facilities::)
+provided by the Gnash testing framework to easily run tests.
+
+   For generic Ming API documentation, see http://www.libming.org
+(http://www.libming.org/).
+
+* Menu:
+
+* Using Ming-based test generators facilities::
+
+
+File: gnash_ref.info,  Node: Using Ming-based test generators facilities,  Up: 
Writing Ming-based self-contained SWF tests
+
+3.3.4.1 Using Ming-based test generators facilities
+...................................................
+
+Ming-based test generator facilities, which might be moved into a
+loadable SWF in the future, can be currently used by your test
+generator by including the ming_utils.h file and calling the
+appropriate functions.
+
+   The most useful facility provided for Ming-based SWF test generators
+is a Dejagnu-like TestState ActionScript class.  In order to use this
+facility you must call 'add_dejagnu_functions()' right after Movie
+creation.  The function takes an SWFMovie object and some parameters
+specifying depth and location of the "visual" trace textfield; it
+instantiates a global 'TestState' ActionScript object to keep track of
+test's state.
+
+   You will _not_ need to directly invoke the TestState object created
+by the 'add_dejagnu_functions()' routine, rather you will be using C
+macros hiding its complexity:
+
+
+
+       check(SWFMovie mo, const char* expr)
+
+               Evaluate an ActionScript expression.
+
+       xcheck(SWFMovie mo, const char* expr)
+
+               Evaluate an ActionScript expression.
+               A failure is expected
+               (for cases where the call exposes a known bug).
+
+       check_equals(SWFMovie mo, const char* obtained, const char* expected)
+
+               Evaluate an ActionScript expression against an expected output.
+
+       xcheck_equals(SWFMovie mo, const char* obtained, const char* expected)
+
+               Evaluate an ActionScript expression against an expected output.
+               A failure is expected (for cases where the call exposes a known 
bug).
+
+       print_tests_summary(SWFMovie mo)
+
+                     This will print a summary of tests run, and should be
+               called as the last step in your SWF generator.
+
+   Test cases generated using Ming and the provided facilities (*note
+Using Ming-based test generators facilities::) will be self-contained,
+which means they can be used as tests by simply running them with
+whatever Player you might have.  Any 'check' or 'check_equals' result
+will be both traced and printed in a textfield. You can use 'gprocessor
+-v' to have Gnash use them as tests.
+
+   See section Writing Test Runners (*note Writing Test Runners::) for
+information about writing SWF test runners.
+
+
+File: gnash_ref.info,  Node: Writing self-contained SWF tests with other 
compilers,  Next: Writing Test Runners,  Prev: Writing Ming-based 
self-contained SWF tests,  Up: Testing
+
+3.3.5 Writing self-contained SWF tests with other compilers
+-----------------------------------------------------------
+
+If you want/need to use a different compiler for your test cases
+(there's plenty of open source tools for generating SWF out there), you
+can still make use of a loadable SWF utility provided as part of the
+Gnash testsuite to let your test consistent with the rest of the suite.
+
+   The loadable module is called Dejagnu.swf and is built during make
+check under testsuite/misc-ming.all. In order to use it you will need
+to load it into your SWF. We currently load it with an IMPORT tag for
+our ActionScript based test cases, but you can probably also use
+loadMovie or whatever works in the target SWF you're generating. Just
+make sure that the module is initialized before using it. You can check
+this by inspecting the dejagnu_module_initialized variable, which will
+be set to 'true' when all initialization actions contained in the
+Dejagnu.swf file are executed.
+
+   Once the module is loaded you will be able to invoke the following
+functions, all registered against the _root sprite (effects of _lockroot
+untested):
+
+
+
+       check(expression, [message]);
+
+               Evaluate the expression.
+               Trace result (PASSED: expression / FAILED: expression).
+               If fails, *visually* trace the failure.
+               If second argument is given, it will be used instead of
+               'expression' for printing results.
+
+       check_equals(obtained, expected)
+
+               Evaluate an expression against an expected output.
+               Trace result (PASSED: obtained == expected / FAILED: expected 
X, obtained Y)
+               If fails, *visually* trace the failure.
+
+       xcheck(expression, [message]);
+
+               Evaluate the expression.
+               Trace result (XPASSED: expression / XFAILED: expression).
+               If fails, *visually* trace the failure.
+               If second argument is given, it will be used instead of
+               'expression' for printing results.
+
+       xcheck_equals(obtained, expected)
+
+               Evaluate an expression against an expected output.
+               Trace result (XPASSED: obtained == expected / XFAILED: expected 
X, obtained Y)
+               If fails, *visually* trace the failure.
+
+       note(string)
+
+               Print string, both as debugging and *visual* trace.
+
+       totals()
+
+                     Print a summary of tests run, both as debugging and 
*visual* traces.
+
+   Visual traces are lines of text pushed to a textarea defined by the
+Dejagnu.swf module.  The textarea is initially placed at 0, 50 and is
+600x800 in size.  You can resize/move the clip after loading it.  Also,
+you can completely make the clip invisible if that bothers you. The
+important thing is the *debuggin* trace (call to the trace function).
+The latter will be used by the testing framework.
+
+   See section Writing Test Runners (*note Writing Test Runners::) for
+information about writing a test runners for your self-contained tests.
+
+
+File: gnash_ref.info,  Node: Writing Test Runners,  Prev: Writing 
self-contained SWF tests with other compilers,  Up: Testing
+
+3.3.6 Writing Test Runners
+--------------------------
+
+Test runners are executables that run one or more tests, writing
+results in Dejagnu form to standard output.
+
+   The Dejagnu form uses a standard set of labels when printing test
+results.  These are:
+
+Label                                Meaning
+PASSED                               The test succeeded.
+FAILED                               The test failed.
+XPASSED                              The test succeeded, but was
+                                     expected to fail.
+XFAILED                              The test failed, and was expected
+                                     to fail.
+UNRESOLVED                           The results of the test could not
+                                     be automatically parsed.
+UNTESTED                             This test case is not complete.
+UNSUPPORTED                          The test case relies on a
+                                     conditional feature which is not
+                                     present in your environment.
+
+   The following labels may also appear:
+
+Label                                Meaning
+ERROR                                There was a serious error in
+                                     running the test.
+WARNING                              There may have been a problem with
+                                     running the test.
+NOTE                                 There was some additional
+                                     information given about the test.
+
+* Menu:
+
+* Using the generic test runner for self-contained SWF tests::
+* Writing Movie testers::
+
+
+File: gnash_ref.info,  Node: Using the generic test runner for self-contained 
SWF tests,  Next: Writing Movie testers,  Up: Writing Test Runners
+
+3.3.6.1 Using the generic test runner for self-contained SWF tests
+..................................................................
+
+The simplest test runner is one that simply invokes Gnash in verbose
+mode against a self-contained SWF test movie.  Self-contained SWF test
+movies are the ones that print the PASSED/FAILED etc. lines using
+ActionScript (traces).  By invoking Gnash in verbose mode this movie
+will behave as a compliant "Test Runner".
+
+   A generator for simple test runners can be found in
+testsuite/generic-testrunner.sh.  The script can be invoked by passing
+it $(top_builddir) as the first argument and the name of the SWF file
+(without the path) as the second argument. This will create a specific
+runner for your test in the current build directory.  A simple
+Makefile.am rule for doing this follows:
+
+
+     MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+             sh $(srcdir)/../generic-testrunner.sh $(top_builddir) MyTest.swf 
> $@
+             chmod +x $@
+
+   By default, the generated test runner will play the movie up to the
+last frame. If you want the movie to be played more then once (maybe
+because you're exactly testing loop features) you can use the -r switch
+to the generic-testrunner.sh call. The following will create a runner
+playing the movie twice:
+
+
+     MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+             sh $(srcdir)/../generic-testrunner.sh -r2 $(top_builddir) 
MyTest.swf > $@
+             chmod +x $@
+
+   In case your test movie stops before the last frame, or you want to
+control the exact number of times to call the frame advancement
+routine, you can use the -f switch to control that.
+
+
+     MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+             sh $(srcdir)/../generic-testrunner.sh -f10 $(top_builddir) 
MyTest.swf > $@
+             chmod +x $@
+
+When both -f and -r are given, the first exit condition reached will
+take effect.
+
+
+File: gnash_ref.info,  Node: Writing Movie testers,  Prev: Using the generic 
test runner for self-contained SWF tests,  Up: Writing Test Runners
+
+3.3.6.2 Writing Movie testers
+.............................
+
+There are some parts of Gnash that can NOT be tested by only using
+ActionScript tests. Examples include: frame advancements, actual
+actions execution, gui events and so on.
+
+   In this case you might want to use the MovieTester class to
+implement a C++ test runner. Be aware that you can *mix* tests in the
+MovieTester-based class with *self-contained* tests in the SWF file as
+long as you activate verbosity for the debug logfile. This is done, for
+example, for the DefineEditTextVariableNameTest.swf file. The
+corresponding test runner (DefineEditTextVariableNameTest-Runner) is a
+C++ runner based on MovieTester class. If you run the runner you see
+two kinds of test results: the ones coming from the ActionScript
+engine, and the ones coming from the test runner. You can distinguish
+between the two because the former contains an additional timestamp and
+the latter does not. Also, you'll see two final summaries for the two
+test sets. The 'make check' rule, which uses the testsuite/simple.exp
+output parser as its work-horse, will count test results from both test
+sets.
+
+   Movie testers are executables which load an SWF, generate events
+(both user or system) on it, and check its state using a standard
+interface.
+
+   To help this process a MovieTester class is defined in the
+testsuite/MovieTester.{h,cpp} files; see Doxygen documentation for more
+information.
+
+   Note that you do NOT need access to the SWF source code in order to
+implement a Movie tester for it.  Some knowledge about the expected
+behavior suffices.
+
+
+File: gnash_ref.info,  Node: Adding New ActionScript Class,  Prev: Testing,  
Up: Software Internals
+
+3.4 Adding New ActionScript Class
+=================================
+
+In this document, the term 'ActionScript class' refers to the C++ class
+which is instantiated by Gnash when some ActionScript code instantiates
+a corresponding class.  The C++ class stores instance data and
+implements the methods which are called on the object in the
+ActionScript code.
+
+   Adding a new ActionScript class is relatively simple, but the
+process is complicated by the fact that the interface has evolved over
+time and the current code base represents several different formats.
+This document describes the current interface.  The Boolean class
+should be considered the authoritative example of a modern ActionScript
+class.
+
+   ActionScript classes contain a header file and a C++ implementation.
+The name is usually the name of the class as it is called in the
+ActionScript specifications; for instance _Boolean.cpp_ for the Boolean
+class.
+
+* Menu:
+
+* Prototype::
+* Declaration::
+* Instantiation::
+* Methods::
+* Dynamic Properties::
+* The as_value Object Type::
+* Object ActionScript Class::
+
+
+File: gnash_ref.info,  Node: Prototype,  Next: Declaration,  Up: Adding New 
ActionScript Class
+
+3.4.1 Prototype
+---------------
+
+In ActionScript, a prototype is a base object which contains all the
+methods that an instantiated object will contain.  In short, it
+contains every part of the class except for the portions dealing with
+the storage of instance data.
+
+   In Gnash, the prototype of an ActionScript object is implemented as
+an _as_object_.  At startup, the methods and properties of the
+ActionScript class are attached to the _as_object_.  The following
+example demonstrates how methods can be attached:
+
+
+       static void
+       attachBooleanInterface(as_object& o) {
+         o.init_member("toString", new builtin_function(boolean_tostring));
+         o.init_member("valueOf", new builtin_function(boolean_valueof));
+       }
+
+   Static properties can also be added to the ActionScript prototype
+(dynamic properties (*note Dynamic Properties::) are addressed later).
+They are attached in a similar way:
+
+
+       o.init_member("myProperty", as_value("HelloWorld"));
+
+   Properties which have been added in this manner can be directly
+accessed in ActionScript code without a function call, as this piece of
+ActionScript code compiled by Ming's _makeswf_ compiler demonstrates:
+
+
+       // Get the value of the myProperty property
+       if (node.myProperty == "HelloWorld") {
+         trace("MATCHED");
+       }
+
+
+File: gnash_ref.info,  Node: Declaration,  Next: Instantiation,  Prev: 
Prototype,  Up: Adding New ActionScript Class
+
+3.4.2 Declaration
+-----------------
+
+A new class should derive from _as_object_, which is the base class of
+every ActionScript object in Gnash.
+
+
+File: gnash_ref.info,  Node: Instantiation,  Next: Methods,  Prev: 
Declaration,  Up: Adding New ActionScript Class
+
+3.4.3 Instantiation
+-------------------
+
+When a new object is needed, instance data is added to the methods and
+properties inherited from the prototype.
+
+   The init method should be called in the constructor in _Global.cpp_,
+where all other ActionScript classes are similarly referenced. This
+method constructs a prototype, which is implemented as an _as_object_.
+In addition, the method registers the constructor to be used for future
+object creation, and attaches methods and properties to the prototype.
+
+
+File: gnash_ref.info,  Node: Methods,  Next: Dynamic Properties,  Prev: 
Instantiation,  Up: Adding New ActionScript Class
+
+3.4.4 Methods
+-------------
+
+Every method you implement and attach (*note Prototype::) will receive
+an _fn_call_ data structure as an argument when it is called.
+
+* Menu:
+
+* Accessing Arguments::
+* Returning a Value to ActionScript::
+* Additional fn_call Members::
+
+
+File: gnash_ref.info,  Node: Accessing Arguments,  Next: Returning a Value to 
ActionScript,  Up: Methods
+
+3.4.4.1 Accessing Arguments
+...........................
+
+The arguments stored in _fn_call_ should be accessed using _arg()_.  For
+instance, the first element can be popped with _fn.arg(0)_.
+
+   The element popped off the stack is an _as_value_ object (*note The
+as_value Object Type::).
+
+
+File: gnash_ref.info,  Node: Returning a Value to ActionScript,  Next: 
Additional fn_call Members,  Prev: Accessing Arguments,  Up: Methods
+
+3.4.4.2 Returning a Value to ActionScript
+.........................................
+
+The return value should be an _as_value_ object (*note The as_value
+Object Type::).  For example:
+
+
+         return as_value('Goodbye, cruel world.');
+
+
+File: gnash_ref.info,  Node: Additional fn_call Members,  Prev: Returning a 
Value to ActionScript,  Up: Methods
+
+3.4.4.3 Additional fn_call Members
+..................................
+
+There are two other useful members of the _fn_call_ structure, namely
+_this_ptr_ and _nargs_.  The former points to the class which is
+invoking this method, while the latter is a count of the number of
+arguments in the stack (*note Accessing Arguments::).
+
+   You may also see instances of the _env_ pointer being used.   This
+is being deprecated.  Instances which could be replaced with _arg()_
+(*note Accessing Arguments::) are already deprecated; other uses will
+be deprecated in the near future.
+
+   Beyond the _arg() (*note Accessing Arguments::)_ method, there is
+one method of note.  _dump_args()_ can be used in debugging to output
+the entire argument stack.
+
+
+File: gnash_ref.info,  Node: Dynamic Properties,  Next: The as_value Object 
Type,  Prev: Methods,  Up: Adding New ActionScript Class
+
+3.4.5 Dynamic Properties
+------------------------
+
+This section describes accessors to dynamic properties.  Read-only
+properties are described in the prototype (*note Prototype::) section.
+
+   Accessors should be written as a single get/set method.  Previously
+this was done by overriding _get_member()_ and _set_member()_, but this
+practice is deprecated.
+
+   The accessor is written so that it sets the property if it is called
+with an argument, and puts the property in the _fn_call_ (*note
+Methods::) result pointer (*note Returning a Value to ActionScript::).
+For instance:
+
+
+       void
+       MyClass::myProperty_getset(const fn_call& fn) {
+         boost::intrusive_ptr<MyClass> ptr = ensureType<MyClass>(fn.this_ptr);
+
+         // setter
+         if ( fn.nargs > 0 ) {
+           bool h = fn.arg(0).to_bool();
+           ptr->MyMethod(h);
+           return;
+          }
+
+         // getter
+         bool h = ptr->MyMethod();
+         fn.result->set_bool(h);
+       }
+
+   It has not yet been decided whether properties should be set in the
+exported interface (*note Prototype::) or attached to instances of the
+class.  A property is attached in the following manner:
+
+
+       boost::intrusive_ptr<builtin_function> gettersetter;
+       gettersetter = new builtin_function(&MyClass::myProperty_getset, NULL);
+       o.init_property("myProperty", *gettersetter, *gettersetter);
+
+
+File: gnash_ref.info,  Node: The as_value Object Type,  Next: Object 
ActionScript Class,  Prev: Dynamic Properties,  Up: Adding New ActionScript 
Class
+
+3.4.6 The as_value Object Type
+------------------------------
+
+The _as_value_ class is used throughout the interpreter to create
+generic objects to hold data.
+
+* Menu:
+
+* Data Types::
+* Determining the Type::
+* Fetching the Value::
+* Setting the Value and Type::
+* Further Reading::
+
+
+File: gnash_ref.info,  Node: Data Types,  Next: Determining the Type,  Up: The 
as_value Object Type
+
+3.4.6.1 Data Types
+..................
+
+The following data types are supported: _NULLTYPE_, _BOOLEAN_, _STRING_,
+_NUMBER_, _OBJECT_, _AS_FUNCTION_, and _MOVIECLIP_ (sprite).  The type
+_C_FUNCTION_ is being deprecated.
+
+
+File: gnash_ref.info,  Node: Determining the Type,  Next: Fetching the Value,  
Prev: Data Types,  Up: The as_value Object Type
+
+3.4.6.2 Determining the Type
+............................
+
+Several methods allow you to determine if a value stored in _as_value_
+is of a specific type.  These follow the form of _is_TYPE_, for example
+_is_as_function()_ and _is_number()_.  In general, the type names match
+the data types (*note Data Types::) listed above, with the exception of
+the type _MOVIECLIP_ which has a method _is_sprite()_.
+
+
+File: gnash_ref.info,  Node: Fetching the Value,  Next: Setting the Value and 
Type,  Prev: Determining the Type,  Up: The as_value Object Type
+
+3.4.6.3 Fetching the Value
+..........................
+
+Another set of methods will return a representation of the value as a
+particular type.  They follow the _to_TYPE_ naming convention.  Examples
+are _to_number()_ and _to_bool()_.  The type names are as listed (*note
+Data Types::) earlier, except for _MOVIECLIP_, which uses _to_sprite()_.
+
+
+File: gnash_ref.info,  Node: Setting the Value and Type,  Next: Further 
Reading,  Prev: Fetching the Value,  Up: The as_value Object Type
+
+3.4.6.4 Setting the Value and Type
+..................................
+
+Finally, there is the _set_TYPE_ series of methods.  They change the
+type to the type specified in the method name, and set the value to the
+one given as an argument.  It is also possible to accomplish the same
+thing with the _=_ operator.  Again, type names match those named
+earlier (*note Data Types::), except in the case of _MOVIECLASS_.  Its
+method is called _set_sprite()_.
+
+
+File: gnash_ref.info,  Node: Further Reading,  Prev: Setting the Value and 
Type,  Up: The as_value Object Type
+
+3.4.6.5 Further Reading
+.......................
+
+Please refer to _as_value.h_ or the Doxygen documentation (see
+'Processing The Documentation' in the Gnash manual for instructions on
+generating documents with Doxygen) for more information about which
+methods are available for the _as_value_ object.
+
+
+File: gnash_ref.info,  Node: Object ActionScript Class,  Prev: The as_value 
Object Type,  Up: Adding New ActionScript Class
+
+3.4.7 Object ActionScript Class
+-------------------------------
+
+This class implements an Object object.
+
+* Menu:
+
+* The Methods of the Class::
+* The Properties of the Object Class::
+* Object Class Conformance::
+
+
+File: gnash_ref.info,  Node: The Methods of the Class,  Next: The Properties 
of the Object Class,  Up: Object ActionScript Class
+
+3.4.7.1 The Methods of the Class
+................................
+
+addProperty()
+
+registerClass()
+
+toString()
+
+unwatch()
+
+valueOf()
+
+watch()
+
+Sharedclear()
+
+Sharedflush()
+
+SharedgetLocal()
+
+SharedgetSize()
+
+
+File: gnash_ref.info,  Node: The Properties of the Object Class,  Next: Object 
Class Conformance,  Prev: The Methods of the Class,  Up: Object ActionScript 
Class
+
+3.4.7.2 The Properties of the Object Class
+..........................................
+
+constructor
+
+__proto__
+
+__resolve
+
+Shareddata
+
+SharedonStatus
+
+
+File: gnash_ref.info,  Node: Object Class Conformance,  Prev: The Properties 
of the Object Class,  Up: Object ActionScript Class
+
+3.4.7.3 Object Class Conformance
+................................
+
+Class Name                           Conformance
+addProperty()                         This method has an unknown status.
+registerClass()                       This method has an unknown status.
+toString()                            This method has an unknown status.
+unwatch()                             This method has an unknown status.
+valueOf()                             This method has an unknown status.
+watch()                               This method has an unknown status.
+Sharedclear()                         This method has an unknown status.
+Sharedflush()                         This method has an unknown status.
+SharedgetLocal()                      This method has an unknown status.
+SharedgetSize()                       This method has an unknown status.
+constructor                           This property has an unknown
+                                     status.
+__proto__                             This property has an unknown
+                                     status.
+__resolve                             This property has an unknown
+                                     status.
+Shareddata                            This property has an unknown
+                                     status.
+SharedonStatus                        This property has an unknown
+                                     status.
+
+
+File: gnash_ref.info,  Node: Gnash Extensions,  Next: RTMP Protocol,  Prev: 
Software Internals,  Up: Top
+
+4 Gnash Extensions
+******************
+
+Gnash supports extending the Flash specification by creating custom
+ActionScript classes that are compiled code, as opposed to the existing
+method of defining custom classes as ActionScript. Executing compiled
+code has many performance benefits over having to interpret the byte
+stream of the ActionScript opcodes.
+
+   I can already hear people complaining now about the concept of
+extending Flash, so this in no way affects Gnash's ability to play
+Flash movies when functioning as a browser plugin.  Gnash's goal is
+still to function in a way that is compatible with the current
+proprietary Flash player.
+
+   But at the same time, we see Flash as the ideal scripting language
+for a digital multi-media streaming environment. There are many
+resources for Flash movie creators for widgets, higher level APIs, all
+sorts of desirable things. But for those of use committed to using free
+software tools for Flash, our options are very limited.
+
+   Rather than launching a multi-year project to duplicate all classes
+in the commercial Flash IDE, it's much more efficient to use existing
+development libraries much like Python or Perl do. The extension
+mechanism in Gnash allows wrappers to be created for any C or C++
+development library. Unlike the proprietary Flash IDE, which compiles
+all the extension libraries into byte codes from ActionScript, the
+support is moved to the player side. Movies with all of the goodies of
+the proprietary IDE in them play in Gnash just fine, as it's all just
+byte codes by then.
+
+   This trick works because until Flash player version 9, all the
+ActionScript class names and methods are passed as ASCII strings into
+the Flash movie. So the Gnash Virtual Machine just loads the extension
+file if that class name is invoked in the movie. All extension files
+specify the class name and methods it implements in an identical style
+as adding any new ActionScript class. The advantage is the class itself
+is compiled code, and runs much faster than the equivalent byte codes
+which all have to be interpreted..
+
+* Menu:
+
+* Creating A New Extension::
+* Debugging An Extension::
+* Included Extensions::
+
+
+File: gnash_ref.info,  Node: Creating A New Extension,  Next: Debugging An 
Extension,  Up: Gnash Extensions
+
+4.1 Creating A New Extension
+============================
+
+Each new extension should live in it's own directory. The extensions
+included in Gnash are all in the gnash/extensions directory. Creating
+an extension requires a Makefile.am,
+
+   If you are adding this extension to the Gnash source tree itself,
+then you need to make two changes to add the new extension.
+
+   The first change is to add the directory to the list in
+extensions/Makefile.am. This can be done either by adding the new
+directory to the SUBDIRS setting, or by wrapping it in a conditional
+test.
+
+   The other change is to add it to the AC_OUTPUT list in
+_configure.ac_ so the new directory will be configured along with the
+rest of Gnash.
+
+   Each extension should have an ActionScript source file included that
+tests the new class, and this file should be referenced in the new
+Makefile.am in the _check_PROGRAMS_ variable so that "make check" works.
+
+   When creating an extension that is a wrapper for an existing
+development library API, it's often better to make this a thin layer,
+than to get carried away with creating beautiful abstractions.
+Higher-level classes that offer a lot of new functionality are fine,
+but is different than wrapping a library so it can be used from within
+Gnash.
+
+* Menu:
+
+* Crafting an Extension::
+
+
+File: gnash_ref.info,  Node: Crafting an Extension,  Up: Creating A New 
Extension
+
+4.1.1 Crafting an Extension
+---------------------------
+
+All extensions have the same requirements, namely setting up a few
+defined function callbacks, which the Gnash VM then uses to do the
+right thing. The initial two function callbacks are for handling the
+interface of the newly created object so that Gnash can find and use it.
+
+   The first function is commonly called _attachInterface_, and this
+sets the other function callbacks for all the methods this class
+supports. The method callbacks are attached to the parent class by
+using _init_member()_ to set a C function pointer to the string value
+used in the Flash movie.
+
+
+       // Attach DummyClass 'func1' and 'func2' methods to the given object
+       static void
+       attachInterface(as_object& obj) {
+                 obj.init_member("func1", &ext_func1);
+                 obj.init_member("func2", &ext_func2);
+       }
+
+   The second function is commonly called _getInterface()_, and this
+returns a pointer to a static prototype of the class.  Gnash uses
+garbage collection for ActionScript objects so you need to register the
+static with the VM to give it a chance to be marked as reachable.
+
+
+       static as_object*
+       getInterface()
+       {
+           static boost::intrusive_ptr<as_object> o;
+           if (o == NULL) {
+               o = new as_object();
+                     VM::get().addStatic(o);
+                     attachInterface(*o);
+           }
+           return o.get();
+       }
+
+   This is the callback that gets executed when constructing a new
+object for the VM. In this example we'll assume the new ActionScript
+class is called _DummyExt_, and has two methods, _func1_ and _func2_.
+
+
+       static as_value
+       dummyext_ctor(const fn_call& fn)
+       {
+           DummyExt *obj = new DummyExt(); // will setup prototypes
+
+           return as_value(obj);
+       }
+
+   The trick for the above simple constructor to work is that class
+appartenence is setup in the C++ DummyExt constructor itself, which
+should derive from as_object and construct the base passing it the
+interface (prototype) of it's class.
+
+
+       class DummyExt : public as_object
+             {
+             public:
+           DummyExt()
+                     :
+                     as_object(getInterface()) // returns the static prototype
+                 {}
+
+       };
+
+   Initialize the extension. This is looked for by the extension
+handling code in each extension, and is executed when the extension is
+loaded. This is the main entry point into the extension. This function
+can be found because the prefix of _dummyext_, which also matches the
+file name of the extension. Gnash uses the name of the extension file
+itself when looking for the init function.
+
+
+             extern "C" {
+           void
+           dummyext_class_init(as_object &obj)
+           {
+               static builtin_function* cl=NULL;
+               if (!cl)
+                     {
+                         // Create a builtin function using the given 
constructor
+                         // to instanciate objects and exporting the given 
interface
+                   cl = new builtin_function(&dummyext_ctor, getInterface());
+                   VM::get().addStatic(cl); // will forbid to collect the class
+               }
+
+               obj.init_member("DummyExt", cl);
+           }
+             } // end of extern C
+
+   The callbacks are all C functions. Like all the other code that
+implements ActionScript, parameters to the function are passed in using
+the _fn_call_ data structure. The return code, if any, is also returned
+using this data structure. _this_ptr_ is the object that the method is
+a member of.
+
+
+       // Creates a new button with the label as the text.
+       as_value func1(const fn_call& fn) {
+                 // Following line will ensure 'func1' is called for a 
DummyExt instance,
+                 // or would throw an exception which should behave as if we 
returned the
+                 // undefined value.
+                 boost::intrusive_ptr<DummyExt> ptr = 
ensureType<DummyExt>(fn.this_ptr);
+
+           if (fn.nargs > 0) {
+               std::string label = fn.arg(0).to_string();
+               bool ret = ptr->dummy_text_label(label);
+               return as_value(ret);
+           }
+       }
+
+
+File: gnash_ref.info,  Node: Debugging An Extension,  Next: Included 
Extensions,  Prev: Creating A New Extension,  Up: Gnash Extensions
+
+4.2 Debugging An Extension
+==========================
+
+As extensions are loaded dynamically at runtime, debugging one can be
+difficult. You can use GDB, but you have the problem of not being able
+to set a breakpoint in Gnash until _after_ the extension has been
+loaded into Gnash's VM. The easy solution is to use the Gnash debugger.
+
+   You can insert these few lines in any file that you wish to manually
+start the debugger. Once at the console, you can attach GDB to the
+process. Then you can set breakpoints, etc... and you are at the point
+of execution where the console was started. To then continue playing
+the movie, type the _c_ (for continue) command to the Gnash console.
+
+
+           // Get the debugger instance
+           static Debugger& debugger = Debugger::getDefaultInstance();
+
+           // Enable the debugger
+           debugger.enabled(true);
+           // Stop and drop into a console
+           debugger.console();
+
+   You can also resort to the time honored technique of creating a loop
+before the point you want to set a breakpoint for. Gnash will stop
+playing the movie at this point, and then you can externally attach GDB
+to the running process, or type _^C_ to drop into the GDB command
+console.
+
+
+           bool stall = true;
+           while (stall) {
+               sleep 1;
+           }
+
+   Once you have set the breakpoints you want, reset the value of the
+_stall_ variable to break out of the loop, and the Flash movie will
+then continue playing.
+
+
+           (gdb) set variable stall = false;
+           continue
+
+
+File: gnash_ref.info,  Node: Included Extensions,  Prev: Debugging An 
Extension,  Up: Gnash Extensions
+
+4.3 Included Extensions
+=======================
+
+Gnash has some extensions included in the distribution. This is mostly
+because they were written by the Gnash team. Extensions can be external
+to gnash, Gnash needs no compiled in knowledge to load an extension
+file.
+
+* Menu:
+
+* Gtk Extension::
+* File I/O Extension::
+* MySQL Extension::
+
+
+File: gnash_ref.info,  Node: Gtk Extension,  Next: File I/O Extension,  Up: 
Included Extensions
+
+4.3.1 Gtk Extension
+-------------------
+
+The GTK ActionScript class follows the same API as Gtk2, even down to
+the same arguments to the same function names. This means you're
+actually programming GTK,you're just using ActionScript instead of
+python, perl, or C. This extension makes it possible to write Flash
+movies that use the Gtk2 widgets for user interface components.
+
+window_new
+     Create a new window.
+
+signal_connect
+     Add an event handler to a widget.
+
+container_set_border_width
+     Set the width of the window border.
+
+button_new_with_label
+     Create a new button and give it the specified label.
+
+signal_connect_swapped
+     Swap signals. Commonly used for _delete_ event handling.
+
+container_add
+     Add one widget to another as a child.
+
+widget_show
+     Display the widget on the screen.
+
+main
+     Start the main GTK event loop. This function does not return.
+
+
+File: gnash_ref.info,  Node: File I/O Extension,  Next: MySQL Extension,  
Prev: Gtk Extension,  Up: Included Extensions
+
+4.3.2 File I/O Extension
+------------------------
+
+Flash movies are traditionally forbidden from accessing the filesystem,
+but this may be necessary for some embedded applications. Especially in
+the case of a user console, currently there is no way to get input into
+a Flash movie but through a TextField.
+
+fopen
+     Open the file.
+
+fread
+     Read a series of bytes from the opened file.
+
+fgetc
+     Read a single byte from the opened file.
+
+fgets
+     Read a single line until a Carriage Return from the opened file.
+
+gets
+     Read a single line from the standard in.
+
+getchar
+     Read a single character from the standard in.
+
+fwrite
+
+fputc
+     Write a single character to the opened file.
+
+fputs
+     Write a single line to the opened file.
+
+puts
+     Write a single line to standard out..
+
+putchar
+     Write a single character to standard out..
+
+fflush
+     Flush the current opened file to disk.
+
+fseek
+     Seek to a location within the opened file.
+
+ftell
+     Report the current position within the opened file.
+
+fclose
+     Close the opened file.
+
+
+File: gnash_ref.info,  Node: MySQL Extension,  Prev: File I/O Extension,  Up: 
Included Extensions
+
+4.3.3 MySQL Extension
+---------------------
+
+The MySQL ActionScript class follows the same API as MySQL, even down
+to the same arguments to the same function names. This enables a Flash
+movie to have direct access to a MySQL database. Traditionally Flash
+movies have had no database support, they either had to use arrays, or
+use XML to communicate to an application specific external database
+daemon.
+
+connect
+     Connect to a MySQL database.
+
+qetData
+     Get data from the database.
+
+disconnect
+     Disconnect from a MySQL database.
+
+query
+     Execute an SQL query to the database.
+
+fetch_row
+     Fetch a row from the query results.
+
+num_fields
+
+free_result
+     Free the results of a query.
+
+store_results
+     Store the results of a query.
+
+
+File: gnash_ref.info,  Node: RTMP Protocol,  Next: Mozilla/Firefox NSAPI 
Plugin,  Prev: Gnash Extensions,  Up: Top
+
+5 RTMP Protocol
+***************
+
+This document is based mostly on my own reverse engineering of the RTMP
+protocol and AMF format. _tcpdump_ and _ethereal_ are your friend. Some
+additional info that got me started was from the Red5
+(http://www.osflash.org/red5) project. _Red5_ is the only other open
+source Flash server. So some details are still vague, but as the
+implementation appears to work, we'll figure out what they are later.
+
+   The Real Time Messaging Protocol was created by MacroMedia (now
+Adobe) for delivering Flash objects and video over a network
+connection. Currently the only servers which support this format are
+the MacroMedia Media sever, and the Open Source Red5 project.
+
+   This is a simple protocol, optimized for poor bandwidth connections.
+It can support up to 64 concurrent streams over the same network
+connection. Part of each AMF packet header contains the index number of
+the stream. A single RTMP message can contain multiple AMF packets.
+
+   An RTMP connection uses Tcp/ip port 1935. It is also possible to
+tunnel RTMP over an HTTP connection using port 80. Each AMF packet is
+128 bytes long except for streaming audio, which has 64 byte packets.
+
+   The basics of the RTMP protocol are as follows. All communications
+are initiated by the client.
+
+Image of the RTMP protocol.
+
+   The client starts the RTMP connection by sending a single byte with
+a value of 0x3. This byte is followed by a data block of 1536 bytes.
+The format if this data block is unknown, but it appears to not be
+actually used by the protocol except as a handshake.
+
+   The server receives this packet, stores the 1536 byte data block,
+and then send a single byte with the value of 0x3, followed by two 1536
+data blocks. The second data block is the full contents of the original
+data block as sent by the client.
+
+   The client receives the 1536 byte data block, and if they match, the
+connection is established. After the handshake process is done, there
+are three other messages that the client sends to the sever to start
+the data flowing.
+
+   The first AMF packet sent to the server contains the _connect_
+packet. This doesn't appear to do much but notify the server the client
+is happy with the handshake, and ready to start reading packets.
+
+   The second packet is the _NetConnection_ object from the client.
+This ActionScript class is used by the Flash movie to create the
+network connection to the server.
+
+   The third packet is the _NetStream_ object from the client. This is
+the ActionScript class used to specify the file to be streamed by the
+server.
+
+   The RTMP packet for our example looks like this:
+
+
+           030000190000c91400000000020007connect00?f0000000000000030003app0200#
+           software/gnash/tests/1153948634.flv0008flashVer02000cLNX 6,0,82,0 
0006
+           swfUrl02001dfile:///file|%2Ftmp%2Fout.swfc30005tcUrl\002\0004
+           rtmp://localhost/software/gnash/tests/1153948634.flv\000\000\t
+           \002\000\005userx
+
+We'll take this apart in a bit, but you can see how all three AMF
+packets are in the same message. The message is received in several 128
+byte blocks, with the last one being less than that. The total size of
+the RTMP message is in the header, so the reader can tell if the entire
+message was read or not.
+
+   The RTMP header is first, followed by the connect message as an
+ASCII string as the message body. The following AMF packet is the
+_NetConnection_ one, which specifies that this is coming from a Flash
+application. This also contains the file path the server can use to
+find the file to stream. This is then followed by the version number,
+which I assume is the version of the Flash player, so the server knows
+what it is talking to.
+
+   The third packet is the one from _NetStream_, which specifies the
+URL used for the movie, followed by the user name for a semblance of
+security.
+
+   For the next level of detail, we'll explain the format of AMF. AMF
+is used by the RTMP protocol to transfer data. Each Flash object is
+encapsulated in an AMF packet, including streaming audio or video.
+
+   The first byte of the RTMP header determines two things about the
+rest of the message. The first 2 bits of this byte signify the total
+size of the RTMP header. The RTMP header is of a variable size, so this
+is important.
+
+00
+     This specifies the header contains 12 bytes, including this one.
+
+01
+     This specifies the header contains 8 bytes, including this one.
+
+02
+     This specifies the header contains 4 bytes, including this one.
+
+03
+     This specifies the header contains 1 byte, so this is the complete
+     header.
+
+   The other 6 bits in this byte represent the AMF index. As a single
+RTMP connection can support multiple data streams, this signifies which
+stream this packet is for. Once an AMF object is fully received by the
+client, the AMF index may be reused.
+
+   For messages with headers of at least 4 bytes, the next 3 bytes are
+used by audio and video data packets, but at this time the meaning of
+this field is unknown.
+
+   For messages with a 8 byte or larger header, the next 3 bytes
+determine the size of the RTMP message being transmitted. Messages with
+a 1 byte or 4 byte header use a standard size, 128 bytes for video, and
+64 bytes for audio.
+
+   For messages with an 8 byte or larger header, the next byte is the
+type of the AMF object.
+
+0x3
+     This specifies the content type of the RTMP packet is the number
+     of bytes read. This is used to start the RTMP connection.
+
+0x4
+     This specifies the content type of the RTMP message is a _ping_
+     packet.
+
+0x5
+     This specifies the content type of the RTMP message is server
+     response of some type.
+
+0x6
+     This specifies the content type of the RTMP packet is client
+     request of some type.
+
+0x8
+     This specifies the content type of the RTMP packet is an audio
+     message.
+
+0x9
+     This specifies the content type of the RTMP message is a video
+     packet.
+
+0x12
+     This specifies the content type of the RTMP message is notify.
+
+0x13
+     This specifies the content type of the RTMP message is shared
+     object.
+
+0x14
+     This specifies the content type of the RTMP message is remote
+     procedure call. This invokes the method of a Flash class remotely.
+
+   There are two sets of data types to consider. One set is used by the
+to specify the content type of the AMF object, the other is an
+ActionScript data type tag used to denote which type of object is being
+transferred.
+
+   The values of the initial type byte are:
+
+0x0
+     This specifies the data in the AMF packet is a numeric value. All
+     numeric values in Flash are 64 bit, _big-endian_.
+
+0x1
+     This specifies the data in the AMF packet is a boolean value.
+
+0x2
+     This specifies the data in the AMF packet is an _ASCII_ string.
+
+0x3
+     This specifies the data in the AMF packet is a Flash object. The
+     Flash object data type field further along in the message
+     specifies which type of ActionScript object it is.
+
+0x4
+     This specifies the data in the AMF packet is a Flash movie, ie.
+     another Flash movie.
+
+0x5
+     This specifies the data in the AMF packet is a NULL value. NULL is
+     often used as the return code from calling Flash functions.
+
+0x6
+     This specifies the data in the AMF packet is a undefined. This is
+     also used as the return code from calling Flash functions.
+
+0x7
+     This specifies the data in the AMF packet is a reference.
+
+0x8
+     This specifies the data in the AMF packet is a ECMA array.
+
+0x9
+     This specifies the data in the AMF packet is the end of an object
+     definition. As an object is transmitted with multiple AMF packets,
+     this lets the server know when the end of the object is reached.
+
+0xa
+     This specifies the data in the AMF packet is a Strict array.
+
+0xb
+     This specifies the data in the AMF packet is a date.
+
+0xc
+     This specifies the data in the AMF packet is a multi-byte string.
+     Multi-byte strings are used for international language support to
+     represent non _ASCII_ fonts.
+
+0xd
+     This specifies the data in the AMF packet is a an unsupported
+     feature.
+
+0xe
+     This specifies the data in the AMF packet is a record set.
+
+0xf
+     This specifies the data in the AMF packet is a AML object. XML
+     objects are then parsed by the _XML_ ActionScript class.
+
+0x10
+     This specifies the data in the AMF packet is a typed object.
+
+   For messages with a 12 byte header, the last 4 bytes are the routing
+of the message. If the destination is the server, this value is the
+NetStream object source. If the destination is the client, this is the
+NetStream object for this RTMP message. A value of 0x00000000 appears
+to be reserved for the NetConnection object.
+
+   Multiple AMF streams can be contained in a single RTMP messages, so
+it's important to check the index of each AMF packet.
+
+   An example RTMP header might look like this. (spaces added between
+fields for clarity) All the numbers are in hex.
+
+
+           03 000019 0000c9 14 000000000
+
+03
+     The first two bits of this byte are the size of the header, which
+     in this example is 00, for a 12 byte header. The next 6 bits is
+     the AMF stream index number, which in this example is 0x3.
+
+000019
+     These 3 bytes currently have an unknown purpose.
+
+000c9
+     Since this example has a 12 byte header, this is the size of the
+     RTMP message, in this case 201 bytes.
+
+14
+     This is the content type of the RTMP message, which in this case
+     is to invoke a remote function call. (which we later see is the
+     connect function).
+
+00000000
+     The source is the NetConnection object used to start this
+     connection.
+
+* Menu:
+
+* AMF Format::
+
+
+File: gnash_ref.info,  Node: AMF Format,  Up: RTMP Protocol
+
+5.1 AMF Format
+==============
+
+The AMF format is used in the LocalConnection, SharedObject,
+NetConnection, and NetStream ActionScript classes. This is a means of
+binary data interchange between Flash movies, or between a Flash player
+and a Flash server.
+
+   Like the RTMP messages, an AMF packet header can be of a variable
+size. The size is either the same as the initial header of the RTMP
+message, or a 1 byte header, which is commonly used for streaming audio
+or video data.
+
+   The body of an AMF packet may look something like this example. The
+spaces have been added for clarity.
+
+
+           02  0007 636f6e6e656374
+
+02
+     This is a single byte header. The value of the first 2 bits is
+     0x3, and the AMF index is also 0x3.
+
+0007
+     This is the length in bytes of the string.
+
+63 6f 6e 6e 65 63 74
+     This is the string. Note that there is no null terminator since
+     the length is specified.
+
+
+File: gnash_ref.info,  Node: Mozilla/Firefox NSAPI Plugin,  Next: Appendix,  
Prev: RTMP Protocol,  Up: Top
+
+6 Mozilla/Firefox NSAPI Plugin
+******************************
+
+The Mozilla SDK has two API layers for plugins. The older layer is
+documented in the Geeko Plugin API Reference
+(http://www.gnu.org/software/gnash/manual/plugin.pdf), and the newer
+layer doesn't appear to be documented. The new API is simpler, and is
+portable across multiple versions of Mozilla or Firefox. The new API is
+just a layer on top of the older one, so this manual still applies.
+
+   Most of the programming of a plugin is filling in real emphasis for
+the standard API functions and methods. Firefox uses these to create
+the plugin, and to send it data.
+
+   When initializing or destroying a plugin, no matter how many
+instances are being used, the C API is used. These functions are
+typically called once for each plugin that is loaded.
+
+* Menu:
+
+* Plugin C API::
+* Plugin C++ API::
+* OpenGL and Threads::
+* Plugin Event Handling::
+
+
+File: gnash_ref.info,  Node: Plugin C API,  Next: Plugin C++ API,  Up: 
Mozilla/Firefox NSAPI Plugin
+
+6.1 Plugin C API
+================
+
+The lower layer is a C based API which is used by Firefox to initialize
+and destroy a plugin. This is so a plugin can be portable across
+multiple systems, since C++ emphasis is not portable between most C++
+compilers. This is where most of the behind the scenes work is done in
+a plugin. For Gnash, the sources this lower layer are in
+_plugin/mozilla-sdk_. They were added to the Gnash source tree so it
+wouldn't be necessary to have the Mozilla development packages
+installed to compile the Gnash plugin.
+
+   This is also the older API used for plugins, so is usually the one
+used if you dig around for plugin examples on the web. These are the
+main functions which have to be implemented in a plugin for it to be
+recognized by the browser, and to be initialized and destroyed.
+
+NS_PluginInitialize
+     This C function gets called once when the plugin is loaded,
+     regardless of how many instantiations there are actually playing
+     movies. So this is where all the one time only initialization
+     stuff goes that is shared by all the threads.
+
+NS_NewPluginInstance
+     This instantiates a new object for the browser. Returning a
+     pointer to the C++ plugin object is what ties the C++ and C
+     emphasis parts of the API together.
+
+NS_DestroyPluginInstance
+     This destroys our instantiated object when the browser is done.
+
+NS_PluginShutdown
+     This is called when a plugin is shut down, so this is where all
+     the one time only shutdown stuff goes.
+
+NPP_GetMIMEDescription
+     This is called to get the MIME types the plugin supports.
+
+NS_PluginGetValue
+     This is used by Firefox to query information from the plugin, like
+     the supported MIME type, the version number, and a description.
+
+
+File: gnash_ref.info,  Node: Plugin C++ API,  Next: OpenGL and Threads,  Prev: 
Plugin C API,  Up: Mozilla/Firefox NSAPI Plugin
+
+6.2 Plugin C++ API
+==================
+
+The higher level layer is the one we are most concerned with. This is
+an instantiation of the _nsPluginInstanceBase_ class, as defined by the
+Mozilla SDK, for our plugin. With this API, a plugin is mostly defining
+the standard entry points for Firefox, and the emphasis that implements
+the glue between the Firefox and our plugin.
+
+   These are called for each instantiation of plugin. If there are
+three Flash movies on a web page, then three instances are created.
+Unfortunately for plugin programmers, these functions may randomly be
+called more than once, so it's good to use initialization flags for
+things that should only be done one per thread. For instance,
+_nsPluginInstance::init()_ and _nsPluginInstance::SetWindow()_ are
+called more than once, so the plugin must protect against actions that
+could be destructive.
+
+nsPluginInstance::nsPluginInstance
+     Create a new plugin object.
+
+nsPluginInstance::init
+     This methods initializes the plugin object, and is called for
+     every movie which gets played. This is where the thread-specific
+     information goes.
+
+nsPluginInstance::SetWindow
+     This sets up the window the plugin is supposed to render into.
+     This calls passes in various information used by the plugin to
+     setup the window. This may get called multiple times by each
+     instantiated object, so it can't do much but window specific setup
+     here. This is where the main emphasis is that sets up the window
+     for the plugin.
+
+nsPluginInstance::NewStream
+     Opens a new incoming data stream, which is the flash movie we want
+     to play. A URL can be pretty ugly, like in this example:
+     
http://www.sickwave.com/swf/navbar/navbar_sw.swf?atfilms=http%3a//www.atm.com/af/home/&shickwave=http%3a//www.sickwave.com&gblst=http%3a//gbst.sickwave.com/gb/gbHome.jsp&known=0
+     
../flash/gui.swf?ip_addr=foobar.com&ip_port=3660&show_cursor=true&path_prefix=../flash/&trapallkeys=true"
+     So this is where we parse the URL to get all the options passed in
+     when invoking the plugin.
+
+nsPluginInstance::Write
+     Read the data stream from Mozilla/Firefox.  For now we read the
+     bytes and write them to a disk file.
+
+nsPluginInstance::WriteReady
+     Return how many bytes we can read into the buffer.
+
+nsPluginInstance::DestroyStream
+     Destroy the data stream we've been reading. For Gnash, when the
+     stream is destroyed means we've grabbed the entire movie. So we
+     signal the thread to start reading and playing the movie.
+
+nsPluginInstance::shut
+     This is where the movie playing specific shutdown emphasis goes.
+
+nsPluginInstance::~nsPluginInstance
+     This destroys our plugin object.
+
+NS_PluginInitialize::initGL
+     This is a Gnash internal function that sets up OpenGL.
+
+NS_PluginInitialize::destroyContext
+     This is a Gnash internal function that destroys a GLX context.
+
+nsPluginInstance::getVersion
+     This returns the version of Mozilla this plugin supports.
+
+nsPluginInstance::GetValue
+     This returns information to the browser about the plugin's name
+     and description.
+
+nsPluginInstance::URLNotify
+
+
+File: gnash_ref.info,  Node: OpenGL and Threads,  Next: Plugin Event Handling, 
 Prev: Plugin C++ API,  Up: Mozilla/Firefox NSAPI Plugin
+
+6.3 OpenGL and Threads
+======================
+
+Neither OpenGL nor X11 has any built-in support for threads. Most
+actions aren't even atomic, so care has to be made to not corrupt any
+internal data. While it is difficult to render OpenGL from multiple
+threads, it can be done with the proper locking. The downside is the
+locking adds a performance hit, since all the threads will have to have
+the access synchronized by using mutexes.
+
+   The X11 context is maintained one per instantiation of the plugin.
+It is necessary to lock access to the X11 context when using threads by
+using _XLockDisplay()_ and _XUnlockDisplay()_. A connection to the X11
+server is opened for every instantiation of the plugin using
+_XOpenDisplay()_.
+
+   The _GLX Context_ is maintained one per instantiation of the plugin
+for a web page. If there are more than one Flash movie, there is more
+than one GLX Context. A GLX context can be created by using
+_glXCreateContext()_, and then later destroyed by using
+_glXDestroyContext()_.  When swapping threads, the context is changed
+using _glXMakeCurrent()_.
+
+   All the emphasis that directly accesses a GLX context or the X11
+display must be wrapped with a mutex.
+
+
+File: gnash_ref.info,  Node: Plugin Event Handling,  Prev: OpenGL and Threads, 
 Up: Mozilla/Firefox NSAPI Plugin
+
+6.4 Plugin Event Handling
+=========================
+
+Firefox on most UNIX systems is a GTK+ application, so it is possible
+to have the plugin hook into the X11 event handling via GLX or GTK.
+Since Firefox uses GTK, so does Gnash. This also allows the addition of
+a right-click mouse menu for controlling the player. The GTK build of
+Gnash offers the best browsing experience as it's more functional than
+the SDL version.
+
+   It is also possible to disable the _GTK_ support so only the older
+_SDL_ support is used. In this case Gnash can't support event handling
+within the browser. This means that when using the SDL of the plugin,
+mouse clicks and keys pressed get ignored. Windows also can't be
+resized, and sometimes they overrun their boundaries as well. To
+disable the GTK support and force SDL to be used anyway, configure with
+_-disable-glext_
+
+
+File: gnash_ref.info,  Node: Appendix,  Next: Authors,  Prev: Mozilla/Firefox 
NSAPI Plugin,  Up: Top
+
+7 Appendix
+**********
+
+* Menu:
+
+* Code Style::
+
+
+File: gnash_ref.info,  Node: Code Style,  Up: Appendix
+
+7.1 Code Style
+==============
+
+I know any discussion of coding styles leads to strong opinions, so
+I'll state simply I follow the GNU Coding Standards
+(http://www.gnu.org/prep/standards/standards.html). Where there is some
+flexibility as to the location of braces, I prefer mine on the end of a
+line when using an _if_, _while_, or _do_ statement. I find this more
+compact style easier to read and parse by eye. I'm also a big fan of
+always using braces around _if_ statements, even if they're one liners.
+
+   Here's my tweaked style settings for _Emacs_, the one true editor to
+rule them all.
+
+
+           (defconst my-style
+               '((c-tab-always-indent   . t)
+                (c-auto-newline           . t)
+                (c-hanging-braces-alist . (
+                                  (brace-list-intro)
+                                  (namespace-open)
+                                  (inline-open)
+                                  (block-open)
+                                  (brace-list-open)
+                                  (brace-list-close)
+                                  (brace-entry-open)
+                                  (brace-else-brace)
+                                  (brace-elseif-brace)
+                                  (class-open after)
+                                  (class-close)
+                                  (defun-open after)
+                                  (defun-close)
+                                  (extern-lang-open)
+                                  (inexpr-class-open)
+                                  (statement-open)
+                                  (substatement-open)
+                                  (inexpr-class-close)))
+                 (c-hanging-colons-alist . ((member-init-intro before)
+                                        (inher-intro)
+                                        (case-label after)
+                                        (label after)
+                                        (access-label after)))
+                 (c-offsets-alist      . (
+                                  (innamespace . 0)
+                                        (case-label  . 2)
+                                  ))
+                 (c-cleanup-list       . (
+                                  (scope-operator)
+                                  (empty-defun-braces)
+                                  (brace-else-brace)
+                                  (brace-elseif-brace)
+                                  (defun-close-semi)
+                                  (list-close-comma)
+                                  )
+                               )
+         ;; no automatic newlines after ';' if following line non-blank or 
inside
+         ;; one-line inline methods
+         (add-to-list 'c-hanging-semi&comma-criteria
+                'c-semi&comma-no-newlines-before-nonblanks)
+         (add-to-list 'c-hanging-semi&comma-criteria
+                'c-semi&comma-no-newlines-for-oneline-inliners)
+     ;    (knr-argdecl-intro . -)
+         (c-echo-syntactic-information-p . t)
+         )
+       "My GNU Programming Style")
+
+   Another coding consideration: comments are good!  Over commenting
+isn't good.  Here is an over commented example:
+
+
+       counter++;              // increment counter
+
+Gnash also uses Doxygen (http://www.doxygen.org) style comments. These
+are processed by Doxygen when building a cross reference of all the
+classes, and is a good way to help push internals documentation from
+the depths of the code into documentation where it can be seen by
+others.
+
+   _Doxygen_ style comments for _C++_ code involves simply using three
+slashes _///_ instead of the standard two slashes _//_ used for C++
+comments. Here's a short comment block for the _XML::cloneNode()_
+method:
+
+
+       /// \brief copy a node
+       ///
+       /// Method; constructs and returns a new XML node of the same type,
+       /// name, value, and attributes as the specified XML object. If deep
+       /// is set to true, all child nodes are recursively cloned, resulting
+       /// in an exact copy of the original object's document tree.
+       XMLNode &
+       XML::cloneNode(XMLNode &newnode, bool deep) {
+       ...
+       }
+
+   The _\brief_ keyword means that the text becomes associated when
+listing all the classes on the generated web pages. The text after the
+blank link becomes the detailed description which appears on the
+generated web page for that class and method.
+
+
+File: gnash_ref.info,  Node: Authors,  Next: GNU Free Documentation License,  
Prev: Appendix,  Up: Top
+
+8 Authors
+*********
+
+Gnash is maintained by Rob Savoye. Other active developers are: Sandro
+Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad Musick, Benjamin
+Wolsey, and Zou Lunkai. Please send all comments and suggestions to
+<address@hidden>. Past and sometimes current developers are Tomas
+Groth and Markus Gothe.
+
+   Gnash was initially derived from GameSWF.  GameSWF is maintained by
+Thatcher Ulrich <address@hidden>.  The following people contributed to
+GameSWF: Mike Shaver, Thierry Berger-Perrin, Ignacio Castan~o, Willem
+Kokke, Vitaly Alexeev, Alexander Streit, and Rob Savoye.
+
+
+File: gnash_ref.info,  Node: GNU Free Documentation License,  Prev: Authors,  
Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+* Menu:
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_ref.info,  Node: 0_ PREAMBLE,  Next: 1_ APPLICABILITY AND 
DEFINITIONS,  Up: GNU Free Documentation License
+
+A.1 0. PREAMBLE
+===============
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone the
+effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or non-commercially. Secondarily,
+this License preserves for the author and publisher a way to get credit
+for their work, while not being considered responsible for
+modifications made by others.
+
+   This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft license
+designed for free software.
+
+   We have designed this License in order to use it for manuals for
+free software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals; it
+can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+File: gnash_ref.info,  Node: 1_ APPLICABILITY AND DEFINITIONS,  Next: 2_ 
VERBATIM COPYING,  Prev: 0_ PREAMBLE,  Up: GNU Free Documentation License
+
+A.2 1. APPLICABILITY AND DEFINITIONS
+====================================
+
+This License applies to any manual or other work that contains a notice
+placed by the copyright holder saying it can be distributed under the
+terms of this License. The "Document", below, refers to any such manual
+or work. Any member of the public is a licensee, and is addressed as
+"you".
+
+   A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+   A "Secondary Section" is a named appendix or a front-matter section
+of the Document (*note fdl-document::) that deals exclusively with the
+relationship of the publishers or authors of the Document to the
+Document's overall subject (or to related matters) and contains nothing
+that could fall directly within that overall subject. (For example, if
+the Document is in part a textbook of mathematics, a Secondary Section
+may not explain any mathematics.)  The relationship could be a matter
+of historical connection with the subject or with related matters, or of
+legal, commercial, philosophical, ethical or political position
+regarding them.
+
+   The "Invariant Sections" are certain  Secondary Sections (*note
+fdl-secondary::) whose titles are designated, as being those of
+Invariant Sections, in the notice that says that the Document (*note
+fdl-document::) is released under this License.
+
+   The "Cover Texts" are certain short passages of text that are
+listed, as Front-Cover Texts or Back-Cover Texts, in the notice that
+says that the Document (*note fdl-document::) is released under this
+License.
+
+   A "Transparent" copy of the  Document (*note fdl-document::) means a
+machine-readable copy, represented in a format whose specification is
+available to the general public, whose contents can be viewed and edited
+directly and straightforwardly with generic text editors or (for images
+composed of pixels) generic paint programs or (for drawings) some
+widely available drawing editor, and that is suitable for input to text
+formatters or for automatic translation to a variety of formats
+suitable for input to text formatters. A copy made in an otherwise
+Transparent file format whose markup has been designed to thwart or
+discourage subsequent modification by readers is not Transparent.  A
+copy that is not "Transparent" is called "Opaque".
+
+   Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML or
+XML using a publicly available DTD, and standard-conforming simple HTML
+designed for human modification. Opaque formats include PostScript, PDF,
+proprietary formats that can be read and edited only by proprietary
+word processors, SGML or XML for which the DTD and/or processing tools
+are not generally available, and the machine-generated HTML produced by
+some word processors for output purposes only.
+
+   The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in formats
+which do not have any title page as such, "Title Page" means the text
+near the most prominent appearance of the work's title, preceding the
+beginning of the body of the text.
+
+
+File: gnash_ref.info,  Node: 2_ VERBATIM COPYING,  Next: 3_ COPYING IN 
QUANTITY,  Prev: 1_ APPLICABILITY AND DEFINITIONS,  Up: GNU Free Documentation 
License
+
+A.3 2. VERBATIM COPYING
+=======================
+
+You may copy and distribute the Document (*note fdl-document::) in any
+medium, either commercially or noncommercially, provided that this
+License, the copyright notices, and the license notice saying this
+License applies to the Document are reproduced in all copies, and that
+you add no other conditions whatsoever to those of this License. You
+may not use technical measures to obstruct or control the reading or
+further copying of the copies you make or distribute. However, you may
+accept compensation in exchange for copies. If you distribute a large
+enough number of copies you must also follow the conditions in section
+3 (*note 3_ COPYING IN QUANTITY::).
+
+   You may also lend copies, under the same conditions stated above,
+and you may publicly display copies.
+
+
+File: gnash_ref.info,  Node: 3_ COPYING IN QUANTITY,  Next: 4_ MODIFICATIONS,  
Prev: 2_ VERBATIM COPYING,  Up: GNU Free Documentation License
+
+A.4 3. COPYING IN QUANTITY
+==========================
+
+If you publish printed copies of the Document (*note fdl-document::)
+numbering more than 100, and the Document's license notice requires
+Cover Texts (*note fdl-cover-texts::), you must enclose the copies in
+covers that carry, clearly and legibly, all these Cover Texts:
+Front-Cover Texts on the front cover, and Back-Cover Texts on the back
+cover. Both covers must also clearly and legibly identify you as the
+publisher of these copies. The front cover must present the full title
+with all words of the title equally prominent and visible. You may add
+other material on the covers in addition. Copying with changes limited
+to the covers, as long as they preserve the title of the Document
+(*note fdl-document::) and satisfy these conditions, can be treated as
+verbatim copying in other respects.
+
+   If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+   If you publish or distribute Opaque (*note fdl-transparent::) copies
+of the Document (*note fdl-document::) numbering more than 100, you
+must either include a machine-readable Transparent (*note
+fdl-transparent::) copy along with each Opaque copy, or state in or
+with each Opaque copy a publicly-accessible computer-network location
+containing a complete Transparent copy of the Document, free of added
+material, which the general network-using public has access to download
+anonymously at no charge using public-standard network protocols. If
+you use the latter option, you must take reasonably prudent steps, when
+you begin distribution of Opaque copies in quantity, to ensure that
+this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+   It is requested, but not required, that you contact the authors of
+the Document (*note fdl-document::) well before redistributing any
+large number of copies, to give them a chance to provide you with an
+updated version of the Document.
+
+
+File: gnash_ref.info,  Node: 4_ MODIFICATIONS,  Next: 5_ COMBINING DOCUMENTS,  
Prev: 3_ COPYING IN QUANTITY,  Up: GNU Free Documentation License
+
+A.5 4. MODIFICATIONS
+====================
+
+You may copy and distribute a Modified Version (*note fdl-modified::)
+of the Document (*note fdl-document::) under the conditions of sections
+2 (*note 2_ VERBATIM COPYING::) and 3 (*note 3_ COPYING IN QUANTITY::)
+above, provided that you release the Modified Version under precisely
+this License, with the Modified Version filling the role of the
+Document, thus licensing distribution and modification of the Modified
+Version to whoever possesses a copy of it. In addition, you must do
+these things in the Modified Version:
+
+   * *A. * Use in the Title Page (*note fdl-title-page::) (and on the
+     covers, if any) a title distinct from that of the Document (*note
+     fdl-document::), and from those of previous versions (which
+     should, if there were any, be listed in the History section of the
+     Document). You may use the same title as a previous version if the
+     original publisher of that version gives permission.
+
+   * *B. * List on the Title Page (*note fdl-title-page::), as authors,
+     one or more persons or entities responsible for authorship of the
+     modifications in the Modified Version (*note fdl-modified::),
+     together with at least five of the principal authors of the
+     Document (*note fdl-document::) (all of its principal authors, if
+     it has less than five).
+
+   * *C. * State on the Title Page (*note fdl-title-page::) the name of
+     the publisher of the Modified Version (*note fdl-modified::), as
+     the publisher.
+
+   * *D. * Preserve all the copyright notices of the Document (*note
+     fdl-document::).
+
+   * *E. * Add an appropriate copyright notice for your modifications
+     adjacent to the other copyright notices.
+
+   * *F. * Include, immediately after the copyright notices, a license
+     notice giving the public permission to use the Modified Version
+     (*note fdl-modified::) under the terms of this License, in the
+     form shown in the Addendum below.
+
+   * *G. * Preserve in that license notice the full lists of  Invariant
+     Sections (*note fdl-invariant::) and required Cover Texts (*note
+     fdl-cover-texts::) given in the Document's (*note fdl-document::)
+     license notice.
+
+   * *H. * Include an unaltered copy of this License.
+
+   * *I. * Preserve the section entitled "History", and its title, and
+     add to it an item stating at least the title, year, new authors,
+     and publisher of the Modified Version  (*note fdl-modified::)as
+     given on the Title Page (*note fdl-title-page::).  If there is no
+     section entitled "History" in the Document (*note fdl-document::),
+     create one stating the title, year, authors, and publisher of the
+     Document as given on its Title Page, then add an item describing
+     the Modified Version as stated in the previous sentence.
+
+   * *J. * Preserve the network location, if any, given in the Document
+     (*note fdl-document::) for public access to a Transparent (*note
+     fdl-transparent::) copy of the Document, and likewise the network
+     locations given in the Document for previous versions it was based
+     on. These may be placed in the "History" section.  You may omit a
+     network location for a work that was published at least four years
+     before the Document itself, or if the original publisher of the
+     version it refers to gives permission.
+
+   * *K. * In any section entitled "Acknowledgements" or "Dedications",
+     preserve the section's title, and preserve in the section all the
+     substance and tone of each of the contributor acknowledgements
+     and/or dedications given therein.
+
+   * *L. * Preserve all the Invariant Sections (*note fdl-invariant::)
+     of the Document (*note fdl-document::), unaltered in their text
+     and in their titles.  Section numbers or the equivalent are not
+     considered part of the section titles.
+
+   * *M. * Delete any section entitled "Endorsements". Such a section
+     may not be included in the Modified Version (*note fdl-modified::).
+
+   * *N. * Do not retitle any existing section as "Endorsements" or to
+     conflict in title with any Invariant Section (*note
+     fdl-invariant::).
+
+   If the Modified Version (*note fdl-modified::) includes new
+front-matter sections or appendices that qualify as Secondary Sections
+(*note fdl-secondary::) and contain no material copied from the
+Document, you may at your option designate some or all of these
+sections as invariant. To do this, add their titles to the list of
+Invariant Sections (*note fdl-invariant::) in the Modified Version's
+license notice.  These titles must be distinct from any other section
+titles.
+
+   You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version (*note
+fdl-modified::) by various parties-for example, statements of peer
+review or that the text has been approved by an organization as the
+authoritative definition of a standard.
+
+   You may add a passage of up to five words as a Front-Cover Text
+(*note fdl-cover-texts::), and a passage of up to 25 words as a
+Back-Cover Text (*note fdl-cover-texts::), to the end of the list of
+Cover Texts (*note fdl-cover-texts::) in the Modified Version (*note
+fdl-modified::).  Only one passage of Front-Cover Text and one of
+Back-Cover Text may be added by (or through arrangements made by) any
+one entity. If the Document (*note fdl-document::) already includes a
+cover text for the same cover, previously added by you or by
+arrangement made by the same entity you are acting on behalf of, you
+may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+   The author(s) and publisher(s) of the Document (*note
+fdl-document::) do not by this License give permission to use their
+names for publicity for or to assert or imply endorsement of any
+Modified Version  (*note fdl-modified::).
+
+
+File: gnash_ref.info,  Node: 5_ COMBINING DOCUMENTS,  Next: 6_ COLLECTIONS OF 
DOCUMENTS,  Prev: 4_ MODIFICATIONS,  Up: GNU Free Documentation License
+
+A.6 5. COMBINING DOCUMENTS
+==========================
+
+You may combine the Document (*note fdl-document::) with other
+documents released under this License, under the terms defined in
+section 4 (*note 4_ MODIFICATIONS::) above for modified versions,
+provided that you include in the combination all of the Invariant
+Sections (*note fdl-invariant::) of all of the original documents,
+unmodified, and list them all as Invariant Sections of your combined
+work in its license notice.
+
+   The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections (*note fdl-invariant::) may be
+replaced with a single copy. If there are multiple Invariant Sections
+with the same name but different contents, make the title of each such
+section unique by adding at the end of it, in parentheses, the name of
+the original author or publisher of that section if known, or else a
+unique number. Make the same adjustment to the section titles in the
+list of Invariant Sections in the license notice of the combined work.
+
+   In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications".  You must delete all sections
+entitled "Endorsements."
+
+
+File: gnash_ref.info,  Node: 6_ COLLECTIONS OF DOCUMENTS,  Next: 7_ 
AGGREGATION WITH INDEPENDENT WORKS,  Prev: 5_ COMBINING DOCUMENTS,  Up: GNU 
Free Documentation License
+
+A.7 6. COLLECTIONS OF DOCUMENTS
+===============================
+
+You may make a collection consisting of the Document (*note
+fdl-document::) and other documents released under this License, and
+replace the individual copies of this License in the various documents
+with a single copy that is included in the collection, provided that
+you follow the rules of this License for verbatim copying of each of the
+documents in all other respects.
+
+   You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+File: gnash_ref.info,  Node: 7_ AGGREGATION WITH INDEPENDENT WORKS,  Next: 8_ 
TRANSLATION,  Prev: 6_ COLLECTIONS OF DOCUMENTS,  Up: GNU Free Documentation 
License
+
+A.8 7. AGGREGATION WITH INDEPENDENT WORKS
+=========================================
+
+A compilation of the Document (*note fdl-document::) or its derivatives
+with other separate and independent documents or works, in or on a
+volume of a storage or distribution medium, does not as a whole count
+as a Modified Version (*note fdl-modified::) of the Document, provided
+no compilation copyright is claimed for the compilation.  Such a
+compilation is called an "aggregate", and this License does not apply
+to the other self-contained works thus compiled with the Document , on
+account of their being thus compiled, if they are not themselves
+derivative works of the Document.  If the Cover Text (*note
+fdl-cover-texts::) requirement of section 3 (*note 3_ COPYING IN
+QUANTITY::) is applicable to these copies of the Document, then if the
+Document is less than one quarter of the entire aggregate, the
+Document's Cover Texts may be placed on covers that surround only the
+Document within the aggregate. Otherwise they must appear on covers
+around the whole aggregate.
+
+
+File: gnash_ref.info,  Node: 8_ TRANSLATION,  Next: 9_ TERMINATION,  Prev: 7_ 
AGGREGATION WITH INDEPENDENT WORKS,  Up: GNU Free Documentation License
+
+A.9 8. TRANSLATION
+==================
+
+Translation is considered a kind of modification, so you may distribute
+translations of the Document (*note fdl-document::) under the terms of
+section 4 (*note 4_ MODIFICATIONS::). Replacing  Invariant Sections
+(*note fdl-invariant::) with translations requires special permission
+from their copyright holders, but you may include translations of some
+or all Invariant Sections in addition to the original versions of these
+Invariant Sections. You may include a translation of this License
+provided that you also include the original English version of this
+License. In case of a disagreement between the translation and the
+original English version of this License, the original English version
+will prevail.
+
+
+File: gnash_ref.info,  Node: 9_ TERMINATION,  Next: 10_ FUTURE REVISIONS OF 
THIS LICENSE,  Prev: 8_ TRANSLATION,  Up: GNU Free Documentation License
+
+A.10 9. TERMINATION
+===================
+
+You may not copy, modify, sublicense, or distribute the Document (*note
+fdl-document::) except as expressly provided for under this License.
+Any other attempt to copy, modify, sublicense or distribute the
+Document is void, and will automatically terminate your rights under
+this License. However, parties who have received copies, or rights,
+from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+
+File: gnash_ref.info,  Node: 10_ FUTURE REVISIONS OF THIS LICENSE,  Next: 
Addendum,  Prev: 9_ TERMINATION,  Up: GNU Free Documentation License
+
+A.11 10. FUTURE REVISIONS OF THIS LICENSE
+=========================================
+
+The Free Software Foundation (http://www.gnu.org/fsf/fsf.html) may
+publish new, revised versions of the GNU Free Documentation License
+from time to time. Such new versions will be similar in spirit to the
+present version, but may differ in detail to address new problems or
+concerns. See http://www.gnu.org/copyleft/
+(http://www.gnu.org/copyleft).
+
+   Each version of the License is given a distinguishing version
+number. If the Document (*note fdl-document::) specifies that a
+particular numbered version of this License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that specified version or of any later version
+that has been published (not as a draft) by the Free Software
+Foundation. If the Document does not specify a version number of this
+License, you may choose any version ever published (not as a draft) by
+the Free Software Foundation.
+
+
+File: gnash_ref.info,  Node: Addendum,  Prev: 10_ FUTURE REVISIONS OF THIS 
LICENSE,  Up: GNU Free Documentation License
+
+A.12 Addendum
+=============
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+     Copyright 2008, Free Software Foundation.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with noInvariant Sections (*note fdl-invariant::),
+     with no Front-Cover Texts (*note fdl-cover-texts::), and with no
+     Back-Cover Texts (*note fdl-cover-texts::). A copy of the license
+     is included in the section entitled "GNU Free Documentation
+     License".
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License
+(http://www.gnu.org/copyleft/gpl.html), to permit their use in free
+software.
+
+
+
+Tag Table:
+Node: Top168
+Node: Introduction1821
+Node: Audience2622
+Node: What Is Supported ?2950
+Node: Building from Source5482
+Node: Overview5862
+Node: Getting The Source6907
+Node: Releases7113
+Node: CVS Access7481
+Node: Code Dependencies8193
+Ref: Code Dependency Table8890
+Node: Testing Dependencies34405
+Ref: Testing Dependency Table34713
+Node: Documentation Dependencies38637
+Ref: Documentation Dependency Table38906
+Node: Configuring Gnash47974
+Node: Features50296
+Ref: Configuration Options - Features50896
+Node: Specifying Custom Paths57226
+Ref: Custom Path Options57701
+Node: Compiling the Code67371
+Node: Creating the Documentation68312
+Node: Running the Tests69648
+Node: Using DejaGnu70093
+Node: Increasing Verbosity70456
+Node: Running Some Tests70992
+Node: Running The Tests Manually71812
+Node: Movie tests72474
+Node: ActionScript Unit Tests72828
+Node: Installation73145
+Node: Libraries74421
+Node: Executables75308
+Node: Documentation76178
+Node: Cross Configuring76933
+Node: Software Internals80008
+Node: A Tour of Gnash80279
+Node: The Libraries80846
+Node: libgnashbase81149
+Node: libgnashgeo81573
+Node: libgnashgui81788
+Node: libgnashserver82057
+Node: libgnashasobjs82428
+Node: libgnashamf82664
+Node: libgnashbackend83087
+Node: libgnashplugin83402
+Node: libklashpart83608
+Node: The Applications83778
+Node: The Standalone Player84145
+Node: Gprocesser84443
+Node: SOLdumper84837
+Node: Dumpshm85104
+Node: The Plugin85323
+Node: Current Status85801
+Node: GUI Support86359
+Node: Mozplugger88040
+Node: Klash89931
+Node: The Debug Logging System90481
+Node: Logging System C API92042
+Node: Logging System C++ API94246
+Node: Sound handling in Gnash96087
+Node: Sound types96918
+Node: Sound parsing97455
+Node: Sound playback98023
+Node: The SDL sound backend98553
+Node: The Gstreamer backend99872
+Node: Future audio backends100888
+Node: Detailed description of the Gstreamer backend101378
+Node: Testing103629
+Node: Testing Tools104100
+Node: Test Cases104932
+Node: Writing ActionScript Tests105511
+Node: Writing Ming-based self-contained SWF tests108014
+Node: Using Ming-based test generators facilities109171
+Node: Writing self-contained SWF tests with other compilers111531
+Node: Writing Test Runners114624
+Node: Using the generic test runner for self-contained SWF tests116373
+Node: Writing Movie testers118462
+Node: Adding New ActionScript Class120202
+Node: Prototype121382
+Node: Declaration122799
+Node: Instantiation123064
+Node: Methods123691
+Node: Accessing Arguments124082
+Node: Returning a Value to ActionScript124478
+Node: Additional fn_call Members124857
+Node: Dynamic Properties125711
+Node: The as_value Object Type127216
+Node: Data Types127654
+Node: Determining the Type127975
+Node: Fetching the Value128507
+Node: Setting the Value and Type128997
+Node: Further Reading129591
+Node: Object ActionScript Class130006
+Node: The Methods of the Class130346
+Node: The Properties of the Object Class130685
+Node: Object Class Conformance131000
+Node: Gnash Extensions132539
+Node: Creating A New Extension134813
+Node: Crafting an Extension136229
+Node: Debugging An Extension140533
+Node: Included Extensions142225
+Node: Gtk Extension142669
+Node: File I/O Extension143656
+Node: MySQL Extension144842
+Node: RTMP Protocol145693
+Node: AMF Format155489
+Node: Mozilla/Firefox NSAPI Plugin156465
+Node: Plugin C API157483
+Node: Plugin C++ API159342
+Node: OpenGL and Threads162606
+Node: Plugin Event Handling163934
+Node: Appendix164903
+Node: Code Style165055
+Node: Authors168885
+Node: GNU Free Documentation License169581
+Node: 0_ PREAMBLE170344
+Node: 1_ APPLICABILITY AND DEFINITIONS171650
+Ref: fdl-document171875
+Ref: fdl-modified172166
+Ref: fdl-secondary172353
+Ref: fdl-invariant172998
+Ref: fdl-cover-texts173247
+Ref: fdl-transparent173460
+Ref: fdl-title-page174750
+Node: 2_ VERBATIM COPYING175139
+Node: 3_ COPYING IN QUANTITY176119
+Node: 4_ MODIFICATIONS178476
+Node: 5_ COMBINING DOCUMENTS184536
+Node: 6_ COLLECTIONS OF DOCUMENTS186033
+Node: 7_ AGGREGATION WITH INDEPENDENT WORKS186924
+Node: 8_ TRANSLATION188152
+Node: 9_ TERMINATION189055
+Node: 10_ FUTURE REVISIONS OF THIS LICENSE189710
+Node: Addendum190850
+
+End Tag Table
+
+
+Local Variables:
+coding: US-ASCII
+End:

Index: doc/C/preformatted/gprocessor.1.in
===================================================================
RCS file: doc/C/preformatted/gprocessor.1.in
diff -N doc/C/preformatted/gprocessor.1.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gprocessor.1.in  2 Mar 2008 16:32:22 -0000       1.1
@@ -0,0 +1,47 @@
+.\" -*- coding: us-ascii -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH gprocessor 1 "13 February 2008"  
+.SH NAME
+gprocessor \- Gnash SWF Processor
+.SH Synopsis
+.nf
+
+gprocessor (options)... (file)...
+.fi
+.SH DESCRIPTION
+Gprocessor is an debugging tool for SWF files, that is a companion to
+Gnash. This is most often used for debugging and running testcases,
+as this tool is equivalant to running Gnash with no graphic
+output. This tool is primarily used by Gnash developers, or anyone
+that wishes to run the Gnash test cases.
+.TP 
+-h
+Print usage info.
+.TP 
+-w
+Write a .gsc file with preprocessed info, for each input file.
+.TP 
+-vp
+Be verbose about movie parsing.
+.TP 
+-va
+Be verbose about ActionScript.
+.TP 
+-d [ms]
+Milliseconds delay between advances (0 by default). If '-1'
+the delay will be computed from the FPS.
+.TP 
+-f [frames]
+Allow the given number of frame advancements. Keep advancing
+untill any other stop condition is encountered if set to 0
+(default).
+.TP 
+-r [times]
+Allow the given number of complete runs. Keep looping
+undefinitely if set to 0. Default is 1 (end as soon as the
+last frame is reached).

Index: doc/C/preformatted/soldumper.1.in
===================================================================
RCS file: doc/C/preformatted/soldumper.1.in
diff -N doc/C/preformatted/soldumper.1.in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/soldumper.1.in   2 Mar 2008 16:32:22 -0000       1.1
@@ -0,0 +1,31 @@
+.\" -*- coding: us-ascii -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH soldumper 1 "13 February 2008"  
+.SH NAME
+soldumper \- Gnash Local Shared Object file Dumper
+.SH Synopsis
+.nf
+
+soldumper (options)... (file)...
+.fi
+.SH DESCRIPTION
+Dump information about the .sol files used by the SharedObject
+ActionScript class. These files are comprised of a header, and a
+collection of SWF AMF Objects, normally not viewable by the user.
+.TP 
+-h
+Print usage info.
+.TP 
+-l
+List all the .sol files in the default path.
+.TP 
+-f
+Ignore the global setting, use the current directory for files.
+.TP 
+-v
+Verbose output.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]